Class AsianOption

java.lang.Object
com.quantfinlib.pricing.AsianOption

public final class AsianOption extends Object
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: discount E[G] N(d1) - K N(d2). As n grows, Var goes to vol^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 Type
    Method
    Description
    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).
    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).

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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 at t_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).