One price relationship the market cannot violate, whatever the model. For a European call and put on the same stock, same strike K, same expiry T: C − P = S − K·e−rT. It does not come from Black-Scholes — it comes from replication alone, so it binds every model at once. Break it and you have a free lunch: a portfolio that pays a positive credit today and can never lose. Down the center the terms go in, the identity is checked, the arbitrage comes out. The blue team builds and defends it; the red team tries to break it.
source Stoll, H. R., The Relationship Between Put and Call Option Prices, J. Finance 24(5), 801–824 (1969) — doi:10.1111/j.1540-6261.1969.tb01694.x. Rendered, not quoted.
Two portfolios that pay the same amount in every future must cost the same today, or one is money for nothing.
Fiduciary call = one call + cash K·e−rT (a bond maturing to K). Protective put = one put + one share. At expiry both are worth max(ST, K) — for every ST. Equal payoff ⇒ equal price:
C + K·e−rT = P + S, i.e. C − P = S − K·e−rT.
No drift, no volatility, no distribution of prices is assumed — only that a dollar at T discounts at the riskless rate and that the two baskets exist to trade.
This is the-no-arbitrage principle at its cleanest: a bound on prices that needs no model at all.
the-black-scholes equation, the binomial tree, any consistent pricing rule — each must reproduce parity or admit a free lunch. Parity is the premise those spheres inherit; they add assumptions to price a single option, but they may never overturn the relationship between the pair. Each sphere is the next one's premise.
The blue team's live check: across a grid of (S, K, r, T, σ), price call and put with Black-Scholes and confirm the parity residual is zero to 1e-9. If red tampers with the discounting, this badge is where it shows.
Feed the engine one contract pair: spot S, strike K, riskless rate r, time to expiry T, volatility σ. From these it prices a fair European call C and put P. You may also mis-quote the call by an offset Δ to simulate a market that has drifted off parity — that is the input the arbitrage constructor reads.
| symbol | meaning | role |
|---|---|---|
| C | call price | priced / quoted |
| P | put price | priced |
| S | spot of the stock | traded |
| K·e−rT | PV of the strike | the bond |
The strike must be discounted — a dollar at expiry is worth less than a dollar now. That single discount factor is the whole hinge of the identity.
Every number is computed on the spot from the Black-Scholes closed form and the identity — never looked up.
What the machine proves, closed-form: the identity C − P = S − K·e−rT holds for Black-Scholes prices to 1e-9, and — because it comes from replication — for any consistent pair, not just Black-Scholes. At expiry the call-minus-put payoff equals ST − K for every ST. Any gap is a riskless arbitrage whose locked profit equals the gap.
The blue team's witness (left) confirms the residual live; the red team (right) tries to make the gap lie.
In the real market observed parity "violations" are almost always these costs and hard-to-borrow stocks — AMBER the frictionless assumption is idealized, not literal. The identity is a floor on prices, not a promise of a costless trade.
"Parity needs the Black-Scholes model." Cut. It predates it by four years (Stoll 1969) and uses no volatility or price distribution — pure replication. It constrains Black-Scholes, not the reverse.
"C − P = S − K." Cut. Undiscounted, this is false whenever r > 0. The strike is a future payment; it must be discounted to K·e−rT. That exact error is the planted TAMPER.
"Parity holds for American options too." Kept, corrected. Only for calls on non-dividend stock; for puts it becomes an inequality — early exercise is worth something the equality can't hold.
The red team's move: drop the discount on the strike — price the pair with C − P = S − K instead of S − K·e−rT. The engine then "finds" an arbitrage of K(1 − e−rT) that does not exist. The blue team's witness (window 7) is watching.
Undiscount the strike and every fair pair looks mispriced — the witness recomputes, the residual goes non-zero, and the badge turns red. Nothing is faked; the error is real and it is caught.