diff --git a/tests/test_perf_tracking.py b/tests/test_perf_tracking.py index e2ae3a4d..659e9677 100644 --- a/tests/test_perf_tracking.py +++ b/tests/test_perf_tracking.py @@ -41,8 +41,8 @@ oneday = datetime.timedelta(days=1) tradingday = datetime.timedelta(hours=6, minutes=30) -def create_txn(sid, price, amount, dt): - return create_transaction(sid, amount, price, dt, "fakeuid") +def create_txn(event, price, amount): + return create_transaction(event, amount, price, "fakeuid") def benchmark_events_in_range(sim_params): @@ -130,7 +130,7 @@ class TestDividendPerformance(unittest.TestCase): events[2].dt ) - txn = create_txn(1, 10.0, 100, events[0].dt) + txn = create_txn(events[0], 10.0, 100) events.insert(0, txn) events.insert(1, dividend) results = calculate_results(self, events) @@ -169,7 +169,7 @@ class TestDividendPerformance(unittest.TestCase): ) events.insert(1, dividend) - txn = create_txn(1, 10.0, 100, events[3].dt) + txn = create_txn(events[3], 10.0, 100) events.insert(4, txn) results = calculate_results(self, events) @@ -203,9 +203,9 @@ class TestDividendPerformance(unittest.TestCase): events[3].dt ) - buy_txn = create_txn(1, 10.0, 100, events[0].dt) + buy_txn = create_txn(events[0], 10.0, 100) events.insert(1, buy_txn) - sell_txn = create_txn(1, 10.0, -100, events[3].dt) + sell_txn = create_txn(events[3], 10.0, -100) events.insert(4, sell_txn) events.insert(0, dividend) results = calculate_results(self, events) @@ -240,9 +240,9 @@ class TestDividendPerformance(unittest.TestCase): events[5].dt ) - buy_txn = create_txn(1, 10.0, 100, events[1].dt) + buy_txn = create_txn(events[1], 10.0, 100) events.insert(1, buy_txn) - sell_txn = create_txn(1, 10.0, -100, events[3].dt) + sell_txn = create_txn(events[3], 10.0, -100) events.insert(3, sell_txn) events.insert(1, dividend) results = calculate_results(self, events) @@ -281,7 +281,7 @@ class TestDividendPerformance(unittest.TestCase): pay_date ) - buy_txn = create_txn(1, 10.0, 100, events[1].dt) + buy_txn = create_txn(events[1], 10.0, 100) events.insert(2, buy_txn) events.insert(1, dividend) results = calculate_results(self, events) @@ -321,7 +321,7 @@ class TestDividendPerformance(unittest.TestCase): events[3].dt ) - txn = create_txn(1, 10.0, -100, events[1].dt) + txn = create_txn(events[1], 10.0, -100) events.insert(1, txn) events.insert(0, dividend) results = calculate_results(self, events) @@ -411,7 +411,7 @@ class TestPositionPerformance(unittest.TestCase): self.sim_params ) - txn = create_txn(1, 10.0, 100, self.dt + onesec) + txn = create_txn(trades[1], 10.0, 100) pp = perf.PerformancePeriod(1000.0) pp.execute_transaction(txn) @@ -482,7 +482,7 @@ single short-sale transaction""" trades_1 = trades[:-2] - txn = create_txn(1, 10.0, -100, self.dt + onesec) + txn = create_txn(trades[1], 10.0, -100) pp = perf.PerformancePeriod(1000.0) pp.execute_transaction(txn) @@ -671,13 +671,12 @@ trade after cover""" ) short_txn = create_txn( - 1, + trades[1], 10.0, -100, - self.dt + onesec ) - cover_txn = create_txn(1, 7.0, 100, self.dt + onesec * 6) + cover_txn = create_txn(trades[6], 7.0, 100) pp = perf.PerformancePeriod(1000.0) pp.execute_transaction(short_txn) @@ -785,18 +784,17 @@ shares in position" 400 ) - saleTxn = create_txn( - 1, - 10.0, - -100, - self.dt + onesec * 4) - down_tick = factory.create_trade( 1, 10.0, 100, trades[-1].dt + onesec) + saleTxn = create_txn( + down_tick, + 10.0, + -100) + pp.rollover() pp.execute_transaction(saleTxn) diff --git a/zipline/finance/slippage.py b/zipline/finance/slippage.py index b93b64f6..f8ed0f13 100644 --- a/zipline/finance/slippage.py +++ b/zipline/finance/slippage.py @@ -14,7 +14,6 @@ # limitations under the License. import abc -import pytz import math from copy import copy @@ -100,12 +99,12 @@ class Transaction(object): return py -def create_transaction(sid, amount, price, dt, order_id): +def create_transaction(event, amount, price, order_id): txn = { - 'sid': sid, + 'sid': event.sid, 'amount': int(amount), - 'dt': dt, + 'dt': event.dt, 'price': price, 'order_id': order_id } @@ -146,7 +145,6 @@ class VolumeShareSlippage(SlippageModel): def simulate(self, event, current_orders): - dt = event.dt simulated_impact = 0.0 max_volume = self.volume_limit * event.volume total_volume = 0 @@ -190,12 +188,11 @@ class VolumeShareSlippage(SlippageModel): if order.direction * cur_amount > 0: txn = create_transaction( - event.sid, + event, cur_amount, # In the future, we may want to change the next line # for limit pricing event.price + simulated_impact, - dt.replace(tzinfo=pytz.utc), order.id ) @@ -230,10 +227,9 @@ class FixedSlippage(SlippageModel): return txns txn = create_transaction( - event.sid, + event, order.amount, event.price + (self.spread / 2.0 * order.direction), - event.dt.replace(tzinfo=pytz.utc), order.id )