QuantConnect
US Equity Option Universe
Introduction
The US Equity Option Universe dataset by QuantConnect lists the available US Equity Options contracts and the current Implied Volatility and Greeks. The data covers 4,000 Symbols, starts in January 2012, and is delivered on a daily update frequency. To create this dataset, we use our implementation of the forward tree pricing model, which accounts for the interest rate, dividend payments, and daily closing prices. The values in this dataset are the same values you can get from daily indicators with mirror Options.
This dataset depends on the US Equity Security Master dataset because the US Equity Security Master dataset contains information on splits, dividends, and symbol changes of the underlying security.
This dataset does not contain market data. For market data, see US Equity Options by AlgoSeek.
For more information about the US Equity Option Universe dataset, including CLI commands and pricing, see the dataset listing.
About the Provider
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.
Getting Started
The following snippet demonstrates how to request data from the US Equity Options Universe dataset:
option = self.add_option("GOOG") self.option_symbol = option.symbol option.set_filter(lambda universe: universe.delta(0.4, 0.6))
var option = AddOption("GOOG");
_optionSymbol = option.Symbol;
option.SetFilter(universe => universe.delta(0.4m, 0.6m));
Example Applications
The US Equity Options Universe dataset enables you to accurately design Option strategies. Examples include the following strategies:
- Buying put Options to hedge against downward price movement in positive Equity positions
- Exploiting arbitrage opportunities that arise when the price of Option contracts deviate from their theoretical value
For more example algorithms, see Examples.
Supported Assets
To view the supported assets in the US Equity Options Universe dataset, see the Data Explorer.
Requesting Data
To add US Equity Options Universe data to your algorithm, call the AddOptionadd_option method. Save a reference to the Equity Option Symbol so you can access the data later in your algorithm. To define which contracts should be in your universe, call the SetFilterset_filter method of the Option object.
The AddOptionadd_option method provides a daily stream of Option chain data. To get the most recent daily chain, call the OptionChainoption_chain method with the underlying Equity Symbol. The OptionChainoption_chain method returns data on all the tradable contracts, not just the contracts that pass your universe filter.
class USEquityOptionsDataAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2020, 6, 1)
self.set_end_date(2021, 6, 1)
self.set_cash(100000)
self.universe_settings.asynchronous = True
option = self.add_option("GOOG")
self.option_symbol = option.symbol
# Set our strike/expiry filter for this option chain
option.set_filter(self._option_filter)
# Get the entire Option chain for the current day.
chain = self.option_chain(option.symbol.underlying).data_frame
def _option_filter(self, universe: OptionFilterUniverse) -> OptionFilterUniverse:
# Contracts can be filtered by greeks, implied volatility, open interest:
return universe \
.delta(0.5, 1.5) \
.gamma(0.0001, 0.0006) \
.vega(0.01, 1.5) \
.theta(-2.0, -0.5) \
.rho(0.5, 3.0) \
.implied_volatility(1, 3) \
.open_interest(100,500)
namespace QuantConnect { public class USEquityOptionsDataAlgorithm : QCAlgorithm { private Symbol _optionSymbol; public override void Initialize() { SetStartDate(2020, 6, 1); SetEndDate(2021, 6, 1); SetCash(100000); UniverseSettings.Asynchronous = True; // Requesting data var option = AddOption("GOOG"); _optionSymbol = option.Symbol; // Set our strike/expiry filter for this option chain option.SetFilter(OptionFilter); // Get the entire Option chain for the current day. var chain = OptionChain(option.Symbol.Underlying); } private virtual OptionFilterUniverse OptionFilter(OptionFilterUniverse universe) { // Contracts can be filtered by greeks, implied volatility, open interest: return universe .Delta(0.5m, 1.5m) .Gamma(0.0001m, 0.0006m) .Vega(0.01m, 1.5m) .Theta(-2.0m, -0.5m) .Rho(0.5m, 3.0m) .ImpliedVolatility(1.0m, 3.0m) .OpenInterest(100m, 500m); } } }
The Equity resolution must be less than or equal to the Equity Option resolution. For example, if you set the Equity resolution to minute, then you must set the Equity Option resolution to minute, hour, or daily.
For more information about creating US Equity Option Universes, see Equity Options.
Accessing Data
For information about accessing US Equity Options Universe data, see Equity Options.
Historical Data
You can get historical US Equity Options Universe data in an algorithm and the Research Environment.
Historical Data In Algorithms
To get historical US Equity Options Universe data in an algorithm, call the History<OptionUniverse>history method with the canonical Equity Option Symbol. This method returns data on all of the tradable contracts, not just the contracts that pass your universe filter. If there is no data in the period you request, the history result is empty.
# DataFrame history_df = self.history(self.option_symbol, timedelta(3)) # OptionUniverse objects history = self.history[OptionUniverse](self.option_symbol, timedelta(3))
// OptionUniverse objects var history = History<OptionUniverse>(_optionSymbol, TimeSpan.FromDays(3)).ToList();
For more information about historical Equity Options Universe data in algorithms, see Historical Data.
Historical Data In Research
To get historical US Equity Options Universe data in the Research Environment, call the History<OptionUniverse>history method with the canonical Option Symbol. This method returns data on all of the tradable contracts, not just the contracts that pass your universe filter.
qb = QuantBook() option = qb.add_option("GOOG") history = qb.history(option.symbol, datetime(2020, 6, 1), datetime(2020, 6, 5))
var qb = new QuantBook();
var option = qb.AddOption("GOOG");
var history = qb.History<OptionUniverse>(option.Symbol, new DateTime(2020, 6, 1), new DateTime(2020, 6, 6));
foreach (var chain in history)
{
var endTime = chain.EndTime;
var filteredContracts = chain.Data
.Select(contract => contract as OptionUniverse)
.Where(contract => contract.Greeks.Delta > 0.3m);
foreach (var contract in filteredContracts)
{
var price = contract.Price;
var iv = contract.ImpliedVolatility;
}
}
For more information about historical Equity Options Universe data in the Research Environment, see Universes.
Example Applications
The US Equity Options Universe dataset enables you to accurately design Option strategies. Examples include the following strategies:
- Buying put Options to hedge against downward price movement in positive Equity positions
- Exploiting arbitrage opportunities that arise when the price of Option contracts deviate from their theoretical value
For more example algorithms, see Examples.