ENH: Preliminary support for Futures slippage and commission models

This commit is contained in:
dmichalowicz
2017-04-10 14:37:20 -04:00
parent 4b861fbf5e
commit f6e1a95ca9
7 changed files with 105 additions and 37 deletions
+14 -15
View File
@@ -67,7 +67,7 @@ from zipline.errors import (
)
from zipline.finance.trading import TradingEnvironment
from zipline.finance.blotter import Blotter
from zipline.finance.commission import PerShare, CommissionModel
from zipline.finance.commission import CommissionModel
from zipline.finance.controls import (
LongOnly,
MaxOrderCount,
@@ -84,17 +84,14 @@ from zipline.finance.execution import (
)
from zipline.finance.performance import PerformanceTracker
from zipline.finance.asset_restrictions import Restrictions
from zipline.finance.slippage import (
VolumeShareSlippage,
SlippageModel
)
from zipline.finance.slippage import SlippageModel
from zipline.finance.cancel_policy import NeverCancel, CancelPolicy
from zipline.finance.asset_restrictions import (
NoRestrictions,
StaticRestrictions,
SecurityListRestrictions,
)
from zipline.assets import Asset, Future
from zipline.assets import Asset, Equity, Future
from zipline.gens.tradesimulation import AlgorithmSimulator
from zipline.pipeline import Pipeline
from zipline.pipeline.engine import (
@@ -324,10 +321,8 @@ class TradingAlgorithm(object):
self.blotter = Blotter(
data_frequency=self.data_frequency,
asset_finder=self.asset_finder,
slippage_func=VolumeShareSlippage(),
commission=PerShare(),
# Default to NeverCancel in zipline
cancel_policy=self.cancel_policy
cancel_policy=self.cancel_policy,
)
# The symbol lookup date specifies the date to use when resolving
@@ -493,16 +488,16 @@ class TradingAlgorithm(object):
capital_base={capital_base}
sim_params={sim_params},
initialized={initialized},
slippage={slippage},
commission={commission},
slippage_models={slippage_models},
commission_models={commission_models},
blotter={blotter},
recorded_vars={recorded_vars})
""".strip().format(class_name=self.__class__.__name__,
capital_base=self.sim_params.capital_base,
sim_params=repr(self.sim_params),
initialized=self.initialized,
slippage=repr(self.blotter.slippage_func),
commission=repr(self.blotter.commission),
slippage_models=repr(self.blotter.slippage_models),
commission_models=repr(self.blotter.commission_models),
blotter=repr(self.blotter),
recorded_vars=repr(self.recorded_vars))
@@ -1662,7 +1657,9 @@ class TradingAlgorithm(object):
raise UnsupportedSlippageModel()
if self.initialized:
raise SetSlippagePostInit()
self.blotter.slippage_func = slippage
# TODO: Create separate API methods for setting Equity and Future
# slippage models.
self.blotter.slippage_models[Equity] = slippage
@api_method
def set_commission(self, commission):
@@ -1685,7 +1682,9 @@ class TradingAlgorithm(object):
if self.initialized:
raise SetCommissionPostInit()
self.blotter.commission = commission
# TODO: Create separate API methods for setting Equity and Future
# commission models.
self.blotter.commission_models[Equity] = commission
@api_method
def set_cancel_policy(self, cancel_policy):