From 7196e1e4986fdf02969dcd9b18305f4626cef30c Mon Sep 17 00:00:00 2001 From: Jean Bredeche Date: Mon, 24 Apr 2017 15:33:52 -0400 Subject: [PATCH] MAINT: PR feedback. --- tests/test_finance.py | 5 ++-- zipline/finance/order.py | 2 ++ zipline/finance/performance/period.py | 24 ++++--------------- .../finance/performance/position_tracker.py | 7 +++--- zipline/finance/transaction.py | 2 ++ zipline/protocol.py | 4 +++- 6 files changed, 17 insertions(+), 27 deletions(-) diff --git a/tests/test_finance.py b/tests/test_finance.py index 914cb090..40667326 100644 --- a/tests/test_finance.py +++ b/tests/test_finance.py @@ -380,9 +380,8 @@ class FinanceTestCase(WithLogger, # asset 133 so it should be ignored. blotter.process_splits([(asset133, 0.5), (asset2, 0.3333)]) - for sid in [1, 2]: - order_lists = \ - blotter.open_orders[self.asset_finder.retrieve_asset(sid)] + for asset in [asset1, asset2]: + order_lists = blotter.open_orders[asset] self.assertIsNotNone(order_lists) self.assertEqual(1, len(order_lists)) diff --git a/zipline/finance/order.py b/zipline/finance/order.py index 91b3edae..47ee24c3 100644 --- a/zipline/finance/order.py +++ b/zipline/finance/order.py @@ -87,8 +87,10 @@ class Order(object): if self.broker_order_id is None: del dct['broker_order_id'] + # Adding 'sid' for backwards compatibility with downstream consumers. dct['sid'] = self.asset dct['status'] = self.status + return dct @property diff --git a/zipline/finance/performance/period.py b/zipline/finance/performance/period.py index 1d009dd5..89ddbfd8 100644 --- a/zipline/finance/performance/period.py +++ b/zipline/finance/performance/period.py @@ -183,10 +183,6 @@ class PerformancePeriod(object): self._account_store = zp.Account() self.serialize_positions = serialize_positions - # This dict contains the known cash flow multipliers for assets and is - # keyed on asset - self._execution_cash_flow_multipliers = {} - _position_tracker = None def initialize(self, starting_cash, starting_value, starting_exposure): @@ -383,25 +379,15 @@ class PerformancePeriod(object): except KeyError: self.processed_transactions[txn.dt] = [txn] - def _calculate_execution_cash_flow(self, txn): + @staticmethod + def _calculate_execution_cash_flow(txn): """ Calculates the cash flow from executing the given transaction """ - # Check if the multiplier is cached. If it is not, look up the asset - # and cache the multiplier. - try: - multiplier = self._execution_cash_flow_multipliers[txn.asset] - except KeyError: - asset = txn.asset - # Futures experience no cash flow on transactions - if isinstance(asset, Future): - multiplier = 0 - else: - multiplier = 1 - self._execution_cash_flow_multipliers[txn.asset] = multiplier + if txn.asset is Future: + return 0.0 - # Calculate and return the cash flow given the multiplier - return -1 * txn.price * txn.amount * multiplier + return -1 * txn.price * txn.amount # backwards compat. TODO: remove? @property diff --git a/zipline/finance/performance/position_tracker.py b/zipline/finance/performance/position_tracker.py index dc4f971b..67e547dc 100644 --- a/zipline/finance/performance/position_tracker.py +++ b/zipline/finance/performance/position_tracker.py @@ -54,7 +54,7 @@ def calc_position_values(positions): for position in positions: if isinstance(position.asset, Future): # Futures don't have an inherent position value. - values.append(0) + values.append(0.0) else: values.append(position.last_sale_price * position.amount) @@ -186,13 +186,12 @@ class PositionTracker(object): """ total_leftover_cash = 0 - for split in splits: - asset = split[0] + for asset, ratio in splits: if asset in self.positions: # Make the position object handle the split. It returns the # leftover cash from a fractional share, if there is any. position = self.positions[asset] - leftover_cash = position.handle_split(asset, split[1]) + leftover_cash = position.handle_split(asset, ratio) total_leftover_cash += leftover_cash return total_leftover_cash diff --git a/zipline/finance/transaction.py b/zipline/finance/transaction.py index 55814238..94b03300 100644 --- a/zipline/finance/transaction.py +++ b/zipline/finance/transaction.py @@ -39,6 +39,8 @@ class Transaction(object): py = copy(self.__dict__) del py['type'] del py['asset'] + + # Adding 'sid' for backwards compatibility with downstrean consumers. py['sid'] = self.asset return py diff --git a/zipline/protocol.py b/zipline/protocol.py index fd78a710..07f814e4 100644 --- a/zipline/protocol.py +++ b/zipline/protocol.py @@ -235,8 +235,10 @@ class Position(object): self.last_sale_price = 0.0 self.last_sale_date = None + @property + def sid(self): # for backwards compatibility - self.sid = asset + return self.asset def __repr__(self): return "Position({0})".format(self.__dict__)