About US Index Options

The US Index Options dataset by AlgoSeek covers European Option contracts for 3 US Indices: SPX, VIX, and NDX. The dataset starts from January 2012 and is delivered on minute resolution. This dataset is created by monitoring the 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

from AlgorithmImports import *
from QuantConnect.DataSource import *

class IndexOptionsDataAlgorithm(QCAlgorithm):
    def initialize(self) -> None:
        self.set_start_date(2020, 1, 1)
        self.set_end_date(2021, 1, 1)
        self.set_cash(200000)
        self.universe_settings.asynchronous = True
        index = self.add_index("VIX")
        option = self.add_option(index.symbol)
        option.set_filter(-2, +2, 0, 180)
        self.option_symbol = option.symbol

    def on_data(self, slice: Slice) -> None:
        if not self.portfolio.invested and self.is_market_open(self.option_symbol):
            chain = slice.option_chains.get(self.option_symbol)
            if not chain:
                return
            
            call_contracts = [c for c in chain if c.right == OptionRight.CALL]
            if call_contracts:
                    
                expiry = max([c.expiry for c in call_contracts])
                call_contracts = sorted([c for c in call_contracts if c.expiry == expiry],
                    key=lambda c: c.strike)
                        
                if len(call_contracts) < 2:
                    return
                
                longCall, shortCall = call_contracts[0:2]
                
                # Use all the buying power
                quantity = min([
                    abs(self.calculate_order_quantity(shortCall.symbol, -1)),
                    abs(self.calculate_order_quantity(longCall.symbol, 1))])
                
                self.market_order(shortCall.symbol, -quantity)
                self.market_order(longCall.symbol, quantity)
                
                expected_margin_usage = max((longCall.strike - shortCall.strike) * self.securities[longCall.symbol].symbol_properties.contract_multiplier * quantity, 0)
                if expected_margin_usage != self.portfolio.total_margin_used:
                    raise Exception("Unexpect margin used!")


    def on_securities_changed(self, changes: SecurityChanges) -> None:
        for security in changes.added_securities:
            if security.type == SecurityType.INDEX_OPTION:
                # 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: