Technical

Asian Options Pricing: Geometric Formula and Monte Carlo

Price discrete geometric and arithmetic Asian options, derive schedule-aware moments, and implement a verified Kemna-Vorst control variate in Python.

12 min read·

In March 1990 Angelien Kemna and Ton Vorst published A Pricing Method for Options Based on Average Asset Values. Their practical trick still anchors Asian-option Monte Carlo: price the geometric average exactly, then use it to control the arithmetic average that the contract actually pays.

An Asian option is defined by its fixing schedule as much as by strike and expiry. Twelve month-end closes and 252 daily closes are different underlyings. Replacing either with “continuous averaging” without quantifying the error is a model change.

The necessary tools are covered in our Black-Scholes and Monte Carlo guides.

Payoff conventions

At fixing dates 0<t1<⋯<tn≤T0<t_1<\cdots<t_n\leq T, define

Aarith=1n∑i=1nSti,Ageo=exp⁡ ⁣(1n∑i=1nlog⁡Sti).A_{\mathrm{arith}}=\frac1n\sum_{i=1}^{n}S_{t_i}, \qquad A_{\mathrm{geo}}= \exp\!\left(\frac1n\sum_{i=1}^{n}\log S_{t_i}\right).

A fixed-strike average-price call pays (A−K)+(A-K)^+. A floating-strike call pays (ST−A)+(S_T-A)^+. The formulae below concern a fixed-strike call, with equal fixing weights and payment at TT. Unequal weights, delayed payment, caps and currency conversion all change the valuation.

Under risk-neutral geometric Brownian motion,

dStSt=(r−q)dt+σ dWt.\frac{dS_t}{S_t}=(r-q)dt+\sigma\,dW_t.

The arithmetic average is a sum of correlated lognormal variables and is not lognormal. The geometric average is lognormal because its logarithm is a linear combination of jointly Gaussian variables.

Exact geometric price

Let L=log⁡AgeoL=\log A_{\mathrm{geo}}. Its mean and variance are

mL=log⁡S0+(r−q−12σ2)1n∑i=1nti,m_L=\log S_0+ \left(r-q-\frac12\sigma^2\right) \frac1n\sum_{i=1}^{n}t_i, vL=σ2n2∑i=1n∑j=1nmin⁡(ti,tj).v_L=\frac{\sigma^2}{n^2} \sum_{i=1}^{n}\sum_{j=1}^{n}\min(t_i,t_j).

Since Ageo=eLA_{\mathrm{geo}}=e^L,

E[Ageo]=emL+vL/2.\mathbb E[A_{\mathrm{geo}}]=e^{m_L+v_L/2}.

The call price is

Cgeo=e−rT[emL+vL/2N(d1)−KN(d2)],\boxed{ C_{\mathrm{geo}} =e^{-rT} \left[ e^{m_L+v_L/2}N(d_1)-KN(d_2) \right] },

where

d1=mL−log⁡K+vLvL,d2=d1−vL.d_1=\frac{m_L-\log K+v_L}{\sqrt{v_L}}, \qquad d_2=d_1-\sqrt{v_L}.

This schedule-level form is safer than memorising an “effective maturity”. For equally spaced ti=iT/nt_i=iT/n,

1n∑iti=T(n+1)2n,vL=σ2T(n+1)(2n+1)6n2.\frac1n\sum_i t_i=\frac{T(n+1)}{2n}, \qquad v_L=\sigma^2T\frac{(n+1)(2n+1)}{6n^2}.

If one writes vL=σG2Tv_L=\sigma_G^2T, the matching cost of carry is

bG=(r−q−12σ2)n+12n+12σG2.b_G= \left(r-q-\frac12\sigma^2\right)\frac{n+1}{2n} +\frac12\sigma_G^2.

Using the continuous-average expression bG=(r−q−σ2/6)/2b_G=(r-q-\sigma^2/6)/2 with a finite nn is inconsistent. It is only the n→∞n\to\infty limit.

Arithmetic moments

Moment matching gives a fast approximation and a useful Monte Carlo check. For the discrete schedule,

M1=E[Aarith]=S0n∑ie(r−q)ti,M_1=\mathbb E[A_{\mathrm{arith}}] =\frac{S_0}{n}\sum_i e^{(r-q)t_i}, M2=E[Aarith2]=S02n2∑i∑je(r−q)(ti+tj)+σ2min⁡(ti,tj).M_2=\mathbb E[A_{\mathrm{arith}}^2] =\frac{S_0^2}{n^2} \sum_i\sum_j e^{(r-q)(t_i+t_j)+\sigma^2\min(t_i,t_j)}.

Fit a lognormal variable with

vA=log⁡ ⁣(M2M12),mA=log⁡M1−12vA,v_A=\log\!\left(\frac{M_2}{M_1^2}\right), \qquad m_A=\log M_1-\frac12v_A,

then use the same lognormal call formula with (mA,vA)(m_A,v_A). Turnbull and Wakeman's 1991 algorithm applies this idea to continuous arithmetic averages with accrued-average adjustments.

Moment matching is an approximation, not a bound. Its error depends on strike, fixing pattern, volatility and elapsed averaging. A blanket “within 1%” or “within 2%” claim is not defensible without a stated parameter region and benchmark.

Kemna-Vorst control variate

On each simulated path, form discounted arithmetic and geometric payoffs XX and YY. Since E[Y]=Cgeo\mathbb E[Y]=C_{\mathrm{geo}} is known, use

Xcv=X−β(Y−Cgeo),β∗=Cov⁡(X,Y)Var⁡(Y).X_{\mathrm{cv}}=X-\beta(Y-C_{\mathrm{geo}}), \qquad \beta^*=\frac{\operatorname{Cov}(X,Y)} {\operatorname{Var}(Y)}.

The estimator remains unbiased if β\beta is fixed independently; estimating it on the same large simulation introduces only a small finite-sample effect. For exact error accounting, estimate β\beta on a pilot sample and price on fresh paths.

import numpy as np from scipy.stats import norm def geometric_asian_call(S0, K, T, r, q, vol, times): t = np.asarray(times, dtype=float) if t.size == 0 or np.any(np.diff(t) <= 0) or t[0] <= 0 or t[-1] > T: raise ValueError("Fixing times must increase in (0, T]") mean = np.log(S0) + (r - q - 0.5*vol**2)*t.mean() var = vol**2 * np.minimum.outer(t, t).mean() if var == 0: return np.exp(-r*T) * max(np.exp(mean) - K, 0.0) root_var = np.sqrt(var) d1 = (mean - np.log(K) + var) / root_var expected_average = np.exp(mean + 0.5*var) return np.exp(-r*T) * (expected_average*norm.cdf(d1) - K*norm.cdf(d1 - root_var)) def arithmetic_asian_mc(S0, K, T, r, q, vol, times, n_paths=1_000_000, seed=42): t = np.asarray(times, dtype=float) if t.size == 0 or np.any(np.diff(t) <= 0) or t[0] <= 0 or t[-1] > T: raise ValueError("Fixing times must increase in (0, T]") dt = np.diff(np.r_[0.0, t]) rng = np.random.default_rng(seed) z = rng.standard_normal((n_paths, len(t))) dx = (r - q - 0.5*vol**2)*dt + vol*np.sqrt(dt)*z log_paths = np.log(S0) + np.cumsum(dx, axis=1) arithmetic = np.exp(log_paths).mean(axis=1) geometric = np.exp(log_paths.mean(axis=1)) x = np.exp(-r*T) * np.maximum(arithmetic - K, 0.0) y = np.exp(-r*T) * np.maximum(geometric - K, 0.0) geo_price = geometric_asian_call(S0, K, T, r, q, vol, t) var_y = np.var(y, ddof=1) beta = np.cov(x, y, ddof=1)[0, 1] / var_y if var_y > 0 else 0.0 adjusted = x - beta*(y - geo_price) return adjusted.mean(), adjusted.std(ddof=1)/np.sqrt(n_paths), beta

The vectorised version is convenient for monthly fixings. One million paths with 252 daily fixings needs several gigabytes once paths and work arrays are included; process paths in batches and accumulate means, variances and covariances in production.

For S0=K=100S_0=K=100, T=1T=1, r=5%r=5\%, q=0q=0, σ=20%\sigma=20\% and monthly fixings ti=i/12t_i=i/12, the exact geometric call is 5.940205.94020. With one million paths and seed 42:

  • plain arithmetic Monte Carlo gives 6.160036.16003 with standard error 0.008520.00852;
  • the control variate gives 6.156286.15628 with standard error 0.0002380.000238;
  • the estimated β\beta is 1.031571.03157.

Here the standard error falls by a factor of about 36.

Contract details that move the price

Past fixings. Suppose ff of nn fixings are known, with sum HH, and m=n−fm=n-f remain. Then

(H+∑j=1mStjn−K)+=mn(1m∑j=1mStj−nK−Hm)+.\left(\frac{H+\sum_{j=1}^{m}S_{t_j}}{n}-K\right)^+ =\frac{m}{n} \left( \frac1m\sum_{j=1}^{m}S_{t_j} -\frac{nK-H}{m} \right)^+.

This adjusted strike can be negative, in which case the payoff has a largely deterministic component. Do not discard that case.

Fixing weights and calendars. Holiday rules, missing-price fallbacks and business-day shifts belong in the schedule. Daily observations are not interchangeable with equally spaced year fractions.

Dividends and forwards. Equity discrete dividends break constant-yield GBM. Commodity Asians require the relevant forward-curve and convenience-yield dynamics, not an equity spot model copied across.

Smile dynamics. The geometric formula is exact only within Black-Scholes. Under local or stochastic volatility, it can still be an effective approximate control, but its expectation is no longer the formula above. Using the wrong control mean creates bias.

Early exercise and barriers. Bermudan Asian exercise needs the running average in the regression state; our Longstaff-Schwartz guide explains why. Barrier Asians generally need path simulation or a specialised PDE.

Vecer's one-dimensional PDE is an important alternative for arithmetic averages and covers continuous and discrete sampling. The transformed state, fixing convention and numerical boundaries still need care.

European comparisons

For the stated one-year example, the corresponding K=100K=100 European call costs 10.450610.4506, while the arithmetic Asian is about 6.15636.1563. Averaging reduces uncertainty here, but fixed-strike, floating-strike, forward-starting and partly fixed contracts do not share one universal percentage discount.

The Greeks are schedule dependent too. Before averaging begins, gamma and vega are often lower than for a matching European. Once fixings accrue, moneyness can become locked in and local sensitivities can change sharply. Finite-difference the complete contract, including past fixings and forward curve, rather than applying a fixed vega ratio.

Frequently Asked Questions

What is an Asian option?

It is an option whose payoff depends on an arithmetic or geometric average of specified underlying fixings. The schedule and weighting convention are contractual inputs.

Which Asian option has an exact Black-Scholes price?

A geometric-average option does, because the logarithm of its average is Gaussian. The formula must use the actual fixing times.

Why is an arithmetic Asian harder to price?

Its average is a sum of correlated lognormal prices, whose distribution is not lognormal. Monte Carlo, PDE methods or approximations are therefore needed.

What does the Kemna-Vorst control variate do?

It subtracts simulation error in the highly correlated geometric payoff and adds back that payoff's known exact price, often reducing variance sharply.

Can continuous averaging replace daily fixings?

Only as an approximation. The discrete schedule has different first and second moments, and the difference is largest with few fixings or a short averaging window.

Which sources are authoritative?

Use Kemna and Vorst's 1990 paper, Turnbull and Wakeman's 1991 paper and Vecer's PDE paper. The average is simple. The contract around it rarely is.

Skip the £25k programme - try the alternative

Master's programmes are slow and expensive. Quantt is a self-paced alternative. Start free with a real lesson and interview practice, then unlock 50+ courses and your personalised plan.

Free to start · No credit card required