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)