From 6561292e4cabbe0018d326ae40092cfff53ffc0c Mon Sep 17 00:00:00 2001 From: fawce Date: Wed, 18 Apr 2012 10:55:21 -0400 Subject: [PATCH] some efficiency changes - no longer transferring the list of daily returns, no longer holding transactions in the daily and the cumulative performance periods. --- zipline/finance/performance.py | 13 +++++++++---- zipline/finance/trading.py | 6 +++--- zipline/protocol.py | 16 +--------------- zipline/test/test_finance.py | 8 -------- 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/zipline/finance/performance.py b/zipline/finance/performance.py index ce1c9bcb..9eb936a2 100644 --- a/zipline/finance/performance.py +++ b/zipline/finance/performance.py @@ -178,7 +178,9 @@ class PerformanceTracker(): # initial portfolio positions have zero value 0, # initial cash is your capital base. - starting_cash = self.capital_base + starting_cash = self.capital_base, + # save the transactions for the daily periods + keep_transactions = True ) def get_portfolio(self): @@ -288,7 +290,8 @@ class PerformanceTracker(): self.todays_performance = PerformancePeriod( self.todays_performance.positions, self.todays_performance.ending_value, - self.todays_performance.ending_cash + self.todays_performance.ending_cash, + keep_transactions = True ) def handle_simulation_end(self): @@ -374,7 +377,7 @@ class Position(): class PerformancePeriod(): - def __init__(self, initial_positions, starting_value, starting_cash): + def __init__(self, initial_positions, starting_value, starting_cash, keep_transactions=False): self.ending_value = 0.0 self.period_capital_used = 0.0 self.pnl = 0.0 @@ -384,6 +387,7 @@ class PerformancePeriod(): #cash balance at start of period self.starting_cash = starting_cash self.ending_cash = starting_cash + self.keep_transactions = keep_transactions self.processed_transactions = [] self.cumulative_capital_used = 0.0 self.max_capital_used = 0.0 @@ -434,7 +438,8 @@ class PerformancePeriod(): self.max_leverage = 1.1 * self.max_capital_used / self.starting_cash # add transaction to the list of processed transactions - self.processed_transactions.append(txn) + if self.keep_transactions: + self.processed_transactions.append(txn) def round_to_nearest(self, x, base=5): return int(base * round(float(x)/base)) diff --git a/zipline/finance/trading.py b/zipline/finance/trading.py index 045f9471..9a950e61 100644 --- a/zipline/finance/trading.py +++ b/zipline/finance/trading.py @@ -439,12 +439,12 @@ class TransactionSimulator(qmsg.BaseTransform): warning = """ Calculated a zero volume transaction on trade: {event} -for order: -{order} +for orders: +{orders} """ warning = warning.format( event=str(event), - order=str(order) + orders=str(orders) ) qutil.LOGGER.warn(warning) return None diff --git a/zipline/protocol.py b/zipline/protocol.py index 5663b5d7..4cdc54f4 100644 --- a/zipline/protocol.py +++ b/zipline/protocol.py @@ -623,11 +623,6 @@ def PERF_FRAME(perf): """ #TODO: add asserts... - - # DATE fields: - # started_at, period_start, period_end, last_close, last_open - # pos.last_sale_date - # txn.dt assert isinstance(perf['started_at'], datetime.datetime) assert isinstance(perf['period_start'], datetime.datetime) @@ -654,16 +649,7 @@ def PERF_FRAME(perf): tp['transactions'] = convert_transactions(tp['transactions']) cp['transactions'] = convert_transactions(cp['transactions']) - - returns = [] - for dr in perf['returns']: - updated = {} - updated['returns'] = dr['returns'] - updated['date'] = EPOCH(dr['dt']) - returns.append(updated) - - perf['returns'] = returns - + return BT_UPDATE_FRAME('PERF', perf) def convert_transactions(transactions): diff --git a/zipline/test/test_finance.py b/zipline/test/test_finance.py index 2ff7da61..a85f220d 100644 --- a/zipline/test/test_finance.py +++ b/zipline/test/test_finance.py @@ -139,14 +139,6 @@ class FinanceTestCase(TestCase): zipline.trading_client.order_count ) - # the number of transactions in the performance tracker's cumulative - # period should be the same as the number of orders place by the - # algorithm. - self.assertEqual( - zipline.trading_client.order_count, - len(zipline.trading_client.perf.cumulative_performance.processed_transactions) - ) - @timed(EXTENDED_TIMEOUT) def test_aggressive_buying(self):