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

python
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

python
# 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

python
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.

python
# 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.

Next