Interactive demonstration of risk-neutral vs real-world pricing for binary options, and the implied discount rate puzzle
A binary (digital) option pays a fixed amount if the stock price exceeds a threshold at maturity, and nothing otherwise. This simple instrument reveals the key insight behind risk-neutral valuation(see Hull 2023, chap. 10): the risk-neutral probability used for pricing is lower than the real-world probability, but the option value is the same regardless of which world we use — provided we also adjust the discount rate.
The value of the option under risk-neutral valuation is:
where \(d_2 = \frac{\ln(S_0/V) + (r - \sigma^2/2)\,T}{\sigma\sqrt{T}}\), \(r\) is the risk-free rate, and \(N(d_2)\) gives the probability that \(S_T\) will be greater than \(V\) in the risk-neutral world.
The chart below shows both distributions with the strike marked. The shaded tails represent the probability of receiving the payoff in each world.
Tip
How to experiment
Move the strike \(V\) to see how the probabilities in both worlds change.
Widen the gap between \(\mu\) and \(r\) to see the implied discount rate increase.
Set \(\mu = r\) to verify that both worlds agree when there is no risk premium.
viewof binT = Inputs.range([0.25,3], {label:"Time to maturity T (years)",step:0.25,value:1})
// --- Standard normal CDF (Abramowitz & Stegun approximation) ---normcdf = x => {const a1 =0.254829592, a2 =-0.284496736, a3 =1.421413741const a4 =-1.453152027, a5 =1.061405429, p =0.3275911const sign = x <0?-1:1const t =1.0/ (1.0+ p *Math.abs(x))const y =1- (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t *Math.exp(-x * x /2)return0.5* (1+ sign * y)}
html`<table class="table" style="width:100%;"><thead><tr><th>Quantity</th><th>Risk-neutral</th><th>Real world</th></tr></thead><tbody><tr><td style="font-weight:500;">Expected return used</td><td>r = ${(binR *100).toFixed(1)}%</td><td>μ = ${(binMu *100).toFixed(1)}%</td></tr><tr><td style="font-weight:500;">d<sub>2</sub></td><td>${binD2rn.toFixed(4)}</td><td>${binD2rw.toFixed(4)}</td></tr><tr><td style="font-weight:500;">Prob(S<sub>T</sub> > $${binV})</td><td>${fmtPct(binProbRn)}%</td><td>${fmtPct(binProbRw)}%</td></tr><tr><td style="font-weight:500;">Expected payoff</td><td>$${fmtDollar(binPayoff * binProbRn)}</td><td>$${fmtDollar(binRealPayoff)}</td></tr><tr><td style="font-weight:500;">Discount rate used</td><td>r = ${(binR *100).toFixed(1)}%</td><td style="font-weight:700;">${isFinite(binImpliedRate) ? (binImpliedRate *100).toFixed(1) +"%":"N/A"} (implied)</td></tr><tr style="border-top: 2px solid #888;"><td style="font-weight:700;">Option value</td><td style="font-weight:700;">$${fmtDollar(binOptionValue)}</td><td style="font-weight:700;">$${isFinite(binImpliedRate) ?fmtDollar(binRealPayoff *Math.exp(-binImpliedRate * binT)) :"N/A"}</td></tr></tbody></table><p style="margin-top:0.5rem; color:#666; font-size:0.85rem;">Both approaches give the <strong>same option value</strong>. In the real world, the expected payoff is higher but the implied discount rate is also higher --- the two effects cancel exactly. This is why risk-neutral valuation works: it avoids the need to estimate the correct real-world discount rate (which is ${isFinite(binImpliedRate) ? (binImpliedRate *100).toFixed(1) +"%":"very high"} here, far above the risk-free rate of ${(binR *100).toFixed(1)}%).</p>`
Note
The discount rate puzzle
In the real world, the correct discount rate for this binary option’s expected payoff is surprisingly high — it reflects the “leveraged” risk of the option, not the risk of the underlying stock. If a single discount rate were used for a put option, it would typically be negative. Risk-neutral valuation eliminates the need to estimate these difficult discount rates: we simply use the risk-free rate for discounting in the risk-neutral world and get the correct answer for all worlds.
References
Hull, John. 2023. Risk Management and Financial Institutions. 6th ed. New Jersey: John Wiley & Sons.