mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-02 00:26:25 +08:00
REF: Blotter no longer needs AssetFinder
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user