diff --git a/catalyst/algorithm.py b/catalyst/algorithm.py index ed10fedd..93ea60bb 100644 --- a/catalyst/algorithm.py +++ b/catalyst/algorithm.py @@ -1135,7 +1135,7 @@ class TradingAlgorithm(object): 'date_rule. You should use keyword argument ' 'time_rule= when calling schedule_function without ' 'specifying a date_rule', stacklevel=3) - + freq = self.sim_params.data_frequency date_rule = date_rule or date_rules.every_day() diff --git a/catalyst/exchange/exchange_algorithm.py b/catalyst/exchange/exchange_algorithm.py index 2d902572..bddbf2f0 100644 --- a/catalyst/exchange/exchange_algorithm.py +++ b/catalyst/exchange/exchange_algorithm.py @@ -29,6 +29,7 @@ from catalyst.algorithm import TradingAlgorithm from catalyst.data.minute_bars import BcolzMinuteBarWriter, \ BcolzMinuteBarReader from catalyst.errors import OrderInBeforeTradingStart +from catalyst.exchange.exchange_blotter import ExchangeBlotter from catalyst.exchange.exchange_errors import ( ExchangeRequestError, ExchangePortfolioDataError, @@ -190,6 +191,11 @@ class ExchangeTradingAlgorithmBacktest(ExchangeTradingAlgorithmBase): def __init__(self, *args, **kwargs): super(ExchangeTradingAlgorithmBacktest, self).__init__(*args, **kwargs) + self.blotter = ExchangeBlotter( + data_frequency=self.data_frequency, + # Default to NeverCancel in catalyst + cancel_policy=self.cancel_policy, + ) log.info('initialized trading algorithm in backtest mode') diff --git a/catalyst/exchange/exchange_blotter.py b/catalyst/exchange/exchange_blotter.py new file mode 100644 index 00000000..dd771cca --- /dev/null +++ b/catalyst/exchange/exchange_blotter.py @@ -0,0 +1,19 @@ +from catalyst.finance.blotter import Blotter +from catalyst.finance.commission import PerShare +from catalyst.finance.slippage import VolumeShareSlippage +from catalyst.assets._assets import TradingPair + + +class ExchangeBlotter(Blotter): + def __init__(self, *args, **kwargs): + super(ExchangeBlotter, self).__init__(*args, **kwargs) + + # Using the equity models for now + # We may be able to define more sophisticated models based on the fee + # structure of each exchange. + self.slippage_models = { + TradingPair: VolumeShareSlippage() + } + self.commission_models = { + TradingPair: PerShare() + }