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
class VGRemoveOption(QCAlgorithm):

    def Initialize(self):
        self.SetStartDate(2020, 4, 25)  # Set Start Date
        self.SetEndDate(2020, 4, 27)  # Set Start Date
        self.SetCash(100000)  # Set Strategy Cash
        self.spy = self.AddEquity("SPY", Resolution.Minute)
        self.spy.SetDataNormalizationMode(DataNormalizationMode.Raw)

    def OnData(self, slice):
        if self.Time.minute == 31 and self.Time.hour == 9:
            spyPrice = (slice["SPY"].Close)
            self.subscribeOption("SPY",spyPrice)
        if self.Time.minute < 40 and self.Time.hour == 9:
            for i in slice.OptionChains:
                oc = i.Value
                self.Debug(str([[x.Right,str(x.Strike),str(x.Expiry),str(x.BidPrice),str(x.AskPrice)] for x in oc]))    
        if self.Time.minute == 40 and self.Time.hour == 9:
            self.RemoveOptionContract(self.option)
    

    def subscribeOption(self,tk,spyPrice):
        contracts = self.OptionChainProvider.GetOptionContractList(tk, self.Time)
        expiries = sorted(list(set([d.ID.Date for d in contracts])))
        expry = expiries[min(range(len(expiries)), key= lambda i: abs(expiries[i] - (self.Time + timedelta(30))))]
        avl_stks = [d.ID.StrikePrice for d in contracts if (d.ID.Date == expry and d.ID.OptionRight == 0)]
        atm_stk = avl_stks[min(range(len(avl_stks)), key = lambda i: abs(avl_stks[i]-spyPrice))] 
        for i in contracts:
            if i.ID.StrikePrice == atm_stk  and i.ID.Date == expry and i.ID.OptionRight == 1:
                self.option = self.AddOptionContract(i, Resolution.Minute)