Option Basics - Calls, Puts, and Payoffs › Put-Call Parity
Quantitative FinanceAll chapters Option Basics - Calls, Puts, and Payoffs › Put-Call ParityOne section · Sections in this chapter8 / 15 ↓
Reading tools Definitions & inline links
Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.
Article links
Make inline references clickable
Put-call parity is a fundamental relationship that links the prices of European calls and puts with the same strike and expiration. It's not a pricing model; it's an arbitrage relationship that must hold in efficient markets. Unlike pricing models that make assumptions about volatility or price dynamics, put-call parity relies only on the absence of arbitrage.
For European options on a non-dividend-paying stock, the relationship between call price , put price , stock price , strike price , risk-free rate , and time to expiration is:
where:
- : European call price
- : European put price
- : current stock price
- : strike price
- : risk-free interest rate
- : time to expiration
The equation states that the difference between call and put prices equals the difference between the current stock price and the present value of the strike price. The term represents the discounted value of the strike, acknowledging that receiving or paying in the future is worth less than receiving or paying today.
Deriving Put-Call Parity
To understand why this relationship must hold, consider two portfolios constructed from different instruments but designed to produce identical outcomes at expiration. If two portfolios always produce the same payoff regardless of what happens to the stock price, then they must have the same price today. If they didn't, we could buy the cheaper one and sell the more expensive one, locking in a risk-free profit.
Portfolio A: Long one call option plus cash equal to (the present value of the strike price)
This portfolio gives you the right to buy the stock at price , plus enough cash that, if invested at the risk-free rate, will grow to exactly by expiration.
Portfolio B: Long one put option plus one share of stock
This portfolio combines downside protection (the put) with direct ownership of the underlying asset.
At expiration, both portfolios have identical values regardless of the stock price:
| Scenario | Portfolio A Value | Portfolio B Value |
|---|---|---|
In the first scenario where the stock finishes above the strike, Portfolio A exercises the call, paying from the cash (which has grown from to exactly ) to acquire stock worth , resulting in total value . Portfolio B has a worthless put and stock worth , also totaling .
In the second scenario where the stock finishes at or below the strike, Portfolio A lets the call expire worthless and holds cash worth , totaling . Portfolio B exercises the put to sell the stock for , also totaling .
Since both portfolios have the same payoff in every scenario, they must have the same price today (no arbitrage). Therefore:
where:
- : call price
- : put price
- : current stock price
- : present value of the strike price
This derivation demonstrates the power of no-arbitrage reasoning. Without making any assumptions about how prices move, volatility, or investor preferences, we've established a precise relationship that must hold between calls, puts, stock, and bonds.

Arbitrage Implications
If put-call parity is violated, you can earn risk-free profits. The specific trades depend on the direction of the violation:
- If : The call is overpriced relative to the put. Sell the call, buy the put, buy the stock, and borrow . Lock in a risk-free profit. At expiration, your obligations net to zero, but you started with cash in your pocket.
- If : The put is overpriced relative to the call. Buy the call, sell the put, short the stock, and invest . Lock in a risk-free profit. Again, your positions cancel at expiration, but you began with a positive cash flow.
Let's verify put-call parity numerically:
import numpy as np
# Market data
S = 100 # Stock price
K = 100 # Strike price
r = 0.05 # Risk-free rate (5%)
T = 0.5 # Time to expiration (6 months)
# Option prices (hypothetical market quotes)
C = 7.97 # Call premium
P = 5.50 # Put premium
# Calculate both sides of put-call parity
left_side = C - P
right_side = S - K * np.exp(-r * T)
# Check for arbitrage
parity_difference = left_side - right_sidePut-Call Parity Check ---------------------------------------- C - P = $7.97 - $5.50 = $2.47 S - K*exp(-rT) = $100.00 - $100.00*exp(-0.05*0.5) = $2.47 Difference: $0.0010 Put-call parity holds (within transaction costs)
In practice, small deviations from put-call parity exist due to transaction costs, bid-ask spreads, and borrowing constraints. Larger deviations indicate either mispricing (an opportunity) or factors not accounted for (dividends, early exercise rights for American options).
Synthetic Positions
Put-call parity enables the creation of synthetic positions, replicating the payoff of one instrument using others. This capability proves invaluable when one instrument is more liquid, cheaper, or easier to trade than another:
- Synthetic long stock: Buy call, sell put (same strike), invest
- Synthetic short stock: Sell call, buy put (same strike), borrow
- Synthetic long call: Buy put, buy stock, borrow
- Synthetic long put: Buy call, short stock, invest
Synthetic positions are useful when one instrument is more liquid, cheaper, or easier to trade than another. For instance, if a stock is hard to borrow for shorting, you might create a synthetic short using options instead.