From 8937ac1f41cfbd1f6e6f068a53379082898851dc Mon Sep 17 00:00:00 2001 From: Eddie Hebert Date: Mon, 22 Apr 2013 13:29:33 -0400 Subject: [PATCH] MAINT: Generate perfomance message only once per bar for minute mode. Instead of creating a set of perf messages for each event during minute emission mode, only include the messages on the last event in the bar. Should cut down on calculations/serialization as well, as work towards doing more 'end of bar' logic for minute benchmarks. --- zipline/finance/performance.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/zipline/finance/performance.py b/zipline/finance/performance.py index 5beb95b2..6935543c 100644 --- a/zipline/finance/performance.py +++ b/zipline/finance/performance.py @@ -232,10 +232,14 @@ class PerformanceTracker(object): for event in snapshot: self.process_event(event) if event.type == zp.DATASOURCE_TYPE.TRADE: - event.perf_messages = [self.to_dict()] - event.portfolio = self.get_portfolio() + event.perf_messages = [] + event.portfolio = None new_snapshot.append(event) + if new_snapshot: + new_snapshot[-1].perf_messages = [self.to_dict()] + new_snapshot[-1].portfolio = self.get_portfolio() + if new_snapshot: yield date, new_snapshot @@ -286,8 +290,6 @@ class PerformanceTracker(object): while (event.dt > self.market_close and event.dt < self.last_close): messages.append(self.handle_market_close()) - elif self.emission_rate == 'minute': - messages.append(self.to_dict()) #update last sale self.cumulative_performance.update_last_sale(event)