diff --git a/tests/test_perf_tracking.py b/tests/test_perf_tracking.py index 70c1d210..91c71703 100644 --- a/tests/test_perf_tracking.py +++ b/tests/test_perf_tracking.py @@ -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)) diff --git a/zipline/finance/performance/tracker.py b/zipline/finance/performance/tracker.py index 74b1291b..179c2cb9 100644 --- a/zipline/finance/performance/tracker.py +++ b/zipline/finance/performance/tracker.py @@ -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) diff --git a/zipline/gens/tradesimulation.py b/zipline/gens/tradesimulation.py index de94d786..27b6303a 100644 --- a/zipline/gens/tradesimulation.py +++ b/zipline/gens/tradesimulation.py @@ -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