Overall Statistics |
Total Trades 86 Average Win 0.65% Average Loss -0.57% Compounding Annual Return -36.983% Drawdown 9.000% Expectancy -0.134 Net Profit -3.810% Sharpe Ratio -1.848 Probabilistic Sharpe Ratio 18.099% Loss Rate 60% Win Rate 40% Profit-Loss Ratio 1.14 Alpha 0.393 Beta -1.954 Annual Standard Deviation 0.19 Annual Variance 0.036 Information Ratio -3.054 Tracking Error 0.24 Treynor Ratio 0.18 Total Fees $192.50 Estimated Strategy Capacity $8000.00 Lowest Capacity Asset IBM 30OQNYYJCY7OM|IBM R735QTJ8XC9X |
from datetime import timedelta class BasicTemplateOptionsAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2017, 11, 1) self.SetEndDate(2017, 12, 1) self.SetCash(100000) self.entryTime = self.UtcTime self.symbols = [] for ticker in ["IBM", "AAPL"]: option = self.AddOption(ticker) self.symbols.append(option.Symbol) option.SetFilter(1, 4, timedelta(2), timedelta(180)) symbol = self.AddEquity(ticker, Resolution.Minute).Symbol self.__change = self.ROCP(ticker, 1440, Resolution.Minute) #find % increase in last 24 hours def OnData(self,slice): option_invested = [x.Key for x in self.Portfolio if x.Value.Invested and x.Value.Type==SecurityType.Option] # check if we already have open options postiions if option_invested: # check if we have an open option position if (self.UtcTime - self.entryTime) >= timedelta(hours = 23.8): #Sell after set hours self.Liquidate(option_invested[0], "Sold") if self.Time.minute == 30 and self.Time.hour == 13: #check if time is 1030 for symbol in self.symbols: self.Log(str(self.__change) + str(symbol)) for kvp in slice.OptionChains: if kvp.Key == symbol: chain = kvp.Value # we sort the contracts to find at the money (ATM) contract with farthest expiration contracts = sorted(sorted(sorted(chain, key = lambda x: abs(chain.Underlying.Price - x.Strike)), key = lambda x: x.Expiry, reverse=False), key = lambda x: x.Right, reverse=True) # if found, trade it if len(contracts) == 0: continue symbol = contracts[0].Symbol self.SetHoldings(symbol, 0.02) self.entryTime = self.UtcTime #self.Log(str(self.__change) + str(symbol) + "second")