Overall Statistics
Total Trades
0
Average Win
0%
Average Loss
0%
Compounding Annual Return
0%
Drawdown
0%
Expectancy
0
Net Profit
0%
Sharpe 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
# region imports
from AlgorithmImports import *
# endregion

class GeekyRedOrangeArmadillo(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2021, 3, 15)  # Set Start Date
        self.SetCash(100000)  # Set Strategy Cash
        self.equity_symbol = self.AddEquity("SPY", Resolution.Minute, dataNormalizationMode = DataNormalizationMode.Raw).Symbol
        option = self.AddOption(self.equity_symbol)
        option.SetFilter(self.contract_selector)
        self.option_symbol = option.Symbol

    def contract_selector(self, option_filter_universe: OptionFilterUniverse) -> OptionFilterUniverse:
        strikes = sorted(set([symbol.ID.StrikePrice for symbol in option_filter_universe]))
        strike_distance = strikes[1] - strikes[0]
        self.Debug(f"Strike distance: {strike_distance}")

        self.Debug(f"Unfiltered contract count: {len([symbol for symbol in option_filter_universe])}")

        threshold = 0.1
        underlying_price = option_filter_universe.Underlying.Price
        symbols = []
        for symbol in option_filter_universe:
            if underlying_price * (1-threshold) < symbol.ID.StrikePrice < underlying_price * (1+threshold):
                symbols.append(symbol)

        self.Debug(f"Filtered contract count: {len(symbols)}")

        return option_filter_universe.Contracts(symbols)

    def OnData(self, data: Slice):
        self.Quit()