From b3bc7e166df57b05e0b4764dee218e84dbf51ca9 Mon Sep 17 00:00:00 2001 From: Dale Jung Date: Tue, 17 Feb 2015 09:32:49 -0500 Subject: [PATCH] BUG: Remove sid entry from open_orders when there are none. TST: updated tests for new open_orders behavior --- tests/test_finance.py | 6 ++---- zipline/finance/blotter.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/test_finance.py b/tests/test_finance.py index 23764a6d..5d9eabca 100644 --- a/tests/test_finance.py +++ b/tests/test_finance.py @@ -307,11 +307,9 @@ class FinanceTestCase(TestCase): cumulative_pos = tracker.cumulative_performance.positions[sid] self.assertEqual(total_volume, cumulative_pos.amount) - # the open orders should now be empty + # the open orders should not contain sid. oo = blotter.open_orders - self.assertTrue(sid in oo) - order_list = oo[sid] - self.assertEqual(0, len(order_list)) + self.assertNotIn(sid, oo, "Entry is removed when no open orders") def test_blotter_processes_splits(self): sim_params = factory.create_simulation_parameters() diff --git a/zipline/finance/blotter.py b/zipline/finance/blotter.py index 94253344..a3d2a5c3 100644 --- a/zipline/finance/blotter.py +++ b/zipline/finance/blotter.py @@ -210,10 +210,15 @@ class Blotter(object): yield txn, order # update the open orders for the trade_event's sid - self.open_orders[trade_event.sid] = \ + updated_orders = \ [order for order - in self.open_orders[trade_event.sid] - if order.open] + in self.open_orders[trade_event.sid] + if order.open] + + if updated_orders: + self.open_orders[trade_event.sid] = updated_orders + else: + del self.open_orders[trade_event.sid] def process_transactions(self, trade_event, current_orders): for order, txn in self.transact(trade_event, current_orders):