Class AsianOption

java.lang.Object
net.finmath.functions.AsianOption

public final class AsianOption extends Object
Utility class collecting analytical or semi-analytical pricing formulas for Asian options.

Included formulas:

  • Continuous geometric-average price Asian option (Black-Scholes exact formula)
  • Discrete geometric-average price Asian option (Black-Scholes exact formula)
  • Discrete geometric-average strike Asian option (Black-Scholes exact formula)
  • Continuous arithmetic-average price Asian option, Levy approximation
  • Discrete arithmetic-average price Asian option, Turnbull-Wakeman approximation
Author:
Alessandro Gnoatto
  • Method Summary

    Modifier and Type
    Method
    Description
    static double
    blackPrice(CallOrPut optionType, double forward, double strike, double stdDev, double discountFactor)
    Black-style price using forward, strike, std-dev and discount factor.
    static double
    priceContinuousArithmeticAveragePriceLevy(CallOrPut optionType, double spot, double strike, double riskFreeRate, double dividendYield, double volatility, double averagingStartTime, double maturity, double currentAverage)
    Levy approximation for a continuous arithmetic-average price Asian option.
    static double
    priceContinuousGeometricAveragePrice(CallOrPut optionType, double spot, double strike, double riskFreeRate, double dividendYield, double volatility, double maturity)
    Exact Black-Scholes price for a continuous geometric-average Asian option.
    static double
    priceDiscreteArithmeticAveragePriceTurnbullWakeman(CallOrPut optionType, double spot, double strike, double riskFreeRate, double dividendYield, double volatility, double exerciseTime, double[] futureFixingTimes, int pastFixings, double runningSum)
    Turnbull-Wakeman approximation for a discrete arithmetic-average price Asian option.
    static double
    priceDiscreteGeometricAveragePrice(CallOrPut optionType, double spot, double strike, double riskFreeRate, double dividendYield, double volatility, double maturity, double[] futureFixingTimes, int pastFixings, double runningProduct)
    Exact Black-Scholes price for a discrete geometric-average price Asian option.
    static double
    priceDiscreteGeometricAverageStrike(CallOrPut optionType, double spot, double riskFreeRate, double dividendYield, double volatility, double residualTime, double[] fixingTimesFromStart, int pastFixings, double runningProduct)
    Exact Black-Scholes price for a discrete geometric-average strike Asian option.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • blackPrice

      public static double blackPrice(CallOrPut optionType, double forward, double strike, double stdDev, double discountFactor)
      Black-style price using forward, strike, std-dev and discount factor.
      Parameters:
      optionType - The value.
      forward - The value.
      strike - The value.
      stdDev - The value.
      discountFactor - The value.
      Returns:
      The value.
    • priceContinuousGeometricAveragePrice

      public static double priceContinuousGeometricAveragePrice(CallOrPut optionType, double spot, double strike, double riskFreeRate, double dividendYield, double volatility, double maturity)
      Exact Black-Scholes price for a continuous geometric-average Asian option.
      Parameters:
      optionType - The value.
      spot - spot S0
      strike - strike K
      riskFreeRate - continuously compounded risk-free rate r
      dividendYield - continuously compounded dividend yield q
      volatility - Black-Scholes volatility sigma
      maturity - maturity T
      Returns:
      The value.
    • priceDiscreteGeometricAveragePrice

      public static double priceDiscreteGeometricAveragePrice(CallOrPut optionType, double spot, double strike, double riskFreeRate, double dividendYield, double volatility, double maturity, double[] futureFixingTimes, int pastFixings, double runningProduct)
      Exact Black-Scholes price for a discrete geometric-average price Asian option.

      This matches the QuantLib analytic discrete geometric average price engine.

      Parameters:
      optionType - The value.
      spot - The value.
      strike - The value.
      riskFreeRate - The value.
      dividendYield - The value.
      volatility - The value.
      maturity - option maturity / exercise time
      futureFixingTimes - strictly non-negative, increasing fixing times (in years from valuation time) for remaining fixings
      pastFixings - number of already observed fixings
      runningProduct - product of already observed fixings; use 1.0 if pastFixings = 0
      Returns:
      The value.
    • priceDiscreteGeometricAverageStrike

      public static double priceDiscreteGeometricAverageStrike(CallOrPut optionType, double spot, double riskFreeRate, double dividendYield, double volatility, double residualTime, double[] fixingTimesFromStart, int pastFixings, double runningProduct)
      Exact Black-Scholes price for a discrete geometric-average strike Asian option.

      This mirrors the QuantLib engine limitation: past fixings are not supported.

      Parameters:
      optionType - The value.
      spot - The value.
      riskFreeRate - The value.
      dividendYield - The value.
      volatility - The value.
      residualTime - time from first fixing date to exercise date
      fixingTimesFromStart - fixing times measured from the first fixing date; normally the first entry is 0.0
      pastFixings - The value.
      runningProduct - product of past fixings; only 1.0 with pastFixings = 0 is supported here
      Returns:
      The value.
    • priceContinuousArithmeticAveragePriceLevy

      public static double priceContinuousArithmeticAveragePriceLevy(CallOrPut optionType, double spot, double strike, double riskFreeRate, double dividendYield, double volatility, double averagingStartTime, double maturity, double currentAverage)
      Levy approximation for a continuous arithmetic-average price Asian option.
      Parameters:
      optionType - The value.
      spot - The value.
      strike - The value.
      riskFreeRate - The value.
      dividendYield - The value.
      volatility - The value.
      averagingStartTime - start of averaging window, measured from valuation time; must satisfy 0 <= averagingStartTime <= maturity
      maturity - maturity / exercise time T2 from valuation
      currentAverage - already accrued arithmetic average if averaging has started; ignored if averagingStartTime == 0
      Returns:
      The value.
    • priceDiscreteArithmeticAveragePriceTurnbullWakeman

      public static double priceDiscreteArithmeticAveragePriceTurnbullWakeman(CallOrPut optionType, double spot, double strike, double riskFreeRate, double dividendYield, double volatility, double exerciseTime, double[] futureFixingTimes, int pastFixings, double runningSum)
      Turnbull-Wakeman approximation for a discrete arithmetic-average price Asian option.
      Parameters:
      optionType - The value.
      spot - The value.
      strike - The value.
      riskFreeRate - The value.
      dividendYield - The value.
      volatility - The value.
      exerciseTime - option maturity / exercise time, typically >= max futureFixingTimes
      futureFixingTimes - remaining fixing times in years from valuation time
      pastFixings - number of already observed fixings
      runningSum - sum of already observed fixings; use 0.0 if pastFixings = 0
      Returns:
      The value.