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
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
from clr import AddReference
AddReference("System")
AddReference("QuantConnect.Algorithm")
AddReference("QuantConnect.Common")

from System import *
from QuantConnect import *
from QuantConnect.Algorithm import *
from QuantConnect.Securities.Option import OptionPriceModels
from datetime import timedelta, datetime

from collections import deque

class BasicTemplateOptionsAlgorithm(QCAlgorithm):

    def Initialize(self):
        
        self.SetStartDate(2018, 7, 20)
        self.SetEndDate(2018, 7, 27)
        self.SetCash(100000)
                        
        self.symbols = ["SPY"]
                        
        self.option_symbols = []

        # register equities and corresponding options
        for symbol in self.symbols:
            
            option = self.AddOption(symbol, Resolution.Minute)
            option.SetFilter(-10, +10, timedelta(30), timedelta(60)) # preselect strikes and expiry timeframes
            option.PriceModel = OptionPriceModels.BinomialJoshi() # needed for implied volatility
            
            self.option_symbols.append(option.Symbol)
        
        self.SetWarmUp(TimeSpan.FromDays(50))
            

    def DailyEvent(self, slice):
        
        self.Log("called during warmup")
        
        for i in slice.OptionChains:
            
            self.Log("not called during warmup")
        
            if i.Key not in self.option_symbols: continue
    
            chain = i.Value
            
            # select closest expiry date
            expiry = sorted(chain, key = lambda x: x.Expiry)[0].Expiry
            
            # select all calls and puts of this expiry date
            calls = [x for x in chain if x.Right == 0 and x.Expiry == expiry]
            puts  = [x for x in chain if x.Right == 1 and x.Expiry == expiry]
            

    def OnData(self, slice):
        
        if self.Time.hour == 16:
            self.DailyEvent(slice)