Skip to content

CFA Level II Exam · Valuation of Contingent Claims

Put-Call Parity and No-Arbitrage Relationships for CFA Level II

Updated 7 October 2026 · Fact-checked

Put-call parity says a call plus the present value of the strike equals a put plus the underlying: c + X/(1+r)^T = p + S0. If the two sides differ, an arbitrage exists. To solve, rearrange for the missing piece, compare it with the market price, then buy the cheap side and sell the expensive side.

Understand Put-Call Parity and No-Arbitrage Relationships

A European call and put with the same strike X and expiry T on the same underlying are linked by a no-arbitrage rule. Two portfolios give the same payoff at expiry, so they must cost the same today.

The first portfolio is a fiduciary call: a call plus a zero-coupon bond that pays X at expiry. The second is a protective put: a put plus the underlying. At expiry both are worth the larger of the underlying price and X. So c + X/(1+r)^T = p + S0, where the underlying pays no income.

Rearrange this and you get synthetic positions. A call equals a long put plus the long underlying plus borrowing PV(X), which is a short zero-coupon bond. A put equals a call plus a bond minus the underlying. The underlying equals call minus put plus bond. A bond equals put plus underlying minus call. Each synthetic has the same payoff as the real instrument, so it must have the same price.

Forward parity replaces the spot price with the forward price. Buying the underlying today is equivalent to agreeing to buy it at F0(T) and holding the PV of F0(T) in cash. So c + PV(X) = p + PV(F0(T)), which gives c − p = PV(F0(T) − X). The same form works for options on futures and on bonds. For a bond, use the full bond price less the PV of coupons to expiry, or the forward price of the bond. If the underlying pays income, subtract its PV from S0. If it has storage costs, add their PV.

If the equation fails, you have an arbitrage. Sell the expensive side, buy the cheap side, and lock in a profit today with no net payoff at expiry. In the exam, the vignette gives the prices and the rate. You pick the right form, and your job is to find the mispriced piece and its direction.

Key formulas to remember

Put-call parity (no income on underlying)
c + X ÷ (1+r)^T = p + S0
European options, same strike and expiry. Left side is the fiduciary call. Right side is the protective put.
Put-call parity with income or costs
c + X ÷ (1+r)^T = p + S0 − PV(income) + PV(storage costs)
Income such as dividends or coupons is deducted from S0. Discount income and costs at the risk-free rate to option expiry.
Put-call forward parity
c + X ÷ (1+r)^T = p + F0(T) ÷ (1+r)^T, so c − p = [F0(T) − X] ÷ (1+r)^T
F0(T) is the forward price for delivery at option expiry. This form handles income automatically because the income is in F0.
Options on futures
c + X ÷ (1+r)^T = p + f0(T) ÷ (1+r)^T
Use the futures price f0(T) in the same form. Valid when the futures option expires with the futures contract.
Synthetic positions
c = p + S0 − X ÷ (1+r)^T; p = c − S0 + X ÷ (1+r)^T; S0 = c − p + X ÷ (1+r)^T; bond = p + S0 − c
Signs show long or short. A negative term means a short position, or borrowing for the bond.
Options on bonds
c + X ÷ (1+r)^T = p + B0 − PV(coupons)
B0 is the full (dirty) bond price, and PV(coupons) is computed to the option expiry date. Alternatively, use the forward price of the bond in forward parity.

How to solve Put-Call Parity and No-Arbitrage Relationships questions

Use this method for any parity or arbitrage question in an item set.

  1. 1Check the conditions. The options must be European, with the same strike, expiry and underlying. Note any dividends, coupons or storage costs.
  2. 2Choose the form. Use spot parity if you are given S0. Use forward parity if you are given F0(T) or a futures price.
  3. 3Compute PV(X) using the rate and the time to expiry in years. Check whether the rate is annual, discrete or continuous, as stated.
  4. 4Rearrange to the unknown, or compute both sides: fiduciary call versus protective put.
  5. 5Compare with market prices. The side with the lower cost is cheap. The side with the higher cost is expensive.
  6. 6Build the arbitrage. Buy the cheap side, sell the expensive side. Use synthetic components if only one real instrument is mispriced.
  7. 7Compute the profit as the price difference today. At expiry the net payoff is zero, so the gain is locked in. Check the sign and the units.

Quickest way: Compare the two sides and read the arbitrage from the gap

When to use it: Use when the vignette gives market prices for the call, put and underlying and asks whether an arbitrage exists or what the fair price is.

  1. Write c − p on one side and S0 − PV(X) on the other (or PV(F0 − X) for forward parity).
  2. Compute both numbers. If they are equal, there is no arbitrage.
  3. If c − p is too high relative to S0 − PV(X), sell the call, buy the put, buy the underlying and borrow PV(X). If it is too low, do the reverse.
  4. Profit today is the size of the gap, per share. Multiply by the number of units if asked.
  5. For a fair put or call price, solve for it directly and do not build the trade.

Common mistakes in Put-Call Parity and No-Arbitrage Relationships

  • Using X instead of PV(X) in the parity equation.

    The payoff diagram uses X, so students forget that a bond paying X at expiry is worth less than X today.

    Fix: Always discount the strike for the time to expiry before using the equation.

  • Forgetting to deduct the PV of dividends or coupons from S0.

    The basic formula appears with no income, so students apply it blindly.

    Fix: Scan the vignette for dividends, coupons or storage costs. If any, adjust S0, or use forward parity where F0 already includes them.

  • Getting the direction of the arbitrage wrong.

    Students find the gap but mix up which side is expensive.

    Fix: Compute the synthetic price of the mispriced instrument. If the market price is lower, buy it and sell the synthetic. If higher, sell it and buy the synthetic.

  • Using the wrong time or rate convention.

    Options expire in months, and rates may be quoted as annual discrete or continuous.

    Fix: Convert months to years. Use (1+r)^T for discrete rates unless the question says continuous.

  • Applying parity to American options.

    Parity is taught beside option prices without the condition being stated.

    Fix: Remember that the equality holds exactly for European options. For American options only inequalities apply.

  • Mixing up F0(T) with the futures price or with the spot price.

    Vignettes use similar notation for forwards, futures and spot.

    Fix: Read the label in the exhibit. Use F0(T) for forward parity and f0(T) for options on futures, and discount to today.

Worked examples

Example 1

A stock trades at ₹50 (treat as 50 currency units). A six-month European call with strike 50 costs 5.00. The annual risk-free rate is 4%, compounded annually. The stock pays no dividends. (1) What is the no-arbitrage price of the six-month European put with strike 50? (2) The put actually trades at 3.60. What trade earns an arbitrage, and what is the profit per share?

Show the solution
  1. PV(X) = 50 ÷ 1.04^0.5 = 50 ÷ 1.0198 = 49.029.
  2. Rearrange parity: p = c − S0 + PV(X) = 5.00 − 50 + 49.029 = 4.029.
  3. So the no-arbitrage put price is about 4.03.
  4. The market put at 3.60 is below 4.03, so the put is cheap.
  5. Buy the put at 3.60. Sell the synthetic put, which means sell the call, buy the stock and borrow PV(X) = 49.029.
  6. Cash received today from the synthetic: 5.00 − 50 + 49.029 = 4.029. Cost of the put is 3.60. Profit = 4.029 − 3.60 = 0.429.
  7. At expiry the positions offset, so the profit is locked in.

Answer: (1) Fair put price ≈ 4.03. (2) Buy the put, sell the call, buy the stock and borrow 49.03 for six months. Profit ≈ 0.43 per share today.

Example 2

A stock has a one-year forward price of 102. A one-year European call and put both have strike 100. The annual risk-free rate is 5%, compounded annually. The call is priced at 8.00. (1) What is the no-arbitrage put price? (2) What is the implied spot price if the stock pays no dividends? (3) The put trades at 6.50. What is the arbitrage trade and profit?

Show the solution
  1. Forward parity: c − p = [F0(T) − X] ÷ (1+r)^T = (102 − 100) ÷ 1.05 = 1.9048.
  2. Put price: p = 8.00 − 1.9048 = 6.0952, about 6.10.
  3. With no dividends, S0 = F0 ÷ (1+r) = 102 ÷ 1.05 = 97.1429.
  4. Check with spot parity: S0 − PV(X) = 97.1429 − 95.2381 = 1.9048. It matches.
  5. The put trades at 6.50, above 6.0952, so the put is expensive.
  6. Sell the put and buy the call. Their net cost is 8.00 − 6.50 = 1.50. Sell a forward at 102.
  7. At expiry the call minus put pays S_T − 100. The short forward pays 102 − S_T. The total is a certain 2.
  8. PV of 2 is 1.9048. Cost today is 1.50. Profit = 1.9048 − 1.50 = 0.4048.

Answer: (1) Put ≈ 6.10. (2) S0 ≈ 97.14. (3) Sell the put, buy the call and sell the forward. Profit ≈ 0.40 today per share.

Exam tips

  • Look for the data first: the vignette will list the spot or forward price, strike, rate, time and any income. Underline the income because it changes the formula.
  • Questions often ask which instrument is mispriced. Compute the synthetic price for each, then compare with the market price.
  • Check European versus American. Parity as an equality needs European options.
  • If the vignette gives a forward price, use forward parity. It is quicker and avoids dividend adjustments.
  • Keep four decimals in PV(X) and round only at the end. Answer options can be close.

Put-Call Parity and No-Arbitrage Relationships in other exams

The same ground in other exams, if you are preparing for more than one or want another angle on it.

Put-Call Parity and No-Arbitrage Relationships: frequently asked questions

What is put-call parity in CFA Level II?

It is the no-arbitrage link between a European call, a European put, the underlying and a risk-free bond with the same strike and expiry. A fiduciary call must cost the same as a protective put. If not, an arbitrage exists.

How do I find an arbitrage using put-call parity?

Compute the parity gap, or the synthetic price of one instrument. Compare it with its market price. Buy the cheaper side and sell the more expensive side, and the difference is your profit today.

What is the difference between put-call parity and put-call forward parity?

Spot parity uses the current price of the underlying, so income must be adjusted. Forward parity uses the forward price F0(T), which already reflects income and carry costs. It gives c − p = PV(F0(T) − X).

How do I build a synthetic put or call?

Rearrange parity. A synthetic put is a long call, a short underlying and a long bond paying X. A synthetic call is a long put, a long underlying and borrowing PV(X), which is a short zero-coupon bond. Match the signs of each term in the rearranged equation.