tf_quant_finance.models.heston.approximations.asian_option_price

Last updated: 2023-03-16.

tf_quant_finance.models.heston.approximations.asian_option_price#

View source

Computes the Heston price for a batch of asian options.

tf_quant_finance.models.heston.approximations.asian_option_price(
    *, variances, mean_reversion, theta, volvol, rho, strikes, expiries, spots=None,
    forwards=None, sampling_times=None, past_fixings=None, discount_rates=None,
    dividend_rates=None, discount_factors=None, is_call_options=None,
    averaging_type=tf_quant_finance.black_scholes.AveragingType.GEOMETRIC,
    averaging_frequency=tf_quant_finance.black_scholes.AveragingFrequency.DISCRETE,
    integration_method=None, dtype=None, name=None, **kwargs
)

Discrete and continuous geometric asian options can be priced using a semi-analytical expression in the Heston model.

Example#

  # Price a batch of seasoned discrete geometric asians in Heston model
  # This example reproduces some prices from the reference paper
  variances = 0.09
  mean_reversion = 1.15
  volvol = 0.39
  theta = 0.0348
  rho = -0.64
  spots = 100.0
  strikes = [90.0, 100.0, 110.0]
  discount_rates = 0.05

  T = 0.5
  expiries = T
  sampling_times = np.linspace(1/365, T, 182)[:, np.newaxis]

  computed_prices_asians = asian_option_price(
    variances=variances,
    mean_reversion=mean_reversion,
    theta=theta,
    volvol=volvol,
    rho=rho,
    strikes=strikes,
    expiries=expiries,
    spots=spots,
    sampling_times=sampling_times,
    discount_rates=discount_rates
  )
  # Expected print output of computed prices:
  # [[11.884178 ], [ 5.080889 ], [ 1.3527349]]

References:#

[1] B. Kim, J. Kim, J. Kim & I. S. Wee, “A Recursive Method for Discretely Monitored Geometric Asian Option Prices”, Bull. Korean Math. Soc. 53, 733-749 (2016)

Args:#

  • variances: Real Tensor of any shape compatible with a batch_shape and and any real dtype. The initial value of the variance.

  • mean_reversion: A real Tensor of the same dtype and compatible shape as variances. Corresponds to the mean reversion rate.

  • theta: A real Tensor of the same dtype and compatible shape as variances. Corresponds to the long run price variance.

  • volvol: A real Tensor of the same dtype and compatible shape as variances. Corresponds to the volatility of the volatility.

  • rho: A real Tensor of the same dtype and compatible shape as variances. Corresponds to the correlation between dW_dW_{V}`.

  • strikes: A real Tensor of the same dtype and compatible shape as variances. The strikes of the options to be priced.

  • expiries: A real Tensor of same dtype and compatible shape as variances. The expiry of each option. The units should be such that expiry * volatility**2 is dimensionless.

  • spots: A real Tensor of any shape that broadcasts to the shape of the variances. The current spot price of the underlying. Either this argument or the forwards (but not both) must be supplied.

  • forwards: A real Tensor of any shape that broadcasts to the shape of variances. The forwards to maturity. Either this argument or the spots must be supplied but both must not be supplied.

  • sampling_times: A real Tensor of same dtype as expiries and shape [n] + batch_shape where n is the number of sampling times for the asian options Default value: None, which will raise an error for discrete sampling asian options

  • past_fixings: A real Tensor of same dtype as spots or forwards and shape [n] + batch_shape where n is the number of past fixings that have already been observed Default value: None, equivalent to no past fixings (ie. unseasoned)

  • discount_rates: An optional real Tensor of same dtype as the variances and of the shape that broadcasts with variances. If not None, discount factors are calculated as e^(-rT), where r are the discount rates, or risk free rates. At most one of discount_rates and discount_factors can be supplied. Default value: None, equivalent to r = 0 and discount factors = 1 when discount_factors also not given.

  • dividend_rates: An optional real Tensor of same dtype as the variances and of the shape that broadcasts with variances. Default value: None, equivalent to q = 0.

  • discount_factors: An optional real Tensor of same dtype as the variances. If not None, these are the discount factors to expiry (i.e. e^(-rT)). Mutually exclusive with discount_rates. If neither is given, no discounting is applied (i.e. the undiscounted option price is returned). If spots is supplied and discount_factors is not None then this is also used to compute the forwards to expiry. At most one of discount_rates and discount_factors can be supplied. Default value: None, which maps to e^(-rT) calculated from discount_rates.

  • is_call_options: A boolean Tensor of a shape compatible with variances. Indicates whether the option is a call (if True) or a put (if False). If not supplied, call options are assumed.

  • averaging_type: Enum value of AveragingType to select the averaging method for the payoff calculation Default value: AveragingType.GEOMETRIC

  • averaging_frequency: Enum value of AveragingFrequency to select the averaging type for the payoff calculation (discrete vs continuous) Default value: AveragingFrequency.DISCRETE

  • integration_method: An instance of math.integration.IntegrationMethod. Default value: None which maps to Gaussian quadrature.

  • dtype: Optional tf.DType. If supplied, the dtype to be used for conversion of any supplied non-Tensor arguments to Tensor. Default value: None which maps to the default dtype inferred by TensorFlow.

  • name: str. The name for the ops created by this function. Default value: None which is mapped to the default name asian_option_price.

  • **kwargs: Additional parameters for the underlying integration method. If not supplied, uses bounds lower=1e-9, upper=100.

Returns:#

  • option_prices: A Tensor of the same shape as strikes. The Heston price of the options.

Raises:#

  • ValueError: If both forwards and spots are supplied or if neither is supplied.

  • ValueError: If both discount_rates and discount_factors is supplied.

  • ValueError: If option is arithmetic.

  • NotImplementedError: if option is continuous averaging.

  • NotImplementedError: if any of the Heston model parameters are of type PiecewiseConstantFunc.