Quantitative Finance · CQF Modules 2 & 3

Pricing Where
GBM Breaks

A catalogue of markets where lognormal equity assumptions fail and the models that replace them: Garman-Kohlhagen for FX, Vasicek and Hull-White for rates, the Merton structural model for credit, and the Schwartz mean-reverting model for commodities. The hero shows what mean reversion actually looks like.

The PaperMickias Ambaye · May 2026

Abstract

The Option Pricing Models page assumes a non-dividend-paying equity following geometric Brownian motion. That assumption breaks the moment the underlying is something else: a foreign exchange rate paying foreign interest, an interest rate that must remain mean-reverting to be arbitrage-free, the asset value of a leveraged firm, or a storable commodity. This paper covers the four canonical replacements: the Garman-Kohlhagen (1983) two-rate model for FX, the Vasicek (1977) and Hull-White (1990) short-rate models for interest-rate products, the Merton (1974) structural model for credit, and the Schwartz (1997) one-factor model for commodity spot prices. Sources: CQF JA263.11 [10] for FX, plus the standard short-rate and credit literature [18-21].

Part I · FX, Rates, Credit, Commodities

1.FX: Garman-Kohlhagen

A foreign-exchange rate StS_t behaves like a stock that pays a continuous dividend equal to the foreign risk-free rate rfr_f. Under the domestic risk-neutral measure,

dSt=(rdrf)Stdt+σStdWt.(1)dS_t = (r_d - r_f)\,S_t\,dt + \sigma\,S_t\,dW_t. \quad (1)

Garman and Kohlhagen (1983) [18] solve the corresponding PDE with the same Black-Scholes substitution and obtain

C=SerfTN(d1)KerdTN(d2),d1,2=log(S/K)+(rdrf±12σ2)TσT.(2)C = S\,e^{-r_f T}\,N(d_1) - K\,e^{-r_d T}\,N(d_2), \quad d_{1,2} = \frac{\log(S/K) + (r_d - r_f \pm \tfrac{1}{2}\sigma^2) T}{\sigma\sqrt{T}}. \quad (2)

Two consequences for practice: the FX forward is F=Se(rdrf)TF = S\,e^{(r_d - r_f) T} rather than SerTS\,e^{rT}, so the premium of low-rate currencies over high-rate ones in the forward is the interest-rate parity at work; and the implied volatility surface skews into the higher-yielding currency, because that currency carries the credit-style risk premium of being the funding side of every carry trade.

2.Rates: Vasicek and Hull-White

Stocks can grow without bound; interest rates almost never do. Vasicek (1977) [19] models the short rate as an Ornstein-Uhlenbeck process,

drt=κ(θrt)dt+σdWt,(3)dr_t = \kappa\,(\theta - r_t)\,dt + \sigma\,dW_t, \quad (3)

with long-run mean θ\theta and reversion speed κ\kappa. The zero-coupon bond price is exponential-affine,

P(0,T)=A(T)eB(T)r0,B(T)=1eκTκ,(4)P(0, T) = A(T)\,e^{-B(T)\,r_0},\quad B(T) = \tfrac{1 - e^{-\kappa T}}{\kappa}, \quad (4)

with A(T)A(T) a deterministic function of the four Vasicek parameters (the explicit formula appears in the Python tab). The studio below shows the resulting yield curve y(T)=logP(0,T)/Ty(T) = -\log P(0, T)/T as a function of the four parameters.

Vasicek admits negative rates (which, post-2014, is a feature not a bug for many markets) and is affine, so caps and floors price via Black-76 once the bond-volatility term structure has been backed out. Hull-White (1990) [20] replaces the constant θ\theta with a deterministic time-dependent function θ(t)\theta(t) chosen to exactly fit any initial yield curve, which is what made it the workhorse swaption pricer of the 1990s.

Interactive · Vasicek term structure

Below: drag κ, θ, σ, and r₀ and watch the yield curve respond. r₀ < θ pulls the curve up; r₀ > θ inverts it; σ adds a downward convexity adjustment at long maturities that can produce humped curves from a flat reversion target.

Studio · Vasicek term structure

The yield curve as a function of four parameters

The cards below are the term structure's headline numbers. They move as soon as a slider does: short-end yield, long-end yield, slope, and mean-reversion half-life. The curve in the chart is the same data drawn out across 30 years.

Short y(0.5y)

4.46%

r₀ = 4.50%

Long y(30y)

3.99%

θ = 4.00%

Slope (30y − 6m)

-47 bps

Inverted

Reversion half-life

2.0 y

κ = 0.35

Vasicek parameters

4.50%
0.35
4.00%
1.30%
r₀ > θ: the curve falls back to θ at long horizons.
θ = 4.00%short end y(0.5) = 4.46%T (years)y(T)

Push κ higher and the curve flattens faster onto θ. Push σ higher and the convexity adjustment pulls long yields below θ, generating a humped or even downward-sloping curve from a flat real-world view.

Part II · Credit and commodities

3.Credit: Merton's structural model

Merton (1974) [21] models a firm's asset value VtV_t as GBM, with debt face DD maturing at TT. At maturity the firm defaults iff VT<DV_T < D. Equity holders receive whatever is left after debt, so

ET=max(VTD,0).(5)E_T = \max(V_T - D, 0). \quad (5)

Equity is a European call on firm value with strike equal to the debt face. Today's equity value is therefore

E0=V0N(d1)DerTN(d2),d1=log(V0/D)+(r+12σV2)TσVT.(6)E_0 = V_0\,N(d_1) - D\,e^{-r T}\,N(d_2),\quad d_1 = \frac{\log(V_0/D) + (r + \tfrac{1}{2}\sigma_V^2) T}{\sigma_V\,\sqrt{T}}. \quad (6)

Two outputs come for free: the risk-neutral default probabilityQ(VT<D)=N(d2)\,\mathbb{Q}(V_T < D) = N(-d_2), and the credit spread of the risky debt over the risk-free rate. Since the firm's asset value and asset vol are not directly observable, the practical recipe inverts the Merton identity

σEE=N(d1)σVV,(7)\sigma_E\,E = N(d_1)\,\sigma_V\,V, \quad (7)

jointly with (6) to back out (V,σV)(V, \sigma_V)from the observed market equity and equity volatility. Moody's KMV builds the distance-to-default and expected-default frequency from exactly this construction.

4.Commodities: Schwartz one-factor

Storable commodities have spot prices that mean-revert toward a long-run equilibrium driven by marginal production costs. Schwartz (1997) [22] models the log spot as an Ornstein-Uhlenbeck process,

dlogSt=κ(μlogSt)dt+σdWt,(8)d\log S_t = \kappa\,(\mu^* - \log S_t)\,dt + \sigma\,dW_t, \quad (8)

with risk-neutral mean reversion to μ\mu^*. The futures price is the conditional expectation of the spot, which integrates in closed form,

F(0,T)=exp ⁣[logS0eκT+μ(1eκT)+σ24κ(1e2κT)].(9)F(0, T) = \exp\!\Big[\log S_0\,e^{-\kappa T} + \mu^*(1 - e^{-\kappa T}) + \tfrac{\sigma^2}{4\kappa}(1 - e^{-2\kappa T})\Big]. \quad (9)

Mean reversion makes long-dated futures cluster near eμe^{\mu^*} even when the spot is currently far away, which matches the empirical backwardation and contango patterns of oil and gas markets and which lognormal GBM cannot reproduce. This is precisely the structural feature that the FTR paper in this portfolio adapts to congestion-risk pricing on power grids.

Part III · Conclusion & references

5.Conclusion

The Black-Scholes-Merton closed form is not a universal pricer; it is the special case of a much broader machinery in which the underlying follows GBM and the only risk premium is equity. The four models above are the standard replacements for the markets where that assumption breaks: a second interest rate (FX), mean reversion (rates, commodities), or a structural relationship between equity and debt (credit). All four reduce, at their core, to a Brownian-driven SDE under the appropriate measure plus a pricing PDE or characteristic function whose solution is again analytic or nearly so. The common thread is that the risk-neutral pricing framework survives intact; what changes from market to market is which SDE the underlying obeys and which martingale measure does the pricing.

6.References

  1. [10]Ahmad, R. (2026). CQF Module 3, JA263.11 FX Options. Certificate in Quantitative Finance.
  2. [18]Garman, M. B. & Kohlhagen, S. W. (1983). Foreign Currency Option Values. Journal of International Money and Finance, 2(3), 231-237.
  3. [19]Vasicek, O. (1977). An Equilibrium Characterization of the Term Structure. Journal of Financial Economics, 5(2), 177-188.
  4. [20]Hull, J. & White, A. (1990). Pricing Interest-Rate-Derivative Securities. Review of Financial Studies, 3(4), 573-592.
  5. [21]Merton, R. C. (1974). On the Pricing of Corporate Debt: The Risk Structure of Interest Rates. Journal of Finance, 29(2), 449-470.
  6. [22]Schwartz, E. S. (1997). The Stochastic Behavior of Commodity Prices. Journal of Finance, 52(3), 923-973.

Python code

Copy-pasteable pricers

One self-contained NumPy/SciPy script per market: Garman-Kohlhagen FX, Vasicek rates, Merton credit, Schwartz commodity. The __main__ blocks print the reference outputs discussed in the corresponding section of the paper.

import numpy as np
from scipy.stats import norm
 
 
def garman_kohlhagen_call(S, K, r_d, r_f, sigma, T):
300/85">"""Garman-Kohlhagen (1983) call on a foreign currency.
 
S : spot FX rate (domestic per unit foreign)
K : strike
r_d : domestic risk-free rate (continuously compounded)
r_f : foreign risk-free rate
sigma : FX log-return volatility
T : maturity in years
300/85">"""
d1 = (np.log(S / K) + (r_d - r_f + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
d2 = d1 - sigma * np.sqrt(T)
return S * np.exp(-r_f * T) * norm.cdf(d1) - K * np.exp(-r_d * T) * norm.cdf(d2)
 
 
def garman_kohlhagen_put(S, K, r_d, r_f, sigma, T):
300/85">""300/85">"Put-call parity for FX: derive the put from the call."300/85">""
call = garman_kohlhagen_call(S, K, r_d, r_f, sigma, T)
forward = S * np.exp((r_d - r_f) * T)
return call - np.exp(-r_d * T) * (forward - K)
 
 
if __name__ == 300/85">"__main__":
# EUR/USD with rates differential.
price = garman_kohlhagen_call(S=1.10, K=1.10, r_d=0.045, r_f=0.025, sigma=0.08, T=0.5)
print(f300/85">"EURUSD ATM call (6M): {price:.4f}")
 

Mickias Ambaye · 2026