diff --git a/zipline/finance/performance/period.py b/zipline/finance/performance/period.py index c292b191..67dec7a7 100644 --- a/zipline/finance/performance/period.py +++ b/zipline/finance/performance/period.py @@ -198,9 +198,9 @@ class PerformancePeriod(object): def handle_cash_payment(self, payment_amount): self.adjust_cash(payment_amount) - def handle_commission(self, commission): + def handle_commission(self, cost): # Deduct from our total cash pool. - self.adjust_cash(-commission.cost) + self.adjust_cash(-cost) def adjust_cash(self, amount): self.period_cash_flow += amount diff --git a/zipline/finance/performance/position.py b/zipline/finance/performance/position.py index 9a28ba86..2daf0039 100644 --- a/zipline/finance/performance/position.py +++ b/zipline/finance/performance/position.py @@ -165,7 +165,7 @@ class Position(object): self.amount = total_shares - def adjust_commission_cost_basis(self, commission): + def adjust_commission_cost_basis(self, sid, cost): """ A note about cost-basis in zipline: all positions are considered to share a cost basis, even if they were executed in different @@ -176,9 +176,9 @@ class Position(object): all shares in a position. """ - if commission.sid != self.sid: + if sid != self.sid: raise Exception('Updating a commission for a different sid?') - if commission.cost == 0.0: + if cost == 0.0: return # If we no longer hold this position, there is no cost basis to @@ -187,7 +187,7 @@ class Position(object): return prev_cost = self.cost_basis * self.amount - new_cost = prev_cost + commission.cost + new_cost = prev_cost + cost self.cost_basis = new_cost / self.amount def __repr__(self): diff --git a/zipline/finance/performance/position_tracker.py b/zipline/finance/performance/position_tracker.py index 8c5c3037..6ef069ad 100644 --- a/zipline/finance/performance/position_tracker.py +++ b/zipline/finance/performance/position_tracker.py @@ -317,11 +317,10 @@ class PositionTracker(object): position.update(txn) self._update_asset(sid) - def handle_commission(self, commission): + def handle_commission(self, sid, cost): # Adjust the cost basis of the stock if we own it - if commission.sid in self.positions: - self.positions[commission.sid].\ - adjust_commission_cost_basis(commission) + if sid in self.positions: + self.positions[sid].adjust_commission_cost_basis(sid, cost) def handle_split(self, split): if split.sid in self.positions: diff --git a/zipline/finance/performance/tracker.py b/zipline/finance/performance/tracker.py index 558b46cc..a6cf6bf0 100644 --- a/zipline/finance/performance/tracker.py +++ b/zipline/finance/performance/tracker.py @@ -314,11 +314,13 @@ class PerformanceTracker(object): self.cumulative_performance.record_order(event) self.todays_performance.record_order(event) - def process_commission(self, event): + def process_commission(self, commission): + sid = commission.sid + cost = commission.cost - self.position_tracker.handle_commission(event) - self.cumulative_performance.handle_commission(event) - self.todays_performance.handle_commission(event) + self.position_tracker.handle_commission(sid, cost) + self.cumulative_performance.handle_commission(cost) + self.todays_performance.handle_commission(cost) def process_benchmark(self, event): if self.sim_params.data_frequency == 'minute' and \