Class AsianOption
java.lang.Object
com.quantfinlib.pricing.AsianOption
ASIAN (average-price) options — the corporate hedger's option: paying off
on the AVERAGE of n fixings instead of one closing print kills both the
expiry-day manipulation incentive and most of the vol (an average is
smoother than its endpoints), which is why commodity and FX hedging
programs default to them. Two averages, two methods:
- Geometric average — exact. A product of lognormals is
lognormal, so the geometric Asian has a Black-Scholes-style closed
form (Kemna-Vorst 1990, discrete-fixing version). For n fixings
equally spaced at
t_i = i T / n(last fixing AT expiry):E[ln G] = ln S + (r - q - vol^2/2) * T (n+1)/(2n) Var[ln G] = vol^2 * T * (n+1)(2n+1)/(6 n^2)and the price is the Black-76 form on the lognormal G: discountE[G] N(d1) - K N(d2). As n grows, Var goes tovol^2 T / 3— continuous averaging cuts the variance to a THIRD; at n = 1 both moments collapse to the terminal price and the formula IS vanilla Black-Scholes (tested exact). - Arithmetic average — Turnbull-Wakeman (1991) moment matching.
A sum of lognormals is not lognormal and has no closed form; TW
computes the arithmetic average's first two moments EXACTLY under
GBM,
M1 = (S/n) sum_i e^{g t_i} g = r - q M2 = (S/n)^2 sum_i sum_j e^{g(t_i + t_j) + vol^2 min(t_i, t_j)}then prices Black-76 style on the lognormal with those moments (Var[ln A] = ln(M2/M1^2)). The approximation error is the distance of the true density from lognormal — small at practical vols, growing with vol^2 T; the moments themselves are exact. The double sum is O(n^2): fine for real fixing schedules (n ≤ a few hundred), not a Monte Carlo replacement for n in the tens of thousands.
AM-GM guarantees A >= G pathwise, so an arithmetic CALL is
always worth at least the geometric call (tested) — the geometric price
is the standard control variate for Monte Carlo on the arithmetic. Rates
and vol are annualized and continuously compounded; carry is the
dividend/foreign yield exactly as BlackScholes. Fixings strictly
after inception (t_1 = T/n > 0): a seasoned Asian with fixings
already struck is a payoff on the REMAINING average plus a known cash
amount — decompose it before calling. Research lane.
-
Method Summary
Modifier and TypeMethodDescriptionstatic doublearithmeticPrice(BlackScholes.OptionType type, double spot, double strike, double rate, double carry, double vol, double timeYears, int averagingPoints) Arithmetic-average Asian price via Turnbull-Wakeman two-moment lognormal matching (see class doc; O(n^2) in the fixing count).static doublegeometricPrice(BlackScholes.OptionType type, double spot, double strike, double rate, double carry, double vol, double timeYears, int averagingPoints) Exact discrete geometric-average Asian price (Kemna-Vorst).
-
Method Details
-
geometricPrice
public static double geometricPrice(BlackScholes.OptionType type, double spot, double strike, double rate, double carry, double vol, double timeYears, int averagingPoints) Exact discrete geometric-average Asian price (Kemna-Vorst).- Parameters:
averagingPoints- number of equally spaced fixings n ≥ 1 att_i = i T / n; n = 1 is vanilla BS
-
arithmeticPrice
public static double arithmeticPrice(BlackScholes.OptionType type, double spot, double strike, double rate, double carry, double vol, double timeYears, int averagingPoints) Arithmetic-average Asian price via Turnbull-Wakeman two-moment lognormal matching (see class doc; O(n^2) in the fixing count).
-