From e429664fa6aeb98974eeb9b20a42ef9f8d7f39a5 Mon Sep 17 00:00:00 2001 From: Jean Bredeche Date: Fri, 21 Apr 2017 14:00:21 -0400 Subject: [PATCH] REF: Blotter no longer needs AssetFinder --- tests/finance/test_blotter.py | 28 +++++++++------------------- tests/test_algorithm.py | 9 +++------ tests/test_finance.py | 14 +++++--------- zipline/algorithm.py | 1 - zipline/finance/blotter.py | 4 +--- zipline/testing/core.py | 6 ++---- 6 files changed, 20 insertions(+), 42 deletions(-) diff --git a/tests/finance/test_blotter.py b/tests/finance/test_blotter.py index adfc5eee..95786f7f 100644 --- a/tests/finance/test_blotter.py +++ b/tests/finance/test_blotter.py @@ -151,8 +151,7 @@ class BlotterTestCase(WithCreateBarData, self.assertEqual(list(blotter.open_orders), [self.asset_25]) def test_blotter_eod_cancellation(self): - blotter = Blotter('minute', self.asset_finder, - cancel_policy=EODCancel()) + blotter = Blotter('minute', cancel_policy=EODCancel()) # Make two orders for the same asset, so we can test that we are not # mutating the orders list as we are cancelling orders @@ -175,8 +174,7 @@ class BlotterTestCase(WithCreateBarData, self.assertEqual(order.status, ORDER_STATUS.CANCELLED) def test_blotter_never_cancel(self): - blotter = Blotter('minute', self.asset_finder, - cancel_policy=NeverCancel()) + blotter = Blotter('minute', cancel_policy=NeverCancel()) blotter.order(self.asset_24, 100, MarketOrder()) @@ -190,8 +188,7 @@ class BlotterTestCase(WithCreateBarData, self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN) def test_order_rejection(self): - blotter = Blotter(self.sim_params.data_frequency, - self.asset_finder) + blotter = Blotter(self.sim_params.data_frequency) # Reject a nonexistent order -> no order appears in new_order, # no exceptions raised out @@ -220,8 +217,7 @@ class BlotterTestCase(WithCreateBarData, # Do it again, but reject it at a later time (after tradesimulation # pulls it from new_orders) - blotter = Blotter(self.sim_params.data_frequency, - self.asset_finder) + blotter = Blotter(self.sim_params.data_frequency) new_open_id = blotter.order(self.asset_24, 10, MarketOrder()) new_open_order = blotter.open_orders[self.asset_24][0] self.assertEqual(new_open_id, new_open_order.id) @@ -237,8 +233,7 @@ class BlotterTestCase(WithCreateBarData, # You can't reject a filled order. # Reset for paranoia - blotter = Blotter(self.sim_params.data_frequency, - self.asset_finder) + blotter = Blotter(self.sim_params.data_frequency) blotter.slippage_models[Equity] = FixedSlippage() filled_id = blotter.order(self.asset_24, 100, MarketOrder()) filled_order = None @@ -303,8 +298,7 @@ class BlotterTestCase(WithCreateBarData, expected_status = ORDER_STATUS.OPEN if expected_open else \ ORDER_STATUS.FILLED - blotter = Blotter(self.sim_params.data_frequency, - self.asset_finder) + blotter = Blotter(self.sim_params.data_frequency) open_id = blotter.order(self.asset_24, order_size, MarketOrder()) open_order = blotter.open_orders[self.asset_24][0] self.assertEqual(open_id, open_order.id) @@ -326,8 +320,7 @@ class BlotterTestCase(WithCreateBarData, self.assertEqual(filled_order.open_amount, expected_open) def test_prune_orders(self): - blotter = Blotter(self.sim_params.data_frequency, - self.asset_finder) + blotter = Blotter(self.sim_params.data_frequency) blotter.order(self.asset_24, 100, MarketOrder()) open_order = blotter.open_orders[self.asset_24][0] @@ -354,10 +347,8 @@ class BlotterTestCase(WithCreateBarData, Ensure the effect of order_batch is the same as multiple calls to order. """ - blotter1 = Blotter(self.sim_params.data_frequency, - self.asset_finder) - blotter2 = Blotter(self.sim_params.data_frequency, - self.asset_finder) + blotter1 = Blotter(self.sim_params.data_frequency) + blotter2 = Blotter(self.sim_params.data_frequency) for i in range(1, 4): order_arg_lists = [ (self.asset_24, i * 100, MarketOrder()), @@ -386,7 +377,6 @@ class BlotterTestCase(WithCreateBarData, def test_slippage_and_commission_dispatching(self): blotter = Blotter( self.sim_params.data_frequency, - self.asset_finder, equity_slippage=FixedSlippage(spread=0.0), future_slippage=FixedSlippage(spread=2.0), equity_commission=PerTrade(cost=1.0), diff --git a/tests/test_algorithm.py b/tests/test_algorithm.py index cb98d12a..e44b14b9 100644 --- a/tests/test_algorithm.py +++ b/tests/test_algorithm.py @@ -1790,8 +1790,7 @@ def handle_data(context, data): def test_batch_order_target_percent_matches_multi_order(self): weights = pd.Series([.3, .7]) - multi_blotter = RecordBatchBlotter(self.SIM_PARAMS_DATA_FREQUENCY, - self.asset_finder) + multi_blotter = RecordBatchBlotter(self.SIM_PARAMS_DATA_FREQUENCY) multi_test_algo = TradingAlgorithm( script=dedent("""\ from collections import OrderedDict @@ -1820,8 +1819,7 @@ def handle_data(context, data): multi_stats = multi_test_algo.run(self.data_portal) self.assertFalse(multi_blotter.order_batch_called) - batch_blotter = RecordBatchBlotter(self.SIM_PARAMS_DATA_FREQUENCY, - self.asset_finder) + batch_blotter = RecordBatchBlotter(self.SIM_PARAMS_DATA_FREQUENCY) batch_test_algo = TradingAlgorithm( script=dedent("""\ from collections import OrderedDict @@ -1864,8 +1862,7 @@ def handle_data(context, data): def test_batch_order_target_percent_filters_null_orders(self): weights = pd.Series([1, 0]) - batch_blotter = RecordBatchBlotter(self.SIM_PARAMS_DATA_FREQUENCY, - self.asset_finder) + batch_blotter = RecordBatchBlotter(self.SIM_PARAMS_DATA_FREQUENCY) batch_test_algo = TradingAlgorithm( script=dedent("""\ from collections import OrderedDict diff --git a/tests/test_finance.py b/tests/test_finance.py index f176d608..4145ea92 100644 --- a/tests/test_finance.py +++ b/tests/test_finance.py @@ -275,8 +275,7 @@ class FinanceTestCase(WithLogger, else: slippage_func = None - blotter = Blotter(sim_params.data_frequency, self.env.asset_finder, - slippage_func) + blotter = Blotter(sim_params.data_frequency, slippage_func) start_date = sim_params.first_open @@ -366,22 +365,19 @@ class FinanceTestCase(WithLogger, ) def test_blotter_processes_splits(self): - blotter = Blotter('daily', self.env.asset_finder, - equity_slippage=FixedSlippage()) + blotter = Blotter('daily', equity_slippage=FixedSlippage()) # set up two open limit orders with very low limit prices, # one for sid 1 and one for sid 2 - blotter.order( - blotter.asset_finder.retrieve_asset(1), 100, LimitOrder(10)) - blotter.order( - blotter.asset_finder.retrieve_asset(2), 100, LimitOrder(10)) + blotter.order(self.asset_finder.retrieve_asset(1), 100, LimitOrder(10)) + blotter.order(self.asset_finder.retrieve_asset(2), 100, LimitOrder(10)) # send in a split for sid 2 blotter.process_splits([(2, 0.3333)]) for sid in [1, 2]: order_lists = \ - blotter.open_orders[blotter.asset_finder.retrieve_asset(sid)] + blotter.open_orders[self.asset_finder.retrieve_asset(sid)] self.assertIsNotNone(order_lists) self.assertEqual(1, len(order_lists)) diff --git a/zipline/algorithm.py b/zipline/algorithm.py index 476dc706..8ec1883b 100644 --- a/zipline/algorithm.py +++ b/zipline/algorithm.py @@ -322,7 +322,6 @@ class TradingAlgorithm(object): if not self.blotter: self.blotter = Blotter( data_frequency=self.data_frequency, - asset_finder=self.asset_finder, # Default to NeverCancel in zipline cancel_policy=self.cancel_policy, ) diff --git a/zipline/finance/blotter.py b/zipline/finance/blotter.py index 9ca934b6..d27721ee 100644 --- a/zipline/finance/blotter.py +++ b/zipline/finance/blotter.py @@ -34,7 +34,7 @@ warning_logger = Logger('AlgoWarning') class Blotter(object): - def __init__(self, data_frequency, asset_finder, equity_slippage=None, + def __init__(self, data_frequency, equity_slippage=None, future_slippage=None, equity_commission=None, future_commission=None, cancel_policy=None): # these orders are aggregated by asset @@ -43,8 +43,6 @@ class Blotter(object): # keep a dict of orders by their own id self.orders = {} - self.asset_finder = asset_finder - # holding orders that have come in since the last event. self.new_orders = [] self.current_dt = None diff --git a/zipline/testing/core.py b/zipline/testing/core.py index abfe110b..47eee138 100644 --- a/zipline/testing/core.py +++ b/zipline/testing/core.py @@ -1512,10 +1512,8 @@ def ensure_doctest(f, name=None): class RecordBatchBlotter(Blotter): """Blotter that tracks how its batch_order method was called. """ - def __init__(self, data_frequency, asset_finder): - super(RecordBatchBlotter, self).__init__( - data_frequency, asset_finder, - ) + def __init__(self, data_frequency): + super(RecordBatchBlotter, self).__init__(data_frequency) self.order_batch_called = [] def batch_order(self, *args, **kwargs):