Option Replication Using Put–Call Parity: Explains The Roots of Put–Call Parity and Intuitive No-Arbitrage Logic with clear explanations, key formulas, and worked examples, plus practice questions with explanations for CFA Level 1.
At its core, put–call parity describes a relationship between the price of a European call (C), the price of a European put (P), the price of the underlying asset (S₀), and a discounted strike price (K × e^(-rT))—where r is the continuously compounded risk-free rate and T is time to maturity. The standard formula we see in textbooks is:
This formula basically says that if you take a call and subtract a put (both on the same underlying with the same strike and same expiration), that’s equivalent in value to buying the underlying asset now (S₀) and financing it with a short position in a zero-coupon bond equal to K e^(-rT) (i.e., the present value of the strike price).
Informally, imagine you’re buying one call, selling one put, and simultaneously short-selling a zero-coupon bond (and using that money to buy the underlying). Or if that’s too mind-boggling, try to think of it as: “Pay the underlying’s price and cover the cost by borrowing an amount that will grow to K at maturity.” The difference between what you pay for the call less what you collect on the put should match the difference between the stock’s current price and the bond’s present value. If not, you’d have a free lunch (arbitrage scenario), which in efficient markets shouldn’t persist.
Let’s break it down in a more intuitive way:
If the left side of the equation (call minus put) were bigger than S₀ - K e^(-rT), you could set up a series of trades—buy the cheaper side, sell the more expensive side—and (in an ideal frictionless world) lock in a riskless profit. Conversely, if it were smaller, you’d reverse your position. Because nobody likes to leave free money on the table, market participants would jump in, driving prices back in line.
In practice, transaction costs, bid-ask spreads, and other market frictions may reduce or even eliminate some of these obvious arbitrage trades. But the principle is the same—if mispricing is large enough to overcome those frictions, some keen arbitrageur will jump in and make it vanish.
Maybe you’re wondering: “So how exactly do we replicate a call or put just using the other pieces?” The easiest approach is to solve the put–call parity equation for whichever piece you want to isolate.
To replicate a call (C), rearrange the formula:
C = P + S₀ - K e^(-rT).
To replicate a put (P), rearrange the formula:
P = C - S₀ + K e^(-rT).
Now, these expressions tell you how to get the payoff structure of a call or a put by combining the other assets. Let’s say you want a synthetic call. You could buy a put, buy the underlying S₀, and short a zero-coupon bond with face value K. The outcome at maturity will match that of a standard, plain-vanilla European call option.
One little side note: this also underpins a neat approach to option trading. Instead of just buying or selling calls or puts outright, a trader might prefer to set up synthetic positions if the cost is cheaper or if there is greater liquidity in the underlying or bond markets. For instance, if put options are relatively cheap or if the bond is trading at a slight discount, a trader might replicate a synthetic call and hope to beat the direct purchase of the real call.
Now, let’s see how the conversation changes when dealing with forward contracts. Sometimes we don’t buy the asset spot; we sign an agreement to buy it at a future date for a certain price Fᵀ (the forward price). If we have calls and puts on a forward (rather than the spot asset), the parity relationship shifts slightly:
Here, F^T is the forward price agreed upon today for maturity T. Notice that, on the right side, we simply have the difference between the forward price and the strike price, both discounted back to the present. The logic is directly analogous: the difference between a call on the forward and a put on the forward is the same as the difference between the forward price and the strike, all in discounted terms. If there is any abnormal gap, an arbitrage strategy would form a synthetic equivalent and pocket free money.
I recall an instance—just in a hypothetical sense, so not a personal trade—where someone noticed that calls on a certain index seemed “rich” compared to the corresponding puts. If you’re observing a mismatch, you can typically do the following:
As you hold this position, you check the final payouts at expiration and see if, net of all initial and final cash flows, you end up with a riskless gain. If the cost of setting this up is zero or negative (meaning you get paid at the start) and your payoff at maturity is never negative, you’ve discovered an arbitrage. Such trades don’t typically last very long in actively traded markets.
While we are focusing on a derivatives concept here, it’s worth noting that some knowledge from chapters on:
…all come in handy. If you’re fuzzy on discounting or wondered how we got that e^(-rT) factor, definitely check out the relevant info on discount factors in the Quantitative Methods chapters.
Let’s lay out a numerical scenario to put the formula to work. Suppose:
First, let’s compute K e^(-rT). We have T = 1, r = 0.05, so:
Now, compute the left side of put–call parity:
Check the right side:
Hmm, we get 5.50 on one side and about 0.12 on the other. That’s a huge discrepancy! This suggests a mispricing scenario. According to the standard parity relationship, the difference should be more or less the same (if no arbitrage opportunities existed). Are we missing something? Possibly implied dividends or the fact that this stock might be paying a large dividend. Or it might suggest an arbitrage if we verify the presence (or absence) of dividends.
If the stock pays no dividend, indeed, there is a suspected mispricing. With such large mispricing in real markets, it’s typically explained by: (1) the stock pays a big dividend, or (2) the call is priced with some big implied volatility difference, or (3) there’s a big market friction. In a frictionless world with no dividends, that difference spells out a big time arbitrage.
It can be pretty fun (yep, I said “fun”—I might be a finance nerd) to draw diagrams. Let’s do a quick payoff structure comparison at maturity for a call and put. Below is a simplified mermaid diagram that outlines the conceptual payoff of a call (C) and a put (P) at maturity, ignoring cost:
graph LR
A["Underlying Price < K"] --> B["Put is in-the-money <br/> Call is out-of-the-money"]
A --> C["Payoff(P) = K - Underlying Price <br/> Payoff(C) = 0"]
D["Underlying Price > K"] --> E["Call is in-the-money <br/> Put is out-of-the-money"]
D --> F["Payoff(C) = Underlying Price - K <br/> Payoff(P) = 0"]
It’s a rough schematic: for underlying prices below K, the put has value at maturity, while the call does not. For prices above K, the call has value, while the put doesn’t. The put–call parity states that, once you factor in initial costs, the net difference in their values has to match S₀ - K e^(-rT). It’s basically an identity—almost like a seesaw.
Let’s say we want to “create” a European call synthetically, without actually buying a call from an exchange. The formula:
is the blueprint. That is, we can purchase a put, buy the underlying stock itself, and short a zero-coupon bond. The net cost at initiation will (or should) equal the price of an actual call. At maturity, we end up with the same payoff as if we’d purchased a call directly.
Hence, if you see that actual calls in the market are more expensive than your synthetic approach, you could just replicate them cheaply and sell the overpriced calls. That’s arbitrage 101. The same logic applies if you’re looking to replicate a put from calls, or replicate the underlying from calls and puts, and so on.
Consider a scenario where the synthetic call is cheaper than the real call. The flow of an arbitrage strategy might be:
flowchart LR
A["Notice: Synthetic call < Actual call"] --> B["Buy the Synthetic call (Buy put + Stock, Short bond)"]
B --> C["Sell (Write) the Expensive call in market"]
C --> D["Collect difference in premium"]
D --> E["At expiry: Offsetting payoffs replicate each other"]
Basically, you buy the synthetic (because it’s cheaper) and sell the real call. If everything plays out per put–call parity, you lock in an immediate profit with no net risk at maturity. If reality deviates, the discrepancy between synthetic and real call gets corrected by arbitrage traders.
Perhaps you’re now thinking, “All right, I get the formula, but how did it come about historically?” Some of it traces back to Bachelier’s early finance math, but Merton and others in the academic community built upon these ideas in formal option pricing theory. It’s super cool to see the synergy between pure math, economic theory, and real markets. In my opinion, it’s an exemplar of how finance can be precise and logical, yet also shaped by the real swirl of market participants, dividends, risk, and sentiment.
Put–call parity is a gem in derivatives theory. It elegantly ensures that calls, puts, bonds, and the underlying asset remain fairly valued relative to each other (assuming no dividends and no market frictions for the classic formula). Adjustments for dividends and forward prices are straightforward once you understand the underlying concept.
When you next see a call or a put quoted on a stock, maybe you’ll reflect on this relationship. There’s a hidden chain linking that call and that put together, whether you see it or not. Price them incorrectly, and someone can set up a no-risk profit. That’s the beauty—and the necessity—of put–call parity: it keeps the market in balance.
If you want to explore more advanced topics like American-style options, early exercise, or how put–call parity modifies for underlying assets that generate yields (like currencies, or stocks with dividends), definitely dig into chapters 8.1 through 8.8 in this text (on derivative instrument features, forward, futures, and swaps) and cross-reference with the advanced material in Hull’s textbooks. It’s quite an adventure!
And that’s basically the story of put–call parity and its role in option replication. If this was your first exposure, I hope the examples—plus a little bit of that “Oh wow!” moment—help it stick in your mind.
Important Notice: FinancialAnalystGuide.com provides supplemental CFA study materials, including mock exams, sample exam questions, and other practice resources to aid your exam preparation. These resources are not affiliated with or endorsed by the CFA Institute. CFA® and Chartered Financial Analyst® are registered trademarks owned exclusively by CFA Institute. Our content is independent, and we do not guarantee exam success. CFA Institute does not endorse, promote, or warrant the accuracy or quality of our products.