From 5a58ade0fc3c15de6410c930dac4f87a5520c986 Mon Sep 17 00:00:00 2001 From: Thomas Wiecki Date: Fri, 28 Jun 2013 07:24:54 -0400 Subject: [PATCH] ENH: Add flag fill_delay kwarg to TradingAlgorithm. --- zipline/algorithm.py | 9 +++++++-- zipline/finance/constants.py | 5 +++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/zipline/algorithm.py b/zipline/algorithm.py index 4a89df59..270985b1 100644 --- a/zipline/algorithm.py +++ b/zipline/algorithm.py @@ -40,7 +40,7 @@ from zipline.finance.slippage import ( ) from zipline.finance.commission import PerShare, PerTrade from zipline.finance.blotter import Blotter -from zipline.finance.constants import ANNUALIZER +from zipline.finance.constants import ANNUALIZER, FILL_DELAYS import zipline.finance.trading as trading import zipline.protocol from zipline.protocol import Event @@ -87,6 +87,8 @@ class TradingAlgorithm(object): annualizer : int Which constant to use for annualizing risk metrics. If not provided, will extract from data_frequency. + fill_delay : datetime.timedelta + Delay between placing an order and filling an order. capital_base : float How much capital to start with. """ @@ -115,6 +117,8 @@ class TradingAlgorithm(object): # Override annualizer if set if 'annualizer' in kwargs: self.annualizer = kwargs['annualizer'] + if 'fill_delay' in kwargs: + self.fill_delay = kwargs['fill_delay'] # set the capital base self.capital_base = kwargs.pop('capital_base', DEFAULT_CAPITAL_BASE) @@ -125,7 +129,7 @@ class TradingAlgorithm(object): self.blotter = kwargs.pop('blotter', None) if not self.blotter: - self.blotter = Blotter() + self.blotter = Blotter(fill_delay=self.fill_delay) # an algorithm subclass needs to set initialized to True when # it is fully initialized. @@ -431,3 +435,4 @@ class TradingAlgorithm(object): assert data_frequency in ('daily', 'minute') self.data_frequency = data_frequency self.annualizer = ANNUALIZER[self.data_frequency] + self.fill_delay = FILL_DELAYS[self.data_frequency] diff --git a/zipline/finance/constants.py b/zipline/finance/constants.py index ce7ec8f6..e58e8229 100644 --- a/zipline/finance/constants.py +++ b/zipline/finance/constants.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +from datetime import timedelta + TRADING_DAYS_IN_YEAR = 250 TRADING_HOURS_IN_DAY = 6 MINUTES_IN_HOUR = 60 @@ -21,3 +23,6 @@ ANNUALIZER = {'daily': TRADING_DAYS_IN_YEAR, 'hourly': TRADING_DAYS_IN_YEAR * TRADING_HOURS_IN_DAY, 'minute': TRADING_DAYS_IN_YEAR * TRADING_HOURS_IN_DAY * MINUTES_IN_HOUR} + +FILL_DELAYS = {'daily': timedelta(days=1), + 'minute': timedelta(minutes=1)}