Free lesson · Options
Put–call parity as identical terminal cash flows
Open interactive lessonPractice calculationsExplore labs
Start with the idea
Two portfolios with the same cash flows in every state should cost the same under the frictionless replication assumptions.
Symbols, units & horizon
- C,P: current European call/put premiums per underlying unit with common strike K and expiry
- S₀: current underlying currency per unit
- r: continuously compounded annual financing rate
- T: years to expiry
- K: currency per unit
- zero dividends assumed
When and why to use this
Audit an option chain and identify inconsistent contract or input mapping.
Two portfolios with the same cash flows in every state should cost the same under the frictionless replication assumptions.
For a non-dividend-paying underlying, a call plus a bond paying the strike replicates a put plus one underlying unit at European expiry. This is a cash-flow identity first and a pricing equality only after financing, shorting and simultaneous execution assumptions.
Use executable bid and ask combinations for an actual discrepancy test. American exercise, discrete dividends, borrow restrictions or different settlement conventions require modified analysis; a mid-price gap is only a diagnostic.
Put–call parity as identical terminal cash flows
- At expiry, call payoff plus K equals max(S_T,K).
- Put payoff plus S_T also equals max(S_T,K).
- Price equal terminal cash flows under frictionless financing: C+Ke^(−rT)=P+S₀, then rearrange.
S₀=100, K=100, r=0 and T=1 imply C=P. A call at 8 and put at 7 show a one-unit mid-price discrepancy requiring executable costs and contract checks.
Apply it in a strategy
- Freeze inputs at the stated decision time and record their units.
- Audit an option chain and identify inconsistent contract or input mapping.
- Recompute the example, then change the material assumption and explain the difference.
Research deliverable
Put–call parity as identical terminal cash flows: produce the worked calculation, a timestamped input record and a written decision addressing this limitation: A mid-price parity discrepancy is not executable arbitrage after spread, borrow, financing and settlement constraints.
These are synthetic mechanics examples, not historical performance or paper replications. Module evidence and research boundaries record the 12 September 2026 review.
Python implementation
Self-contained teaching example. Python 3.10+; dependencies and input conventions are shown in the code and notation. Run in your own Python environment.
# Python 3.10+; standard library and NumPy only.
# Synthetic teaching inputs; conventions and units are defined in the notation above.
from math import exp
def parity_residual(call,put,spot,strike,rate,years):
if min(spot,strike)<=0 or years<0: raise ValueError('Positive prices and nonnegative horizon required')
return call-put-spot+strike*exp(-rate*years)
assert parity_residual(8,7,100,100,0,1)==1
print(parity_residual(8,7,100,100,0,1))Continue learning
Options: Payoffs, Replication & Hedge Accounting — all lessons- Call and put payoffs versus profit
- A bull call spread caps gains and initial cost
- Put–call parity as identical terminal cash flows
- Replicate a one-step option with stock and cash
- Black–Scholes as a conditional benchmark
- Delta and gamma are local sensitivities
- Cash accounting for a discretely hedged option
- Early exercise compares immediate and continuation value
Quantitative finance and development glossary · Python resources and libraries · Research sources and limitations