Put-call Parity¶
TL;DR¶
Put-call parity is a fundamental relationship in options pricing that states that the price of a European call option and a European put option with the same strike price and expiration date should be equal, after accounting for the present value of the strike price. This relationship helps ensure no arbitrage opportunity exists between the call and put options on the same underlying asset.
Replicating portfolios¶
An option ( call or put ) can be replicated with a self-financed portfolio combining:
- A position (long or short) in shares
- A position in a risk-free bond (lend or borrow)
Replicating portfolio for a call option¶
graph LR
S0["S₀ = 100"] -->|up| Su["Sᵘ = 120<br><span style='color:red'>c₁ᵘ = 30</span>"]
S0 -->|down| Sd["Sᵈ = 80<br><span style='color:red'>c₁ᵈ = 0</span>"]
With X number of shares and B amount in the risk-free bond, such that ( assume r=0 for simlicity)
We want to replicate this payoff using:
- X: number of shares
- B: money in the risk-free bond
we setup the same system:
After solving the system of equations we get: X= 0.75, B = -60.
Initial cost of the portfolio:
At time 0,
So, we are replicated that when K=90,
- Borrow 60$
- Buy 0.75 shares
Total initial cost: $15, that is the fair no-arbitrage price of the option.
Replicating portfolio for a put option¶
graph LR
S0["S₀ = 100"] -->|up| Su["Sᵘ = 120<br><span style='color:red'>p₁ᵘ = 0</span>"]
S0 -->|down| Sd["Sᵈ = 80<br><span style='color:red'>p₁ᵈ = 10</span>"]
Solving above we get: X = -0.25, B = 30.
So we have: \(100*(-0.25)+30 = 5\)
So the put option price is $5
Put-call parity¶
Put-call parity shows the exact mathematical relationship between the price of a European call option and a European put option with the same:
- Strike price \(K\)
- Expiration time \(T\)
- Underlying asset \(S_0\)
A call option can be replicated as long stock + short bond, a put option can be replicated as short stock + long bond.
At \(t_1\) the stock is either \(S_u=120\) or \(S_d=80\), Strike price is \(K=90\), call payoff is \(C^u = 30, C^d=0\), put payoff is \(P^u=0, P^d=10\),
we solve two systems of linear equations ( for call and for put) using:
Stock component + Bond component = Option payoff in each state,
then we get:
but the 90 is the K, so we can write it as:
To get the Put option price we can either use one of the following:
from wqu.dp.binomial import binomial_put
# binomial_put(S0, K, T, r, u, d, N)
p0 = binomial_put(100, 90, 10, 0, 1.2, 0.8, 10)
or