Overall Statistics |
Total Orders 4 Average Win 0.18% Average Loss -0.25% Compounding Annual Return -0.787% Drawdown 0.100% Expectancy -0.125 Start Equity 100000 End Equity 99938 Net Profit -0.062% Sharpe Ratio -65.394 Sortino Ratio -49.276 Probabilistic Sharpe Ratio 0.015% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.75 Alpha -0.059 Beta 0.004 Annual Standard Deviation 0.001 Annual Variance 0 Information Ratio 1.38 Tracking Error 0.11 Treynor Ratio -14.842 Total Fees $0.00 Estimated Strategy Capacity $520000.00 Lowest Capacity Asset TQQQ 32BINNWRRXQKM|TQQQ UK280CGTCB51 Portfolio Turnover 0.04% |
from AlgorithmImports import * class TQQQOptionBullPutSpreadAlgorithm(QCAlgorithm): def initialize(self): self.set_start_date(2023, 9, 13) self.set_end_date(2023, 10, 11) self.set_cash(100000) self.ticker = "TQQQ" tqqq = self.add_equity(self.ticker, Resolution.MINUTE).symbol option = self.add_option(tqqq, self.ticker, Resolution.MINUTE) option.set_filter(lambda x: x.IncludeWeeklys() .Strikes(-100, 0).PutsOnly() .Expiration(20, 30)) self.option_symbol = option.symbol self.tickets = [] self.Schedule.On(self.DateRules.On(2023, 9, 13), self.TimeRules.At(9, 35), self.OpenSpread) self.Schedule.On(self.DateRules.On(2023, 10, 2), self.TimeRules.At(9, 33), self.Liquidate) self.SetSecurityInitializer(CompositeSecurityInitializer(self.SecurityInitializer, FuncSecurityInitializer(self.CustomSecurityInitializer))) def CustomSecurityInitializer(self, security): security.SetMarketPrice(self.GetLastKnownPrice(security)) security.SetOptionAssignmentModel(NullOptionAssignmentModel()) security.SetFeeModel(ConstantFeeModel(0)) def OpenSpread(self) -> None: if not any([self.portfolio[x.symbol].invested for x in self.tickets]): chain = self.current_slice.option_chains.get(self.option_symbol) if chain: try: shortPut = [i for i in chain if "231006P00039500" in i.Symbol.Value ][0] longPut = [i for i in chain if "231006P00039000" in i.Symbol.Value ][0] # if len(puts) < 2: return # Buy the bull put spread bull_call_spread = OptionStrategies.bull_put_spread(self.option_symbol, shortPut.strike, longPut.strike, longPut.expiry) self.tickets = self.buy(bull_call_spread, 1) except: pass