Overall Statistics
import numpy as np
from datetime import timedelta

class HorizontalOptimizedShield(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2019, 1, 1)
        self.SetCash(100000)
    
        self.equity = self.AddEquity("MSFT", Resolution.Minute)
        self.Securities["MSFT"].SetDataNormalizationMode(DataNormalizationMode.Raw)

    def OnData(self, data):
        if self.Portfolio.Invested: 
            return
        
        if not data.ContainsKey(self.equity.Symbol):
            return
        
        contracts = self.OptionChainProvider.GetOptionContractList(self.equity.Symbol, data.Time)
        self.underlyingPrice = self.Securities[self.equity.Symbol].Price
        under = self.underlyingPrice - 0.1 * self.underlyingPrice
        
        otm_puts = [i for i in contracts if i.ID.OptionRight == OptionRight.Put and 
                                            i.ID.StrikePrice <= under and 
                                            10 < (i.ID.Date - data.Time).days < 30]
                                            
        if len(otm_puts) == 0:
            return
        
        contract = sorted(sorted(otm_puts, key = lambda x: x.ID.Date), 
                                            key = lambda x: x.ID.StrikePrice)[0]
    
        
        self.AddOptionContract(contract, Resolution.Minute)

        self.MarketOrder(contract, -10)