| Overall Statistics |
|
Total Trades 5 Average Win 0.74% Average Loss -0.87% Compounding Annual Return -24.701% Drawdown 1.600% Expectancy -0.073 Net Profit -0.607% Sharpe Ratio -3.797 Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.85 Alpha -0.641 Beta 26.858 Annual Standard Deviation 0.057 Annual Variance 0.003 Information Ratio -4.092 Tracking Error 0.057 Treynor Ratio -0.008 Total Fees $5.00 |
from datetime import timedelta
### OCA (One Order Cancels All) Example for Options
class bracketOrderOptionExample(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2016, 1, 1)
self.SetEndDate(2016, 1, 8)
self.SetCash(100000)
option = self.AddOption("GOOG",Resolution.Minute)
self.option_symbol = option.Symbol
# set our strike/expiry filter for this option chain
option.SetFilter(self.UniverseFunc)
self.entry_ticket = None
def OnData(self,slice):
if not self.Portfolio.Invested and self.entry_ticket is None:
for i in slice.OptionChains:
chain = i.Value
call = [i for i in chain if i.Right == OptionRight.Call]
contracts = sorted(sorted(call, key=lambda x: x.Expiry, reverse=True),
key=lambda x: abs(x.UnderlyingLastPrice - x.Strike))
atm_contract = contracts[0]
# Buy ATM Call Option Contract
if len(contracts) == 0: continue
symbol = contracts[0].Symbol
price = self.Securities[symbol].Price
# Place limit order below market price. Wait for rebound to buy
self.entry_ticket = self.LimitOrder(symbol, 1, price*(1-0.05))
def OnOrderEvent(self, orderEvent):
if orderEvent.Status != OrderStatus.Filled:
return
if self.entry_ticket is not None:
# When entry order is filled, place TP and SL orders
if orderEvent.OrderId == self.entry_ticket.OrderId:
price = orderEvent.FillPrice
self.LimitOrder(orderEvent.Symbol, -1, price*1.2)
self.StopMarketOrder(orderEvent.Symbol, -1, price*0.8)
# Otherwise, one of the exit orders was filled, so cancel the open orders
else:
self.Transactions.CancelOpenOrders(orderEvent.Symbol)
self.entry_ticket = None
def UniverseFunc(self, universe):
# include weekly contracts
return universe.Expiration(TimeSpan.FromDays(60),TimeSpan.FromDays(90)).Strikes(-2,2)