| Overall Statistics |
|
Total Orders 4 Average Win 3.70% Average Loss -4.76% Compounding Annual Return -20.672% Drawdown 1.200% Expectancy -0.112 Start Equity 5000 End Equity 4938 Net Profit -1.240% Sharpe Ratio -8.575 Sortino Ratio -7.686 Probabilistic Sharpe Ratio 0.025% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.78 Alpha -0.134 Beta 0.116 Annual Standard Deviation 0.022 Annual Variance 0 Information Ratio 2.971 Tracking Error 0.094 Treynor Ratio -1.616 Total Fees $0.00 Estimated Strategy Capacity $530000.00 Lowest Capacity Asset TQQQ 32BINNWRRXQKM|TQQQ UK280CGTCB51 Portfolio Turnover 1.04% |
from AlgorithmImports import *
class TQQQOptionBullPutSpreadAlgorithm(QCAlgorithm):
def initialize(self):
self.set_start_date(2023, 9, 13)
self.set_end_date(2023, 10, 2)
self.set_cash(5000)
tqqq = self.add_equity("TQQQ", Resolution.MINUTE).symbol
option = self.add_option(tqqq, "TQQQ", Resolution.MINUTE)
option.set_filter(lambda x: x.IncludeWeeklys()
.Strikes(-100, 0).PutsOnly()
.Expiration(20, 30))
self.option_symbol = option.symbol
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:
chain = self.current_slice.option_chains.get(self.option_symbol)
if chain:
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]
bull_call_spread = OptionStrategies.bull_put_spread(self.option_symbol, shortPut.strike, longPut.strike, longPut.expiry)
self.buy(bull_call_spread, 1)