Quant Memo
Core

Garman-Kohlhagen FX Option Model

An FX rate isn't one asset earning one rate of return — it's two currencies, each earning interest on its own, and an FX option has to pay the carry on both sides at once.

Prerequisites: The Black-Scholes Model, FX Forwards and Forward Points, Covered Interest Parity

A stock pays no interest just for existing (dividends aside), so Black-Scholes only has to discount the option's payoff at one rate, rr. A currency is different: holding euros earns the euro interest rate, and holding dollars earns the dollar interest rate, simultaneously. An option to exchange one for the other has to account for both rates at once — the interest you're implicitly earning by holding the currency you own, and the interest you're implicitly forgoing by not holding the one you'd receive.

Two savings accounts, not one

Imagine you're comparing two savings accounts in two different currencies, and someone offers you the right to swap balances between them on a future date. What that right is worth depends on how much interest each account pays in the meantime — not just the exchange rate between them. Garman and Kohlhagen simply took Black-Scholes and gave the "dividend yield" slot a real, permanent job: the foreign interest rate, rfr_f, standing in for the interest the euro side keeps earning while you hold the option instead of the currency itself.

C=SerfTN(d1)KerdTN(d2),d1=ln(S/K)+(rdrf+12σ2)TσTC = S\,e^{-r_f T}\,N(d_1) - K\,e^{-r_d T}\,N(d_2), \qquad d_1 = \frac{\ln(S/K) + (r_d - r_f + \tfrac12\sigma^2)T}{\sigma\sqrt{T}}

In plain English: SS is the spot exchange rate (say, dollars per euro), rdr_d is the domestic (dollar) rate, rfr_f is the foreign (euro) rate, and everything else is ordinary Black-Scholes with rfr_f doing the job a dividend yield qq would do — discounting the "asset" leg because holding the option instead of the actual euros forgoes euro interest.

Worked example 1: pricing a EUR/USD call. S=1.10S=1.10 ($1.10 per €1), K=1.10K=1.10, rd=5%r_d=5\% (USD rate), rf=2%r_f=2\% (EUR rate), σ=10%\sigma=10\%, T=0.5T=0.5. Then ln(S/K)=0\ln(S/K)=0, and (rdrf+12σ2)T=(0.050.02+0.005)×0.5=0.0175(r_d-r_f+\tfrac12\sigma^2)T = (0.05-0.02+0.005)\times0.5 = 0.0175. With σT=0.10×0.7071=0.0707\sigma\sqrt{T}=0.10\times0.7071=0.0707, d1=0.0175/0.0707=0.2475d_1=0.0175/0.0707=0.2475, d2=0.24750.0707=0.1768d_2=0.2475-0.0707=0.1768. Using N(0.2475)0.5977N(0.2475)\approx0.5977 and N(0.1768)0.5702N(0.1768)\approx0.5702: C=1.10e0.01(0.5977)1.10e0.025(0.5702)=1.10(0.99)(0.5977)1.10(0.9753)(0.5702)=0.65110.6119=0.0392C = 1.10\,e^{-0.01}(0.5977) - 1.10\,e^{-0.025}(0.5702) = 1.10(0.99)(0.5977) - 1.10(0.9753)(0.5702) = 0.6511 - 0.6119 = 0.0392, i.e. $0.0392 per euro of notional.

Payoff explorer
−$8$0$1$1break 1strikeprice at expiry →
At price $1.1payoff $0profit −$0max loss $0

Worked example 2: checking it with put-call parity. For FX, Put-Call Parity reads CP=SerfTKerdTC - P = S e^{-r_f T} - K e^{-r_d T}. Plugging in the same numbers: SerfT=1.10×0.9753=1.0728S e^{-r_f T} = 1.10 \times 0.9753 = 1.0728, and KerdT=1.10×0.99=1.089K e^{-r_d T} = 1.10 \times 0.99 = 1.089, so CP=1.07281.089=0.0162C-P = 1.0728 - 1.089 = -0.0162. With C=0.0392C=0.0392 from above, the matching put must be P=0.0392+0.0162=0.0554P = 0.0392 + 0.0162 = 0.0554, i.e. $0.0554. Notice the put is worth more than the call here even though both are struck at the money — because the dollar rate exceeds the euro rate, the market expects the euro to drift down against the dollar under the risk-neutral measure, tilting value toward the put.

domestic rate $r_d$ foreign rate $r_f$ Garman-Kohlhagen price
The strike leg is discounted by the domestic rate, the spot leg by the foreign rate — the option is priced from two independent carry costs, not one.

What this means in practice

Every FX option desk quotes in delta and volatility rather than strike, but underneath, every one of those quotes runs through this two-rate discounting. When a central bank moves rates, FX option prices shift even if spot and volatility don't, purely through rdr_d or rfr_f changing — a risk that's easy to overlook if you think of an FX option as "just Black-Scholes on an exchange rate."

Mixing up which currency is domestic and which is foreign flips the sign of the rate differential and silently produces a wrong price with the wrong skew direction. Always fix the quoting convention first (e.g., USD per EUR means EUR is the "asset," domestic rdr_d is the USD rate) before plugging numbers in — the formula doesn't know or check for you.

An FX option needs two interest rates, not one, because both currencies earn carry simultaneously — the foreign rate plays the role a dividend yield plays for a stock, discounting the asset leg instead of just the payoff.

Related concepts

Practice in interviews

Further reading

  • Garman & Kohlhagen (1983), Foreign Currency Option Values
  • Hull, Options, Futures, and Other Derivatives (Ch. 17)
ShareTwitterLinkedIn