For those of you who may want to trade at the open, or a fraction of the open to close range:
Usage:
set_slippage(TradeAtTheOpenSlippageModel(.1))
########################################################
# Slippage model to trade at the open or at a fraction of the open - close range.
class TradeAtTheOpenSlippageModel(slippage.SlippageModel):
'''Class for slippage model to allow trading at the open
or at a fraction of the open to close range.
'''
# Constructor, self and fraction of the open to close range to add (subtract)
# from the open to model executions more optimistically
def __init__(self, fractionOfOpenCloseRange):
# Store the percent of open - close range to take as the execution price
self.fractionOfOpenCloseRange = fractionOfOpenCloseRange
def process_order(self, trade_bar, order):
openPrice = trade_bar.open_price
closePrice = trade_bar.price
ocRange = closePrice - openPrice
ocRange = ocRange * self.fractionOfOpenCloseRange
if (ocRange != 0.0):
targetExecutionPrice = openPrice + ocRange
else:
targetExecutionPrice = openPrice
log.info('\nOrder:{0} open:{1} close:{2} exec:{3} side:{4}'.format(
trade_bar.sid.symbol, openPrice, closePrice, targetExecutionPrice, order.direction))
# Create the transaction using the new price we've calculated.
return slippage.create_transaction(
trade_bar,
order,
targetExecutionPrice,
order.amount
)
Example trades:
Order:BND open: 76.30 close: 76.35 exec: 76.305 side: 1.0
Order:BND open: 76.27 close: 76.10 exec: 76.253 side: 1.0
Order:BND open: 77.95 close: 77.97 exec: 77.952 side: 1.0
Order:SPY open:137.24 close:136.99 exec:137.215 side: 1.0
Order:BND open: 77.34 close: 77.63 exec: 77.369 side:-1.0
Order:SPY open:132.23 close:132.92 exec:132.299 side: 1.0
Order:SPY open:131.29 close:131.94 exec:131.355 side:-1.0
Order:BND open: 78.38 close: 77.85 exec: 78.327 side: 1.0
Order:BND open: 77.16 close: 76.90 exec: 77.134 side:-1.0
Order:BND open: 77.52 close: 77.35 exec: 77.503 side: 1.0
Order:SPY open:139.40 close:139.07 exec:139.367 side: 1.0
Order:BND open: 77.17 close: 77.10 exec: 77.163 side:-1.0
Order:SPY open:142.33 close:141.34 exec:142.231 side: 1.0
Order:SPY open:128.28 close:127.80 exec:128.232 side:-1.0