About US Index Options

The US Index Options dataset by AlgoSeek covers European Option contracts for 3 US Indexes: SPX, VIX, and NDX. The dataset starts from June 2010 and is delivered on minute resolution. This dataset is created by monitoring Options Price Reporting Authority (OPRA) data feed, which consolidates last sale and quotation information originating from the national securities exchanges that have been approved by the Securities and Exchange Commission.


About AlgoSeek

AlgoSeek is a leading historical intraday US market data provider offering the most comprehensive and detailed market data and analytics products in the financial industry covering Equities, Futures, Options, cash FOREX, and Cryptocurrencies. AlgoSeek data is built for quantitative trading and machine learning. For more information about AlgoSeek, visit algoseek.com.


About QuantConnect

QuantConnect was founded in 2012 to serve quants everywhere with the best possible algorithmic trading technology. Seeking to disrupt a notoriously closed-source industry, QuantConnect takes a radically open-source approach to algorithmic trading. Through the QuantConnect web platform, more than 50,000 quants are served every month.


Algorithm Example

class IndexOptionsDataAlgorithm(QCAlgorithm):
    def Initialize(self) -> None:
        self.SetStartDate(2020, 1, 1)
        self.SetEndDate(2021, 1, 1)
        self.SetCash(200000)

        index = self.AddIndex("VIX")
        option = self.AddOption(index.Symbol)
        option.SetFilter(-2, +2, 0, 180)
        self.optionSymbol = option.Symbol

    def OnData(self, slice: Slice) -> None:
        if not self.Portfolio.Invested and self.IsMarketOpen(self.optionSymbol):
            chain = slice.OptionChains.get(self.optionSymbol)
            if not chain:
                return
            
            callContracts = [c for c in chain if c.Right == OptionRight.Call]
            if callContracts:
                    
                expiry = max([c.Expiry for c in callContracts])
                callContracts = sorted([c for c in callContracts if c.Expiry == expiry],
                    key=lambda c: c.Strike)
                        
                if len(callContracts) < 2:
                    return
                
                longCall, shortCall = callContracts[0:2]
                
                # Use all the buying power
                quantity = min([
                    abs(self.CalculateOrderQuantity(shortCall.Symbol, -1)),
                    abs(self.CalculateOrderQuantity(longCall.Symbol, 1))])
                
                self.MarketOrder(shortCall.Symbol, -quantity)
                self.MarketOrder(longCall.Symbol, quantity)
                
                expectedMarginUsage = max((longCall.Strike - shortCall.Strike) * self.Securities[longCall.Symbol].SymbolProperties.ContractMultiplier * quantity, 0)
                if expectedMarginUsage != self.Portfolio.TotalMarginUsed:
                    raise Exception("Unexpect margin used!")


    def OnSecuritiesChanged(self, changes: SecurityChanges) -> None:
        for security in changes.AddedSecurities:
            if security.Type == SecurityType.IndexOption:
                # Historical data
                history = self.History(security.Symbol, 10, Resolution.Minute)
                self.Debug(f"We got {len(history)} from our history request for {security.Symbol}")

Example Applications

The US Index Options dataset enables you to accurately design strategies for Index Options. Examples include the following strategies: