The Analyst's Path

Put-call parity

Put-call parity ties the price of a call to the price of a put with the same strike and expiry: the call minus the put equals the share price minus the present value of the strike, for a share that pays no dividend. It holds because a call plus enough cash to cover the strike pays off the same at expiry as a share plus a put. It needs no pricing model, so market makers check it first, and any gap is a riskless profit.

6 min readPart of Options: Parity, Binomial & BSM + the GreeksOpen in course mode

Advertisement

Here is the entire idea in one sentence, before any algebra: a fiduciary call (a call plus enough cash to cover the strike at expiry) and a protective put (a share plus a put) pay off identically at expiry, so they must cost the same today, or you can build one and sell the other for a riskless profit. Check the payoff claim directly. At expiry T, with stock price S_T:

  • Fiduciary call: hold one call (worth max(S_T-K, 0)) plus K in cash. Total payoff = max(S_T-K, 0) + K = max(S_T, K).
  • Protective put: hold one share (worth S_T) plus one put (worth max(K-S_T, 0)). Total payoff = S_T + max(K-S_T, 0) = max(S_T, K).

Identical, in every state of the world, with no assumption about the stock's distribution at all, this is a model-free result, unlike everything from the binomial tree onward, which is exactly why parity is the first check any market maker runs, before any pricing model is even loaded. Since two portfolios with identical payoffs in every future state must have identical prices today (or an arbitrageur trades one against the other for free money), for a non-dividend-paying underlying:

C + K·e^(−rT) = P + S      i.e.      C − P = S − K·e^(−rT)

Advertisement

Put-call parity with dividends, and when it fails

Two extensions you will use immediately below. For an underlying paying a known continuous dividend yield q (the natural model for a broad index like Nifty 50 or the S&P 500, whose constituent dividends arrive in a steady drip), the S on the right becomes a prepaid forward price S·e^(−qT), buying e^(−qT) units of the index today and letting dividends reinvest leaves you with exactly one unit at T:

C − P = S·e^(−qT) − K·e^(−rT)

For an underlying paying one or more known discrete dividends (the natural model for a single stock), replace S with S − PV(dividends), strip out today's value of what you will not receive as the option holder:

C − P = (S − PV(dividends)) − K·e^(−rT)

What to do when it is violated. If C − P on the exchange is bigger than the formula's right-hand side, the call is rich relative to the put (or the put is cheap): build a conversion (long the stock, long the put, short the call) which replicates a riskless bond paying K at T for less than K·e^(−rT) today, a free profit. If C − P is smaller than the formula's right-hand side, do the mirror image, a reversal, short the stock, long the call, short the put. Worked Examples 1 and 2 execute both directions, in both currencies, with the riskless profit computed in Python and traced back to the exact mispricing.

Put-call-forward parity: the same identity, written on the forward

Spot parity, C − P = S·e^(−qT) − K·e^(−rT), prices the option pair against the stock. There is a second, equivalent way to write it that a derivatives desk uses more often, because desks hold forwards rather than shares, and getting to it takes one substitution.

DV1.01 gives the forward price of a dividend-paying underlying as F₀ = S·e^((r−q)T), so S·e^(−qT) = F₀·e^(−rT). Substitute that into the left-hand identity and the discount factor comes out as a common term:

C − P = (F₀ − K) · e^(−rT)

That single line says something the spot version hides. The difference between a call and a put of the same strike and expiry is the present value of the forward's moneyness, and nothing else. The spot price, the dividend yield and the financing rate have all been absorbed into F₀, which is exactly what you want when the underlying is a commodity with a storage cost, a currency with a foreign interest rate, or an index whose dividend stream you would rather not forecast separately. Price the forward once, and every option pair on it is priced against that one number.

Synthetic forward and implied forward

Two readings follow.

A long call plus a short put of the same strike is a synthetic forward. The combined position pays S_T − K at expiry in every state, which is the payoff of a forward struck at K. It costs (F₀ − K)·e^(−rT) today, which is precisely the value of an off-market forward at rate K in DV1.01's replacement-cost method. The two modules are describing one object. When K = F₀ the pair is free, which is the standard definition of the at-the-money-forward strike and the reason it, rather than the at-the-money-spot strike, is the natural centre of a volatility surface.

The identity is also a quote check that needs no model at all. Given a call, a put and a forward on the same underlying, strike and expiry, compute K + (C − P)·e^(rT) and compare it with the quoted forward. Any gap is a mispricing to be traded or a data error to be found, and no volatility assumption entered the test. The version most often used on a screen is even simpler: at the at-the-money-forward strike, the call and the put must trade at the same price. If they do not, one of the three quotes is stale.

The same substitution runs backwards, which is the more common direction in practice. Options on an index are usually more liquid than the index forward, so desks read the forward out of the option pair, F₀ = K + (C − P)·e^(rT), and use that implied forward to back out the dividend yield the market is actually pricing. That number is frequently better than any published dividend forecast, and Worked Example 9 computes it both ways.

Advertisement

Part of the course

This page is part of Options: Parity, Binomial & BSM + the Greeks (DV1.02), in Phase 12: Finance Plus, AI and the quant-code track. The module's flashcards and its quiz are in the app.