Overall Statistics
Total Trades
4
Average Win
0%
Average Loss
-0.74%
Compounding Annual Return
8.147%
Drawdown
2.100%
Expectancy
-1
Net Profit
4.000%
Sharpe Ratio
1.639
Probabilistic Sharpe Ratio
65.857%
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.039
Beta
0.361
Annual Standard Deviation
0.049
Annual Variance
0.002
Information Ratio
-2.992
Tracking Error
0.084
Treynor Ratio
0.221
Total Fees
$2.00
Estimated Strategy Capacity
$150000000.00
Lowest Capacity Asset
SPY R735QTJ8XC9X
from QuantConnect.Securities.Option import OptionPriceModels

class CasualYellowCobra(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 12, 16)
        self.SetCash(100000) 
        
        self.SetSecurityInitializer(lambda x: x.SetDataNormalizationMode(DataNormalizationMode.Raw))
        self.AddEquity("SPY", Resolution.Minute)
        
        self.SetWarmUp(TimeSpan.FromDays(7))
        
        self.tickers = []

    def OnData(self, slice):
        
        if self.Portfolio.Invested: return
    
        otm_puts = []; otm_calls = []
    
        for chain in slice.OptionChains.Values:
            otm_puts = [x for x in chain if chain.Underlying.Price - x.Strike < 0 and x.Right == 1 and x.Greeks.Delta <= -0.05]
            otm_calls = [x for x in chain if chain.Underlying.Price - x.Strike > 0 and x.Right == 0 and x.Greeks.Delta >= 0.05]
    
        for ticker in otm_puts + otm_calls:
            self.MarketOrder(ticker.Symbol, 1)
                
    def OnSecuritiesChanged(self, changes):
        
        for change in changes.AddedSecurities:
            option = self.AddOption(change.Symbol.Value.split(' ')[0])
            option.PriceModel = OptionPriceModels.CrankNicolsonFD()