Overall Statistics |
Total Trades 4 Average Win 0% Average Loss -2.80% Compounding Annual Return 30.815% Drawdown 25.800% Expectancy -1 Net Profit 93.449% Sharpe Ratio 1.51 Probabilistic Sharpe Ratio 68.630% Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.09 Beta 0.826 Annual Standard Deviation 0.214 Annual Variance 0.046 Information Ratio 0.383 Tracking Error 0.106 Treynor Ratio 0.391 Total Fees $3.00 Estimated Strategy Capacity $45000000.00 Lowest Capacity Asset QQQ RIWIV7K5Z9LX |
class AlertSkyBlueCaterpillar(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 1, 1) #self.SetEndDate(2009, 1, 1) self.SetCash(10000) spy = self.AddEquity("SPY", Resolution.Minute) spy.SetDataNormalizationMode(DataNormalizationMode.Raw) self.spy = spy.Symbol self.symbol = self.AddOption("SPY", Resolution.Minute).Symbol # qqq = self.AddEquity("QQQ", Resolution.Minute) self.qqq = qqq.Symbol #Options Contracts self.contract40 = None def OnData(self, data): if not self.Portfolio[self.spy].Invested: self.SetHoldings(self.spy, 0.5) self.SetHoldings(self.qqq, .45) if self.contract40 is None: self.getContracts() return investedoptions = [x for x in self.Portfolio.Values if x.Type == SecurityType.Option and x.Invested] if len(investedoptions) == 0: #self.SetHoldings(self.contract10, .05) self.SetHoldings(self.contract40, .05) #OTM liquidation if self.Securities[self.spy].Price < self.contract40.ID.StrikePrice * 1.3: self.Liquidate(self.contract40) self.RemoveSecurity(self.contract40) def getContracts(self): #spyprice = self.CurrentSlice[self.spy].Close spyprice = self.Securities[self.spy].Price #Get the OTM options OTM40 = (spyprice*.6) - (spyprice*.6)%5 #Get symbol objects contain option chais for given symbnol contracts = self.OptionChainProvider.GetOptionContractList(self.spy, self.Time) #10 OTM 1 year exipiration date puts = [x for x in contracts if x.ID.OptionRight == OptionRight.Put] puts = sorted(sorted(puts, key = lambda x: x.ID.Date, reverse = True), key = lambda x: x.ID.StrikePrice) #Grabbing the specific strike price #puts = [x for x in puts if x.ID.StrikePrice == OTM40] #Filtering for optins that fit our date criteria #puts10 = [x for x in puts if x.ID.StrikePrice >= OTM10 and (x.ID.Date - self.Time).days > 365] puts40 = [x for x in puts if x.ID.StrikePrice == OTM40 and (x.ID.Date - self.Time).days > 365] if len(puts40) > 0: self.contract40 = puts40[0] self.AddOptionContract(self.contract40, Resolution.Minute)