Overall Statistics
Total Trades
1
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
$1.00
Estimated Strategy Capacity
$2300000000.00
Lowest Capacity Asset
SPY R735QTJ8XC9X
import datetime
import math

from QuantConnect.Securities.Option import OptionPriceModels

from datetime import timedelta
from QuantConnect.Data.UniverseSelection import * 

SYMBOL = "SPY"

# BACKTEST SCENARIOS:
#####################
# SPY sharp decrease during 20 Feb - 20 Mar due to covid:
# STARTING_CASH = 32400; START = (2020, 1, 1); END = (2021, 1, 1)
# 5.5 Years:
# STARTING_CASH = 20700; START = (2015, 1, 1); END = (2021, 6, 1)
# Debug 1 day:
STARTING_CASH = 20700; START = (2015, 1, 1); END = (2015, 1, 3)
# Debug 1 month:
# STARTING_CASH = 50000; START = (2016, 1, 1); END = (2016, 2, 27)
# SPY price trends downwards:
# STARTING_CASH = 50000; START = (2020, 2, 20); END = (2020, 3, 20)
# SPY price trends upwards:
# STARTING_CASH = 50000; START = (2020, 2, 20); END = (2020, 3, 20)

class BlahBlahAlgorithm(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(*START); self.SetEndDate(*END); self.SetCash(STARTING_CASH)
        equity = self.AddEquity(SYMBOL, Resolution.Minute)
        option = self.AddOption(SYMBOL, Resolution.Minute)
        self.symbol = option.Symbol
        self.UniverseSettings.Resolution = Resolution.Daily
        option.SetFilter(lambda universe: universe.WeeklysOnly().Strikes(0, +30).Expiration(timedelta(1), timedelta(30)))
        self.SetBenchmark(SYMBOL)
 
    def OnData(self,slice):
        close = slice[SYMBOL].Close
        price = slice[SYMBOL].Price
        self.Debug(f'{self.Time} bid_open ask_low {close} {price}')
        
        if not self.Portfolio[SYMBOL].Invested:
            self.MarketOrder(SYMBOL, 1)     # long 1 underlying.
    
    def OnOrderEvent(self, orderEvent):
        self.Log(str(orderEvent))
from Selection.OptionUniverseSelectionModel import OptionUniverseSelectionModel
from datetime import date, timedelta

class OptionsUniverseSelectionModel(OptionUniverseSelectionModel):
    def __init__(self, select_option_chain_symbols):
        super().__init__(timedelta(1), select_option_chain_symbols)

    def Filter(self, filter):
        ## Define options filter -- strikes +/- 3 and expiry between 0 and 180 days away
        return (filter.Strikes(-2, +2)
                      .Expiration(timedelta(0), timedelta(180)))