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 self.open_orders = defaultdict(list) # keep a dict of orders by their own id self.orders = {} # holding orders that have come in since the last event. self.new_orders = [] self.current_dt = None self.max_shares = int(1e+11) self.slippage_models = { Equity: equity_slippage or VolumeShareSlippage(), Future: future_slippage or VolumeShareSlippage(), } self.commission_models = { Equity: equity_commission or PerShare(), Future: future_commission or PerTrade(cost=DEFAULT_FUTURE_COST_PER_TRADE, ), } self.data_frequency = data_frequency self.cancel_policy = cancel_policy if cancel_policy else NeverCancel()
def __init__(self, data_frequency, equity_slippage=None, future_slippage=None, equity_commission=None, future_commission=None, cancel_policy=None, stock_exchange='NYSE'): # these orders are aggregated by asset self.open_orders = defaultdict(list) # keep a dict of orders by their own id self.orders = {} # holding orders that have come in since the last event. self.new_orders = [] self.current_dt = None self.max_shares = int(1e+11) self.slippage_models = { Equity: equity_slippage or FixedBasisPointsSlippage(), Future: future_slippage or VolatilityVolumeShare( volume_limit=DEFAULT_FUTURE_VOLUME_SLIPPAGE_BAR_LIMIT, ), } self.commission_models = { Equity: equity_commission or PerShare(), Future: future_commission or PerContract( cost=DEFAULT_PER_CONTRACT_COST, exchange_fee=FUTURE_EXCHANGE_FEES_BY_SYMBOL, ), } self.data_frequency = data_frequency self.cancel_policy = cancel_policy if cancel_policy else NeverCancel()
def __init__(self, data_frequency, asset_finder, slippage_func=None, commission=None, cancel_policy=None): # these orders are aggregated by sid self.open_orders = defaultdict(list) # keep a dict of orders by their own id self.orders = {} # all our legacy order management code works with integer sids. # this lets us convert those to assets when needed. ideally, we'd just # revamp all the legacy code to work with assets. self.asset_finder = asset_finder # holding orders that have come in since the last event. self.new_orders = [] self.current_dt = None self.max_shares = int(1e+11) self.slippage_func = slippage_func or VolumeShareSlippage() self.commission = commission or PerShare() self.data_frequency = data_frequency self.cancel_policy = cancel_policy if cancel_policy else NeverCancel()
def test_blotter_never_cancel(self): blotter = SimulationBlotter(cancel_policy=NeverCancel()) blotter.order(self.asset_24, 100, MarketOrder()) self.assertEqual(len(blotter.new_orders), 1) self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN) blotter.execute_cancel_policy(BAR) self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN) blotter.execute_cancel_policy(SESSION_END) self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN)
def get_blotter(self): slippage_func = VolumeShareSlippage( volume_limit=1, price_impact=0 ) blotter = MyBlotter( data_frequency=self.sim_params.data_frequency, asset_finder=self.env.asset_finder, slippage_func=slippage_func, # https://github.com/quantopian/zipline/blob/3350227f44dcf36b6fe3c509dcc35fe512965183/tests/test_blotter.py#L136 cancel_policy=NeverCancel() ) return blotter
def test_blotter_never_cancel(self): blotter = Blotter('minute', self.env.asset_finder, cancel_policy=NeverCancel()) blotter.order(blotter.asset_finder.retrieve_asset(24), 100, MarketOrder()) self.assertEqual(len(blotter.new_orders), 1) self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN) blotter.execute_cancel_policy(BAR) self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN) blotter.execute_cancel_policy(DAY_END) self.assertEqual(blotter.new_orders[0].status, ORDER_STATUS.OPEN)
def __init__(self, data_frequency, asset_finder, equity_slippage=None, future_slippage=None, equity_commission=None, future_commission=None, cancel_policy=None): # these orders are aggregated by sid self.open_orders = defaultdict(list) # keep a dict of orders by their own id self.orders = {} # all our legacy order management code works with integer sids. # this lets us convert those to assets when needed. ideally, we'd just # revamp all the legacy code to work with assets. self.asset_finder = asset_finder # holding orders that have come in since the last event. self.new_orders = [] self.current_dt = None self.max_shares = int(1e+11) self.slippage_models = { Equity: equity_slippage or VolumeShareSlippage(), Future: future_slippage or VolumeShareSlippage(), } self.commission_models = { Equity: equity_commission or PerShare(), Future: future_commission or PerTrade(cost=DEFAULT_FUTURE_COST_PER_TRADE, ), } self.data_frequency = data_frequency self.cancel_policy = cancel_policy if cancel_policy else NeverCancel()
def test_never_cancel(self): cancel_policy = NeverCancel() self.assertFalse(cancel_policy.should_cancel(DAY_END)) self.assertFalse(cancel_policy.should_cancel(BAR))
def __init__(self, cancel_policy=None): self.cancel_policy = cancel_policy if cancel_policy else NeverCancel() self.current_dt = None
def __init__(self, cancel_policy=None): self.cancel_policy = cancel_policy if cancel_policy else NeverCancel() self.current_dt = None self.metrics_tracker = None
def test_never_cancel(self): cancel_policy = NeverCancel() self.assertFalse(cancel_policy.should_cancel(SESSION_END)) self.assertFalse(cancel_policy.should_cancel(BAR))
return bm, tr def analyze(context=None, results=None): ax1 = plt.subplot(211) results.portfolio_value.plot(ax=ax1) ax1.set_ylabel('Portfolio value (USD)') ax2 = plt.subplot(212, sharex=ax1) results.AAPL.plot(ax=ax2) ax2.set_ylabel('AAPL price (USD)') plt.gcf().set_size_inches(18, 8) plt.show() cal = SHSZExchangeCalendar() cancel_policy = NeverCancel() blotter = SimulationBlotter(cancel_policy=cancel_policy) trading_environment = TradingEnvironment(load=load_t, bm_symbol='^HSI', exchange_tz='Asia/Shanghai', trading_calendar=cal) sim_params = create_simulation_parameters( start=pd.to_datetime("2016-01-01 00:00:00").tz_localize("Asia/Shanghai"), end=pd.to_datetime("2016-09-21 00:00:00").tz_localize("Asia/Shanghai"), data_frequency="daily", emission_rate="daily", trading_calendar=cal) algor_obj = TradingAlgorithm(initialize=initialize, handle_data=handle_data, sim_params=sim_params,
def __init__(self, data_frequency, cancel_policy=None): self.data_frequency = data_frequency self.cancel_policy = cancel_policy if cancel_policy else NeverCancel() self.current_dt = None
def test_never_cancel(test_input): cancel_policy = NeverCancel() assert not cancel_policy.should_cancel(test_input)
def __init__(self, sim_params, cancel_policy=None): self.cancel_policy = cancel_policy if cancel_policy else NeverCancel() self.current_dt = None self.sim_params = sim_params