REF: Blotter no longer needs AssetFinder

This commit is contained in:
Jean Bredeche
2017-04-21 14:00:21 -04:00
parent 59a96bf782
commit e429664fa6
6 changed files with 20 additions and 42 deletions
+9 -19
View File
@@ -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),
+3 -6
View File
@@ -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
+5 -9
View File
@@ -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))
-1
View File
@@ -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,
)
+1 -3
View File
@@ -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
+2 -4
View File
@@ -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):