Breeden-Litzenberger
Risk-neutral density extraction from options chains for cross-asset edge signals
Options prices encode the market’s probability distribution over future outcomes. The Breeden-Litzenberger theorem extracts this risk-neutral density by taking the second derivative of call prices with respect to strike. Horizon uses this to compare what the options market implies against what a prediction market is pricing — the gap is tradeable edge.
API
Extract the density
density = hz.risk_neutral_density(
strikes=[90, 95, 100, 105, 110, 115, 120],
call_prices=[12.5, 8.8, 5.9, 3.7, 2.1, 1.1, 0.5],
rate=0.05, # risk-free rate
T=0.25, # time to expiry in years
)
# density: list of (strike, probability_density) tuples
Query the density
# Probability that the underlying finishes above a threshold
p_above = hz.implied_probability_above(density, threshold=105.0)
# Probability below
p_below = hz.implied_probability_below(density, threshold=95.0)
# Probability in a range
p_between = hz.implied_probability_between(density, low=100.0, high=110.0)
Cross-asset edge
edge = hz.cross_asset_edge(
density=density,
prediction_price=0.45, # prediction market price for "stock > 105"
)
# edge: float -- positive means prediction market is cheap relative to options-implied prob
Finding edge between options and prediction markets
The core workflow: extract what options traders believe, compare it to what prediction market participants are pricing, and trade the disagreement.
# 1. Pull an options chain (via Alpaca, IBKR, or your data source)
strikes = [380, 385, 390, 395, 400, 405, 410, 415, 420]
calls = [22.1, 17.8, 14.0, 10.6, 7.8, 5.5, 3.7, 2.3, 1.3]
# 2. Extract the risk-neutral density
density = hz.risk_neutral_density(strikes, calls, rate=0.053, T=30/365)
# 3. Compare to a prediction market
# Prediction market: "SPY above 400 by expiry" trading at $0.58
options_implied = hz.implied_probability_above(density, 400.0)
prediction_price = 0.58
edge = options_implied - prediction_price
# edge > 0: prediction market is cheap, buy YES
# edge < 0: prediction market is rich, buy NO
Limitations
The density is risk-neutral, not real-world. It includes a risk premium, so implied_probability_above will typically overstate downside probability (puts are expensive). For directional edge signals this is acceptable — the bias is roughly constant and cancels when comparing two instruments pricing the same event.
The density quality depends on strike granularity. Fewer than 5 strikes produces a coarse approximation. Use midpoint prices to reduce bid-ask contamination.
When to use
- Cross-asset arbitrage: compare options-implied probabilities against prediction market prices on the same underlying event.
- Tail risk assessment: extract the market’s implied probability of extreme moves beyond what prediction markets cover.
- Relative value: compare densities across expirations or related underlyings.