Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
class RetrospectiveRedOrangeHornet(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 1, 1) # Set Start Date self.SetEndDate(2019, 1, 2) # Set Start Date self.SetCash(100000) # Set Strategy Cash equity = self.AddEquity("SPY", Resolution.Minute) option = self.AddOption("SPY", Resolution.Minute) option.SetFilter(lambda universe: universe.IncludeWeeklys().Strikes(-12,12).Expiration(timedelta(0), timedelta(90))) option.PriceModel = OptionPriceModels.CrankNicolsonFD() self.symbol = option.Symbol #self.vix_symbol = self.AddIndex('VIX', Resolution.Minute).Symbol self.SetBenchmark("SPY") self.lastDay=None self.openPrice=None self.breakCode = False #self.openVix=None self.atr = self.ATR("SPY", 4, Resolution.Daily) self.spread=10 self.SetWarmup(timedelta(days=90), Resolution.Minute) #self.Consolidate("SPY", Resolution.Daily, self.OnDailyData) def OnData(self, slice): if self.breakCode == True: return for chain in slice.OptionChains.Values: for contract in chain: if contract.Greeks.Delta != 0: self.Debug(contract.Greeks.Delta) self.breakCode = True else: self.Debug("no contracts with delta") if self.Portfolio.Invested: self.SetHoldings("SPY", 0) day = self.Time.weekday() if( day != 0 and day != 2 and day != 4): return if self.lastDay == self.Time.day : return if self.openPrice == None and slice.ContainsKey("SPY"): try: self.openPrice = slice.Bars["SPY"].Close except Exception: self.openPrice = None #if self.openVix == None and slice.ContainsKey("VIX"): # try: # self.openVix = slice.Bars["VIX"].Close # except Exception: # self.openVix = None if(self.Time.hour >= 10 and self.openPrice != None): # and self.openVix != None if(not (slice.ContainsKey("SPY"))): #slice.ContainsKey("VIX") and return tenPrice = slice.Bars["SPY"].Close self.lastDay = self.Time.day diff = tenPrice - self.openPrice #tenVix = slice.Bars["VIX"].Close #vixdiff = tenVix - self.openVix if(diff > 0):# and vixdiff<0 #bullish sellStrikePrice = tenPrice #+ 3 * self.atr.Current.Value self.TradeOption(slice,sellStrikePrice, self.Time, 0, OptionRight.Put) buyStrikePrice = sellStrikePrice - self.spread self.TradeOption(slice,buyStrikePrice, self.Time, 1, OptionRight.Put) elif (diff < 0):# and vixdiff>0 #bearish sellStrikePrice = tenPrice #+ 3 * self.atr.Current.Value self.TradeOption(slice,sellStrikePrice, self.Time, 0, OptionRight.Call) buyStrikePrice = sellStrikePrice + self.spread self.TradeOption(slice,buyStrikePrice, self.Time, 1, OptionRight.Call) self.openPrice=None #self.openVix=None def TradeOption(self,slice,strike, exp, isBuy, isPut): if slice.OptionChains.Count == 0: return for i in slice.OptionChains: if i.Key != self.symbol: continue chain = i.Value call = [x for x in chain if x.Right == isPut] contracts = sorted(sorted(call, key = lambda x: abs(x.Strike - strike)), key = lambda x: abs(x.Expiry - exp)) if len(contracts) == 0: return contract = contracts[0] if isBuy: self.Buy(contract.Symbol, 1) else: self.Sell(contract.Symbol, 1)