mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-08 13:18:11 +08:00
fixes and tests for result streaming.
This commit is contained in:
@@ -144,8 +144,9 @@ class PerformanceTracker():
|
||||
self.market_open = self.period_start
|
||||
self.market_close = self.market_open + self.trading_day
|
||||
self.progress = 0.0
|
||||
self.total_days = (self.period_end - self.period_start).days
|
||||
self.day_count = 0
|
||||
self.total_days = self.trading_environment.days_in_period
|
||||
# one indexed so that we reach 100%
|
||||
self.day_count = 0.0
|
||||
self.cumulative_capital_used = 0.0
|
||||
self.max_capital_used = 0.0
|
||||
self.capital_base = self.trading_environment.capital_base
|
||||
|
||||
@@ -366,6 +366,7 @@ class TradingEnvironment(object):
|
||||
self.period_start = period_start
|
||||
self.period_end = period_end
|
||||
self.capital_base = capital_base
|
||||
self.period_trading_days = None
|
||||
|
||||
for bm in benchmark_returns:
|
||||
self.trading_days.append(bm.date)
|
||||
@@ -378,6 +379,24 @@ class TradingEnvironment(object):
|
||||
day=test_date.day,
|
||||
tzinfo=pytz.utc
|
||||
)
|
||||
|
||||
@property
|
||||
def days_in_period(self):
|
||||
"""return the number of trading days within the period [start, end)"""
|
||||
assert(self.period_start != None)
|
||||
assert(self.period_end != None)
|
||||
|
||||
if self.period_trading_days == None:
|
||||
self.period_trading_days = []
|
||||
for date in self.trading_days:
|
||||
if date > self.period_end:
|
||||
break
|
||||
if date >= self.period_start:
|
||||
self.period_trading_days.append(date)
|
||||
|
||||
return len(self.period_trading_days)
|
||||
|
||||
|
||||
|
||||
def is_trading_day(self, test_date):
|
||||
dt = self.normalize_date(test_date)
|
||||
|
||||
+4
-2
@@ -676,8 +676,10 @@ def PERF_UNFRAME(msg):
|
||||
# -----------------------
|
||||
|
||||
def EPOCH(some_date):
|
||||
return time.mktime(some_date.timetuple())
|
||||
|
||||
seconds = time.mktime(some_date.timetuple())
|
||||
ms = seconds * 1000
|
||||
return ms
|
||||
|
||||
def PACK_DATE(event):
|
||||
"""
|
||||
Packs the datetime property of event into msgpack'able longs.
|
||||
|
||||
+2
-2
@@ -39,7 +39,7 @@ class RandomEquityTrades(TradeDataSource):
|
||||
self.incr = 0
|
||||
self.sid = sid
|
||||
self.trade_start = datetime.datetime.now().replace(tzinfo=pytz.utc)
|
||||
self.minute = datetime.timedelta(minutes=1)
|
||||
self.day = datetime.timedelta(days=1)
|
||||
self.price = random.uniform(5.0, 50.0)
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ class RandomEquityTrades(TradeDataSource):
|
||||
"sid" : self.sid,
|
||||
"price" : self.price,
|
||||
"volume" : volume,
|
||||
"dt" : self.trade_start + (self.minute * self.incr),
|
||||
"dt" : self.trade_start + (self.day * self.incr),
|
||||
})
|
||||
self.send(event)
|
||||
self.incr += 1
|
||||
|
||||
@@ -37,6 +37,20 @@ class FinanceTestCase(TestCase):
|
||||
'sid':133
|
||||
}
|
||||
|
||||
@timed(DEFAULT_TIMEOUT)
|
||||
def test_factory(self):
|
||||
trading_environment = factory.create_trading_environment()
|
||||
trade_source = factory.create_daily_trade_source(
|
||||
[133],
|
||||
200,
|
||||
trading_environment
|
||||
)
|
||||
prev = None
|
||||
for trade in trade_source.event_list:
|
||||
if prev:
|
||||
self.assertTrue(trade.dt > prev.dt)
|
||||
prev = trade
|
||||
|
||||
@timed(DEFAULT_TIMEOUT)
|
||||
def test_orders(self):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user