equity asian option
financepy.products.equity.equity_asian_option
Types
AsianOptionValuationTypes
No description available.
Members
KEMNA_VORST = 1TURNBULL_WAKEMAN = 2CURRAN = 3Class
EquityAsianOption
EquityAsianOption(
start_averaging_dt: Date,
expiry_dt: Date,
strike_price: float,
opt_type: OptionTypes,
num_obs_per_year: int = 100,
) -> None
Inherits from: EquityOption
Class for an Equity Asian Option. This is an option with a final payoff
linked to the averaging of the stock price over some specified period
before the option expires. The valuation is done for both an arithmetic and
a geometric average but the former can only be done either using an
analytical approximation of the arithmetic average distribution or by using
Monte-Carlo simulation.
An Asian option on an arithmetic average and strike K has a payoff
Max(SA(T)-K,0) where SA is the arithmetic average
We define three dates
- Valuation date for which we want the price
- Start Averaging Date for when the averaging starts
- Expiry date for when the payoff is made and the option expires
In the model we have
tv = is the time now
t0 = time to the start averaging date in years
t = time to the expiry date in years
tau = length of averaging period in years at the start of the option
We can be before the start of the averaging period in which case t0 > 0
We can be after the start of the averaging period in which case we set t0=0
and we note that t <= tau
If we are in the averaging period then we need to know the accrued average
I call this AA and the new average is now given by the accrued average
The option payoff is now Max( (AA x (tau-t) + SA(t0) x (t-t0))/tau - K,0)
This simplifies to
(1/tau) * Max( (AA x (tau-t) + - K x tau + SA(t0) x (t-t0)),0)
(1/tau) * Max( (AA x (tau-t) + - K x tau + SA(t0) x (t-t0)),0)
Methods
value
value(
self,
value_dt: Date,
stock_price: float,
discount_curve: DiscountCurve,
dividend_curve: DiscountCurve,
model: Model,
method: AsianOptionValuationTypes = <AsianOptionValuationTypes.CURRAN: 3>,
accrued_average: float = None,
)
Calculate the value of an Asian option using one of the specified
analytical approximations for an average rate option. These are the
three enumerated values in the enum AsianOptionValuationTypes. The
choices of approximation are (i) KEMNA-VORST - a geometric average is
used as in paper by Kenna and Worst (1990), (ii) TURNBULL_WAKEMAN -
this is a value based on the moments (I have discretised it) of the
arithmetic average, and (iii) CURRAN - another approximative approach
by Curran based on conditioning on the geometric mean price. Just
choose the corresponding enumerated value to switch between these
different approaches.
Note that the accrued average is only required if the value date is
inside the averaging period for the option.
value_mc
value_mc(
self,
value_dt: Date,
stock_price: float,
discount_curve: DiscountCurve,
dividend_curve: DiscountCurve,
model: Model,
num_paths: int,
seed: int,
accrued_average: float = None,
) -> MCResult
Monte Carlo valuation of the Asian Average option using standard
Monte Carlo code enhanced by Numba. I have discontinued the use of this
as it is both slow and has limited variance reduction.
value_mc_sobol
value_mc_sobol(
self,
value_dt: Date,
stock_price: float,
discount_curve: DiscountCurve,
dividend_curve: DiscountCurve,
model: Model,
num_paths: int,
seed: int,
accrued_average: float = None,
num_scrambles: int = 8,
) -> MCResult
Randomized Sobol/antithetic Asian option valuation.
Uses independent scrambled Sobol replications to estimate QMC
uncertainty. num_paths must equal 2 * num_scrambles * 2**m
with m >= 1, including antithetic paths. Does not alter the
pseudo-random Monte Carlo methods.
value_mc_fast
value_mc_fast(
self,
value_dt: Date,
stock_price: float,
discount_curve: DiscountCurve,
dividend_curve: DiscountCurve,
model: Model,
num_paths: int,
seed: int,
accrued_average: float = None,
) -> MCResult
Monte Carlo valuation of the Asian Average option. This method uses
a lot of Numpy vectorisation. It is also helped by Numba.
value_mc_fast_cv
value_mc_fast_cv(
self,
value_dt: Date,
stock_price: float,
discount_curve: DiscountCurve,
dividend_curve: DiscountCurve,
model: Model,
num_paths: int,
seed: int,
accrued_average: float = None,
) -> MCResult
Monte Carlo valuation of the Asian Average option using a control
variate method that improves accuracy and reduces the variance of the
price. This uses Numpy and Numba. This is the standard MC pricer.
Generated automatically from the FinancePy source code.
Do not edit this file manually.