ENH: A TradingAlgorithm method called before each trading day

This commit is contained in:
Richard Frank
2014-09-03 18:07:51 -04:00
parent 1b2d79988f
commit 3784ed4ba9
3 changed files with 97 additions and 21 deletions
+14 -3
View File
@@ -178,25 +178,30 @@ class TradingAlgorithm(object):
self.algoscript = kwargs.pop('script', None)
self._initialize = None
self._before_trading_start = None
self._analyze = None
if self.algoscript is not None:
exec_(self.algoscript, self.namespace)
self._initialize = self.namespace.get('initialize', None)
self._initialize = self.namespace.get('initialize')
if 'handle_data' not in self.namespace:
raise ValueError('You must define a handle_data function.')
else:
self._handle_data = self.namespace['handle_data']
self._before_trading_start = \
self.namespace.get('before_trading_start')
# Optional analyze function, gets called after run
self._analyze = self.namespace.get('analyze', None)
self._analyze = self.namespace.get('analyze')
elif kwargs.get('initialize', False) and kwargs.get('handle_data'):
elif kwargs.get('initialize') and kwargs.get('handle_data'):
if self.algoscript is not None:
raise ValueError('You can not set script and \
initialize/handle_data.')
self._initialize = kwargs.pop('initialize')
self._handle_data = kwargs.pop('handle_data')
self._before_trading_start = kwargs.pop('before_trading_start',
None)
# If method not defined, NOOP
if self._initialize is None:
@@ -223,6 +228,12 @@ class TradingAlgorithm(object):
with ZiplineAPI(self):
self._initialize(self)
def before_trading_start(self):
if self._before_trading_start is None:
return
self._before_trading_start(self)
def handle_data(self, data):
if self.history_container:
self.history_container.update(data, self.datetime)