Overall Statistics
Total Orders
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Start Equity
100000
End Equity
100000
Net Profit
0%
Sharpe Ratio
0
Sortino 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
Portfolio Turnover
0%
from AlgorithmImports import *

class ListQQQODTEOptions(QCAlgorithm):
    def Initialize(self):
        # Set the backtest time period and initial cash
        self.SetStartDate(2024, 11, 21)
        self.SetEndDate(2024, 11, 21)  # Single day backtest
        self.SetCash(100000)

        # Add QQQ ETF
        self.qqq = self.AddEquity("QQQ", Resolution.Minute)

        # Add QQQ options
        qqq_options = self.AddOption("QQQ", Resolution.Minute)
        qqq_options.SetFilter(lambda u: u.Strikes(-999, 999))  # Include all strikes
        self.qqq_options_symbol = qqq_options.Symbol

        # Schedule to log options expiring today at 3:00 PM
        self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.At(15, 0), self.ListODTEOptions)

    def ListODTEOptions(self):
        """Logs QQQ ODTE options available at 3:00 PM."""
        # Fetch the current QQQ price
        qqq_price = self.qqq.Price
        if qqq_price == 0:
            self.Debug("QQQ price is unavailable.")
            return

        # Fetch the option chain
        chain = self.CurrentSlice.OptionChains.GetValue(self.qqq_options_symbol)
        if chain is None or not list(chain):  # Convert chain to list to check if it's empty
            self.Debug("No options chain available.")
            return

        # Filter options expiring today (ODTE)
        today = self.Time.date()
        odte_options = [option for option in chain if (option.Expiry.date() - today).days == 0]

        if not odte_options:
            self.Debug(f"No ODTE options available on {today}.")
            return

        # Log all ODTE options
        self.Debug(f"QQQ ODTE Options at 3:00 PM on {today}:")
        for option in odte_options:
            self.Debug(f"Strike: {option.Strike}, Type: {option.Right}, Expiry: {option.Expiry}, "
                       f"Price: {option.LastPrice}, Bid: {option.BidPrice}, Ask: {option.AskPrice}")

    def OnData(self, slice):
        # OnData is required but not used for this specific task
        pass