What is Boot Camp?
Boot Camp is a great way to improve your skills and learn the QuantConnect API in easily digestible portions.
Don't have an account? Join QuantConnect Today
We are dedicated to providing investors with a cutting-edge platform for rapidly creating quant investment strategies. Founded in 2012, we've empowered more than 250,000 quants and engineers to create and trade their ideas.
Quickly and easily started with our API to build your strategy. The learning center lessons are interactive, step-by-step guides to make you productive as fast as possible.
Focus your efforts on driving alpha, not parsing CSV files. Our cloud offers hundreds of terabytes of traditional and alternative data preformatted, cleaned, and instantly accessible by our API.
Coordinate teamwork, control access permissions, and your shared cloud resources. Grow your trading organization safely and efficiently on top of our cloud architecture.
A selection of streaming live-trading strategies written by QuantConnect, and top highlights from the community available to follow and clone. Peer into detailed real-time positions to gain insight for your own trading.
What is Boot Camp?
Boot Camp is a great way to improve your skills and learn the QuantConnect API in easily digestible portions.
A collection of courses from independent educators to improve your quant skill base and create better strategies.
Solidify and expand your quant skill base with courses at QuantConnect
Learn algorithmic trading with python for US Equities. Guided strategy development in easily digestible portions.
Author: QuantConnect
Free | 95,521 People Enrolled
Learn algorithmic trading with python for FX. Guided strategy development in easily digestible portions.
Author: QuantConnect
Free | 20,487 People Enrolled
Learn algorithmic trading with python for Futures. Guided strategy development in easily digestible portions.
Author: QuantConnect
Free | 7,353 People Enrolled
In this algorithmic trading tutorial series you will learn everything you need to know to start writing your own trading bots using Python and the QuantConnect quantitative trading platform.
Author: Louis
Free | 28,481 People Enrolled
Master algorithmic trading on QuantConnect; backtest and live trade Stocks, Options, Futures, Forex, and Crypto.
Author: Cheng Li
Paid | Enroll on Udemy
Learn to use Python, Pandas, Matplotlib, and the QuantConnect Lean Engine to perform financial analysis and trading.
Author: Jose Portilla, Pierian Training
Paid | Enroll on Udemy
Learn to write programs that algorithmically trade cryptocurrencies using QuantConnect (C#).
Author: Eric Summers
Paid | Enroll on Udemy
Organization Notes
Get Started with Algorithm Lab
New Research
Digital Asset Stockpile Portfolio Construction Techniques
Exploration of various techniques in managing the planned US Digital Asset Stockpile portfolio, including Heirarchical Risk Parity....
ReadAlgorithm Lab is your playground for developing and refining trading algorithms with QuantConnect. Utilize advanced tools, historical data, and robust backtesting to enhance your trading strategies. Transform your ideas into actionable insights and optimize your trading approach with ease.
Sign Up for FreeAlready have an account Log In.
This account is protected by two-factor authentication.
Request Token Information Reset My TokenCreated | Last Time Used | Agent | |
---|---|---|---|
No entries found |
To continue please enter your email:
(No google account required)
To verify that everything goes well please enter the 6 digit verification code generated by the authenticator application
Algorithm Lab is your playground for developing and refining trading algorithms with QuantConnect. Utilize advanced tools, historical data, and robust backtesting to enhance your trading strategies. Transform your ideas into actionable insights and optimize your trading approach with ease.
Sign Up for FreeAlready have an account Log In.
Please stop one of the following coding sessions, or upgrade your account.
NAME | ORGANIZATION |
---|
QuantConnect Datasets
Explore free and paid datasets available on QuantConnect covering fundamentals, pricing, and alternative options.
Datasets >
Dashboard
A transparent, community reporting system. Report suspected issues with our cloud data to be investigated by the QuantConnect Team.
Issue List
Loading...
Data Explorer Issues are a way to report and track data problems. They give the QuantConnect community a way to discuss potential solutions and be notified when they are resolved. If you think you have found a data problem please check the existing open and closed issues first; often another user may have already reported your problem.
Does your issue match any of the already listed issues?
Thank you for your contribution! Our team is currently working on resolving these issues, please subscribe to them to receive updates.
Datasets >
US Equity Option Universe
Dataset by QuantConnect
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.
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.
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));
The following table describes the dataset properties:
Property | Value |
---|---|
Start Date | January 2012 |
Asset Coverage | 4,000 Symbols |
Data Density | Dense |
Resolution | Daily |
Timezone | New York |
The US Equity Options Universe dataset enables you to accurately design Option strategies. Examples include the following strategies:
For more example algorithms, see Examples.
The US Equity Options Universe dataset provides OptionUniverse objects, which have the following attributes:
To view the supported assets in the US Equity Options Universe dataset, see the Data Explorer.
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, flatten=True).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.
You can get historical US Equity Options Universe data in an algorithm and the Research Environment.
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), flatten=True)
# 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.
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), flatten=True)
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.
The US Equity Options Universe dataset provides OptionUniverse objects, which have the following attributes:
The following example algorithm subscribes to Google put options that fall within delta range between -1 and -0.95, open interest range between 10 and 1000, and expire within seven days. Within this Option chain, the algorithm holds the put Option contract that has the minimum delta (closest to -1) during market hour to hedge the underlying intra-day movement completely. It avoid volatility from sentiment and only earns from inter-day movement from longer-term factors. When the contract expires, the algorithm rolls over to the next contract that meets this criteria.
from AlgorithmImports import *
class USEquityOptionsUniverseAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2021, 1, 1)
self.set_end_date(2021, 2, 1)
self.set_cash(10000000)
# Asynchronous can use computational resources efficiently
self.universe_settings.asynchronous = True
# Subscribe to the underlying for the underlying position
# Set the data normalization mode to raw for strike price comparability
self.equity = self.add_equity("GOOG", data_normalization_mode=DataNormalizationMode.RAW).symbol
# Requesting option data and filter for the hedge candidates
option = self.add_option(self.equity)
option.set_filter(self.option_filter)
self.option_symbol = option.symbol
# Set scheduled event to buy a hedge option contract at market open to eliminate the intra-day movement
self.schedule.on(
self.date_rules.every_day(self.equity),
self.time_rules.after_market_open(self.equity, 1),
self.buy_hedge_contract
)
# Set a scheduled event to sell the hedge contract before market close, since we want to earn from inter-day movement
# Leave 2 minutes contingency to fill
self.schedule.on(
self.date_rules.every_day(self.equity),
self.time_rules.before_market_close(self.equity, 2),
self.sell_hedge_contract
)
self.hedge = None
def option_filter(self, universe: OptionFilterUniverse) -> OptionFilterUniverse:
# Select the contracts with delta very close to -1 and high open interest
# This can effectively hedge most of the price change of the underlying and ensure the liquidity
# Make sure the contract is expiring close for its tradbility
return universe.include_weeklys().puts_only().expiration(2, 7).delta(-1, -0.95).open_interest(10, 1000)
def buy_hedge_contract(self) -> None:
chain = self.current_slice.option_chains.get(self.option_symbol)
if chain:
# Order the underlying if not hold, the order size should match the option contract
# Order only if option chain data ready for hedging
if not self.portfolio[self.equity].invested:
self.market_order(self.equity, self.securities[self.option_symbol].symbol_properties.contract_multiplier)
# Get the contract with delta closest to -1 (lowest possible delta)
contract = sorted(chain, key=lambda x: x.greeks.delta)[0]
self.hedge = contract.symbol
# Buy 1 deep ITM put with delta close to -1 to eliminate the intraday movement
self.market_order(self.hedge, 1)
def sell_hedge_contract(self) -> None:
# Check if any hedge contract position, if so, liquidate before market close to expose to underlying overnight movement
if self.hedge:
self.liquidate(self.hedge)
self.hedge = None
namespace QuantConnect
{
public class USEquityOptionsUniverseAlgorithm : QCAlgorithm
{
private Symbol _equity, _optionSymbol, _hedge;
public override void Initialize()
{
SetStartDate(2021, 1, 1);
SetEndDate(2021, 2, 1);
SetCash(10000000);
// Asynchronous can use computational resources efficiently
UniverseSettings.Asynchronous = true;
// Subscribe to the underlying for the underlying position
// Set the data normalization mode to raw for strike price comparability
_equity = AddEquity("GOOG", dataNormalizationMode: DataNormalizationMode.Raw).Symbol;
// Requesting option data and filter for the hedge candidates
var option = AddOption(_equity);
_optionSymbol = option.Symbol;
option.SetFilter(OptionFilter);
// Set scheduled event to buy a hedge option contract at market open to eliminate the intra-day movement
Schedule.On(
DateRules.EveryDay(_equity),
TimeRules.AfterMarketOpen(_equity, 1),
BuyHedgeContract
);
// Set a scheduled event to sell the hedge contract before market close, since we want to earn from inter-day movement
// Leave 2 minutes contingency to fill
Schedule.On(
DateRules.EveryDay(_equity),
TimeRules.BeforeMarketClose(_equity, 2),
SellHedgeContract
);
}
private OptionFilterUniverse OptionFilter(OptionFilterUniverse universe)
{
// Select the contracts with delta very close to -1 and high open interest
// This can effectively hedge most of the price change of the underlying and ensure the liquidity
// Make sure the contract is expiring close for its tradbility
return universe
.IncludeWeeklys()
.PutsOnly()
.Expiration(2, 7)
.Delta(-1m, -0.95m)
.OpenInterest(10, 1000);
}
private void BuyHedgeContract()
{
if (CurrentSlice.OptionChains.TryGetValue(_optionSymbol, out var chain))
{
// Order the underlying if not hold, the order size should match the option contract
// Order only if option chain data ready for hedging
if (!Portfolio[_equity].Invested)
{
MarketOrder(_equity, Securities[_optionSymbol].SymbolProperties.ContractMultiplier);
}
// Get the contract with delta closest to -1 (lowest possible delta)
var contract = chain.MinBy(x => x.Greeks.Delta);
_hedge = contract.Symbol;
// Buy 1 deep ITM put with delta close to -1 to eliminate the intraday movement
MarketOrder(_hedge, 1);
}
}
private void SellHedgeContract()
{
// Check if any hedge contract position, if so, liquidate before market close to expose to underlying overnight movement
if (_hedge != null)
{
Liquidate(_hedge);
_hedge = null;
}
}
}
}
The following example algorithm demonstrating a Gamma Scalping strategy through framework algorithm. It filters NVDA options with expiration between 30 to 90 days and open interest between 50 and 1000, due to liquidity concern and lower Gamma fluctuation. Assuming a significant upward trend is expecting, it orders a long straddle strategy from the strike price with Delta-neutral and the highest Gamma to earn the highest profit from upward underlying movement.
from AlgorithmImports import *
class USEquityOptionsUniverseFrameworkAlgorithm(QCAlgorithm):
def initialize(self) -> None:
self.set_start_date(2023, 1, 1)
self.set_end_date(2023, 12, 31)
self.set_cash(100000)
# Asynchronous can use computational resources efficiently
self.universe_settings.asynchronous = True
# Universe selection that select based on liquidity of the option contracts (by open interest)
self.add_universe_selection(EquityOptionsUniverseSelectionModel())
# Custom alpha model that use Delta and Gamma to signal insights
self.add_alpha(OptionDeltaGammaAlphaModel())
# To maintain long-short size equal, use a PCM that order a single contract
self.set_portfolio_construction(SingleSharePortfolioConstructionModel())
class EquityOptionsUniverseSelectionModel(OptionUniverseSelectionModel):
def __init__(self) -> None:
# Daily update with the select_option_chain_symbols function
super().__init__(timedelta(1), self.select_option_chain_symbols)
def select_option_chain_symbols(self, dt: datetime) -> List[Symbol]:
# Select only NVDA options as our focus, which is a highly traded volatile equity with great upward momentum
return [Symbol.create("NVDA", SecurityType.OPTION, Market.USA)]
def filter(self, universe: OptionFilterUniverse) -> OptionFilterUniverse:
# To ensure the liquidity and tradability, make sure the option is not 0-DTE and have a fair open interest
# A longer TTM will have lower Gamma thus more stable in the local delta-neutral position
return universe.include_weeklys().expiration(30, 90).open_interest(50, 1000)
class OptionDeltaGammaAlphaModel(AlphaModel):
def __init__(self) -> None:
# A day count variable to control the alpha model only trade once a day
self._day = -1
def update(self, algorithm: QCAlgorithm, slice: Slice) -> List[Insight]:
insights = []
if self._day != slice.time.day:
# We open position for each option underlying as separate bet
for _, chain in slice.option_chains.items():
# For theta-neutral, select the same expiry for both call and put
expiry = min(x.expiry for x in chain)
contracts = [x for x in chain if x.expiry == expiry]
# Calculate delta and gamma per strike price group for later filtering, ensure both call and put available for option strategy
delta_gamma_symbols = []
strikes = set(x.strikes for x in contracts if len([y for y in contracts if y.strike == x.strike]) == 2)
for strike in strikes:
# Get both call and put for their aggregated delta and gamma
call = next(filter(lambda x: x.right == OptionRight.CALL and x.strike == strike), contracts)
put = next(filter(lambda x: x.right == OptionRight.PUT and x.strike == strike), contracts)
delta_gamma_symbols.append((call.greeks.delta + put.greeks.delta, call.greeks.gamma + put.greeks.gamma, call.symbol, put.symbol))
if len(delta_gamma_symbols) == 0:
continue
# We want a delta-neutral position, so it is likely to be ATM (like a long straddle)
# Less than 2d.p. difference is non-significant, which we can risk for better reward
# Assuming the market direction is up in most scenario, we try to get the strike providing max overall Gamma
# Make sure the aggregated gamma to be positive to bet on large uptrend
# So it will earn more when the price really go up higher and higher, but locally immune for small noise
filtered = [item for item in delta_gamma_symbols if round(item[0], 2) <= 0.01 and item[1] > 0]
if len(filtered) == 0:
continue
selected = sorted(filtered, key=lambda x: x[1])[0]
# Provide trade signal and roll the day count to let the position stay for the whole day
selected_call = selected[2]
selected_put = selected[3]
insights.extend([
Insight.price(selected_call, Expiry.END_OF_DAY, InsightDirection.UP),
Insight.price(selected_put, Expiry.END_OF_DAY, InsightDirection.UP)
])
self._day = slice.time.day
return insights
class SingleSharePortfolioConstructionModel(PortfolioConstructionModel):
def create_targets(self, algorithm: QCAlgorithm, insights: List[Insight]) -> List[PortfolioTarget]:
targets = []
for insight in insights:
if algorithm.securities[insight.symbol].is_tradable:
# Use a whole number target to order the exact number of share for size-matching
targets.append(PortfolioTarget(insight.symbol, insight.direction))
return targets
namespace QuantConnect
{
public class USEquityOptionsUniverseFrameworkAlgorithm : QCAlgorithm
{
public override void Initialize()
{
SetStartDate(2024, 1, 1);
SetEndDate(2024, 3, 31);
SetCash(100000);
// Asynchronous can use computational resources efficiently
UniverseSettings.Asynchronous = true;
// Universe selection that select based on liquidity of the option contracts (by open interest)
AddUniverseSelection(new EquityOptionsUniverseSelectionModel());
// Custom alpha model that use Delta and Gamma to signal insights
AddAlpha(new OptionDeltaGammaAlphaModel());
// To maintain long-short size equal, use a PCM that order a single contract
SetPortfolioConstruction(new SingleSharePortfolioConstructionModel());
}
}
class EquityOptionsUniverseSelectionModel : OptionUniverseSelectionModel
{
// Daily update with the SelectOptionChainSymbols function
public EquityOptionsUniverseSelectionModel()
: base(TimeSpan.FromDays(1), SelectOptionChainSymbols) {}
private static IEnumerable<Symbol> SelectOptionChainSymbols(DateTime utcTime)
{
// Select only NVDA options as our focus, which is a highly traded volatile equity with great upward momentum
return new[] {QuantConnect.Symbol.Create("NVDA", SecurityType.Option, Market.USA)};
}
protected override OptionFilterUniverse Filter(OptionFilterUniverse filter)
{
// To ensure the liquidity and tradability, make sure the option is not 0-DTE and have a fair open interest
// A longer TTM will have lower Gamma thus more stable in the local delta-neutral position
return filter
.IncludeWeeklys()
.Expiration(30, 90)
.OpenInterest(50, 1000);
}
}
class OptionDeltaGammaAlphaModel : AlphaModel
{
// A day count variable to control the alpha model only trade once a day
private int _day = -1;
public override IEnumerable<Insight> Update(QCAlgorithm algorithm, Slice slice)
{
var insights = new List<Insight>();
if (_day != slice.Time.Day)
{
// We open position for each option underlying as separate bet
foreach (var kvp in slice.OptionChains)
{
var chain = kvp.Value;
// For theta-neutral, select the same expiry for both call and put
var expiry = chain.Min(x => x.Expiry);
var contracts = chain.Where(x => x.Expiry == expiry).ToList();
// Calculate delta and gamma per strike price group for later filtering, ensure both call and put available for option strategy
var deltaGammaSymbols = new List<(decimal, decimal, Symbol, Symbol)>();
var strikes = contracts.Select(x => x.Strike)
.Where(x => contracts.Count(y => y.Strike == x) == 2)
.Distinct();
foreach (var strike in strikes)
{
// Get both call and put for their aggregated delta and gamma
var call = contracts.Single(x => x.Right == OptionRight.Call && x.Strike == strike);
var put = contracts.Single(x => x.Right == OptionRight.Put && x.Strike == strike);
deltaGammaSymbols.Add((call.Greeks.Delta + put.Greeks.Delta, call.Greeks.Gamma + put.Greeks.Gamma, call.Symbol, put.Symbol));
}
if (deltaGammaSymbols.Count == 0)
{
continue;
}
// We want a delta-neutral position, so it is likely to be ATM (like a long straddle)
// Less than 2d.p. difference is non-significant, which we can risk for better reward
// Assuming the market direction is up in most scenario, we try to get the strike providing max overall Gamma
// Make sure the aggregated gamma to be positive to bet on large uptrend
// So it will earn more when the price really go up higher and higher, but locally immune for small noise
var filtered = deltaGammaSymbols.Where(item => Math.Round(item.Item1, 2) <= 0.01m && item.Item2 > 0).ToList();
if (filtered.Count == 0)
{
continue;
}
var selected = filtered.OrderByDescending(item => item.Item2).First();
// Provide trade signal and roll the day count to let the position stay for the whole day
var selectedCall = selected.Item3;
var selectedPut = selected.Item4;
insights.AddRange(new[] {
Insight.Price(selectedCall, Expiry.EndOfDay, InsightDirection.Up),
Insight.Price(selectedPut, Expiry.EndOfDay, InsightDirection.Up)
});
_day = slice.Time.Day;
}
}
return insights;
}
}
class SingleSharePortfolioConstructionModel : PortfolioConstructionModel
{
public override IEnumerable<PortfolioTarget> CreateTargets(QCAlgorithm algorithm, Insight[] insights)
{
var targets = new List<PortfolioTarget>();
foreach (var insight in insights)
{
if (algorithm.Securities[insight.Symbol].IsTradable)
{
// Use a whole number target to order the exact number of share for size-matching
targets.Add(new PortfolioTarget(insight.Symbol, (int) insight.Direction));
}
}
return targets;
}
}
}
US Equity Option Universe is allowed to be used in the cloud for personal and commercial projects for free. The data is permissioned for use within the licensed organization only
Free | Documentation
US Equity Option Universe can be downloaded on premise with the LEAN CLI, for a charge per file downloaded. This download is for the licensed organization's internal LEAN use only and cannot be redistributed or converted in any format.
Starting at 200 QCC/file | Learn More
LEAN CLI is a cross-platform wrapper on the QuantConnect algorithmic trading engine called LEAN. The CLI makes using LEAN incredibly easy, reducing most of the pain points of developing and managing an algorithmic trading strategy to a few lines of bash.
Using the CLI you can download the same data QuantConnect hosts in the cloud for a small fee. These fees are per file downloaded, and are paid for in QuantConnect-Credits (QCC). We recommend purchasing credits to enable downloading.
The CLI command generator is a helpful tool to generate a copy-paste command to download this dataset from the form below.
lean data download \
--dataset "US Equity Option Universe" \
--data-type "trade" \
--ticker "SPY, QQQ, AAPL" \
--start "20240316" \
--end "20250316"
lean data download `
--dataset "US Equity Option Universe" `
--data-type "trade" `
--ticker "SPY, QQQ, AAPL" `
--start "20240316" `
--end "20250316"
Free access for US Equity Option universe selection on the QuantConnect Cloud. Create custom filters using implied volatility, Greeks, and open interest for the US Equity Options.
On premise download of US Equity Options universe data files, including price, implied volatility, Greeks, and open interest for local backtesting.
Bulk download of the entire US Equity Option universe dataset
Bulk download of the entire US Equity Option universe dataset
What people are saying about this
This product has not received any reviews yet, be the first to post one!
Rate the Module:
Provider offers 4 licensing options
Explore free and paid datasets available on QuantConnect covering fundamentals, pricing, and alternative options.
Dataset Status from to
No Runs
OK
Degraded
Failure
Explore free and paid datasets available on QuantConnect covering fundamentals, pricing, and alternative options.
Lorem ipsum dolor sit amet conjectura lorem ipsum dolor sit amet conjectura lorem ipsum
Configuration Keys
Environment Variables
Lorem ipsum dolor sit amet conjectura lorem ipsum dolor sit amet conjectura lorem ipsum
File Link
Lorem ipsum dolor sit amet conjectura lorem ipsum dolor sit amet conjectura lorem ipsum
Lorem ipsum dolor sit amet conjectura lorem ipsum dolor sit amet conjectura lorem ipsum
Upload a manually created tar or zip file to all cloud data systems.
Add a link and click the Sync Dataset button to upload the dataset
Upload Destinations
The dataset synchronizer is an internal tool for the QuantConnect team to upload data to the
cloud data storage environments. It supports TAR files which are extracted in the root directory
of the cloud data environments.
Take extreme care to carefully structure your data TAR package with
the same folders as the LEAN data folder. Ensure all folders and file names are lowercase as Linux is case-sensitive.
Support
Algorithm Lab is your playground for developing and refining trading algorithms with QuantConnect. Utilize advanced tools, historical data, and robust backtesting to enhance your trading strategies. Transform your ideas into actionable insights and optimize your trading approach with ease.
Sign Up for FreeAlready have an account Log In.
â‘
â‘
â‘
â‘
â‘
Hover and click over the stars to rate us.
It looks like you are not fully satisfied with your experience on QuantConnect, please take a moment to let us know how we can improve our services for you:
If you have a minute to spare, please leave us a review on Trustpilot.
Stories like yours help others see the full potential of QuantConnect.
Organization Name |
---|
Upgrade to Team plan or higher to enable custom invoicing
Changes will be applied to future invoices.
Users will be able to join by following the link in the invitation email.
You’ve been invited by Jared Broad to join his G-Force Organization.
Would you like to accept the invitation?
Are you sure you want to delete the encryption key "undefined"?
Caution: We will not be able to decrypt encrypted projects without the original key.
Drag & Drop or
Keys are added to the local storage in your web browser and not uploaded to QuantConnect. To use an encrypted project on another computer you will need to bring a copy of the key.
This project is encrypted using the key .
This project will be encrypted using the key .