mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-28 11:18:19 +08:00
MAINT: Add comments and rename methods in PerformanceTracker.
The function that handles a market close for daily frequency changed from `handle_market_close` to `handle_market_close_daily`. The function that is called at on the closing minute each day when running minutely changed from `handle_intraday_close` to `handle_intraday_market_close`.
This commit is contained in:
@@ -88,7 +88,7 @@ def calculate_results(host, events):
|
||||
if event.type == DATASOURCE_TYPE.BENCHMARK:
|
||||
bm_updated = True
|
||||
if bm_updated:
|
||||
msg = perf_tracker.handle_market_close()
|
||||
msg = perf_tracker.handle_market_close_daily()
|
||||
results.append(msg)
|
||||
bm_updated = False
|
||||
return results
|
||||
@@ -1259,7 +1259,7 @@ class TestPerformanceTracker(unittest.TestCase):
|
||||
for date, group in grouped_events:
|
||||
for event in group:
|
||||
perf_tracker.process_event(event)
|
||||
msg = perf_tracker.handle_market_close()
|
||||
msg = perf_tracker.handle_market_close_daily()
|
||||
perf_messages.append(msg)
|
||||
|
||||
self.assertEqual(perf_tracker.txn_count, len(txns))
|
||||
|
||||
@@ -305,7 +305,17 @@ class PerformanceTracker(object):
|
||||
if dt == self.market_close:
|
||||
self.returns[todays_date] = self.todays_performance.returns
|
||||
|
||||
def handle_intraday_close(self, new_mkt_open, new_mkt_close):
|
||||
def handle_intraday_market_close(self, new_mkt_open, new_mkt_close):
|
||||
"""
|
||||
Function called at market close only when emitting at minutely
|
||||
frequency.
|
||||
|
||||
TODO_SS: Why dont' we call this if we're emitting at daily frequency
|
||||
but running with a minutely datasource? Is that just not a
|
||||
valid combination? If so, why do we draw a distinction between
|
||||
emission rate and data frequency?
|
||||
"""
|
||||
|
||||
# update_performance should have been called in handle_minute_close
|
||||
# so it is not repeated here.
|
||||
self.intraday_risk_metrics = \
|
||||
@@ -315,7 +325,11 @@ class PerformanceTracker(object):
|
||||
self.market_open = new_mkt_open
|
||||
self.market_close = new_mkt_close
|
||||
|
||||
def handle_market_close(self):
|
||||
def handle_market_close_daily(self):
|
||||
"""
|
||||
Function called after handle_data when running with daily emission
|
||||
rate.
|
||||
"""
|
||||
self.update_performance()
|
||||
# add the return results from today to the returns series
|
||||
todays_date = normalize_date(self.market_close)
|
||||
|
||||
@@ -153,8 +153,10 @@ class AlgorithmSimulator(object):
|
||||
# If at the end of backtest history,
|
||||
# skip advancing market close.
|
||||
pass
|
||||
self.algo.perf_tracker.handle_intraday_close(
|
||||
mkt_open, mkt_close)
|
||||
self.algo.perf_tracker\
|
||||
.handle_intraday_market_close(
|
||||
mkt_open,
|
||||
mkt_close)
|
||||
|
||||
self.algo.portfolio_needs_update = True
|
||||
|
||||
@@ -236,16 +238,19 @@ class AlgorithmSimulator(object):
|
||||
self.algo.blotter.new_orders = []
|
||||
return orders
|
||||
|
||||
def get_message(self, date):
|
||||
def get_message(self, dt):
|
||||
"""
|
||||
Get a perf message for the given datetime.
|
||||
"""
|
||||
rvars = self.algo.recorded_vars
|
||||
if self.algo.perf_tracker.emission_rate == 'daily':
|
||||
perf_message = \
|
||||
self.algo.perf_tracker.handle_market_close()
|
||||
self.algo.perf_tracker.handle_market_close_daily()
|
||||
perf_message['daily_perf']['recorded_vars'] = rvars
|
||||
return perf_message
|
||||
|
||||
elif self.algo.perf_tracker.emission_rate == 'minute':
|
||||
self.algo.perf_tracker.handle_minute_close(date)
|
||||
self.algo.perf_tracker.handle_minute_close(dt)
|
||||
perf_message = self.algo.perf_tracker.to_dict()
|
||||
perf_message['minute_perf']['recorded_vars'] = rvars
|
||||
return perf_message
|
||||
|
||||
Reference in New Issue
Block a user