Put-call parity holds to rounding error
Over 3,000 quotes parity holds to of the spot, and early exercise of an American call never pays.
bound 1e-15worst residual at this spot
| Quantity | Viv | vipyr | Checked by |
|---|---|---|---|
n quotes | 3000 | 3000 | 3,000 quotes satisfy put-call parity to 1e-15 of the spot |
worst parity | 2.36848 × 10−16 | 2.36848 × 10−16 | 3,000 quotes satisfy put-call parity to 1e-15 of the spot |
worst call gap | 0 | 0.0 | the American call equals the European call exactly |
min put premium | 6.34943 × 10−45 | 6.34943 × 10−45 | the American put is never worth less than the European put |
put_call_parity.viv
Output · native build · Oct 14, 2026 · 0.67 s
n_quotes: 3000 worst_parity: 2.36848e-16 worst_call_gap: 0 min_put_premium: 6.34943e-45
- ✓ 3,000 quotes satisfy put-call parity to 1e-15 of the spot
- ✓ the American call equals the European call exactly
- ✓ the American put is never worth less than the European put
Open in the workbenchAtlasCode map
Uses vp.finance.bs_price, vp.finance.crr_price
- Full statement
- Over 3,000 European quotes, Black-Scholes call and put prices satisfy put-call parity to within of the spot price (rounding only). On every 30th quote a 400-step binomial tree gives an American call on a non-dividend stock exactly the European call's price, so early exercise never pays, and the American put is never worth less than the European put.
- Scope
- 3,000 quotes on a grid (spot 60 to 150, strike 100, maturities 0.1 to 3 years, volatilities 10% to 50%, rate 3%, no dividend); the tree has 400 steps. Parity is a property of the formulas, so what this measures is the implementation's rounding.
- Reference
- Put-call parity , which holds for European options under any model without arbitrage (Stoll, "The relationship between put and call option prices", J. Finance 24 (1969) 801-824); Merton (1973) for why an American call on a stock paying no dividend is never exercised early. The prices are examples/options/bs.viv and crr.viv, what vp.finance.bs_price and crr_price run.
claims/finance/put_call_parity.viv · claims/finance/put_call_parity.py#0b901c94dc