Option Pricing with the Heston Model of Stochastic Volatility

Overview

Despite its tremendous success, the Black-Scholes model [2] of option pricing has some well-known deficiencies, perhaps the most important of which is the assumption that the volatility of the return on the underlying asset is constant.  Since option prices in the market are usually quoted in terms of their Black-Scholes implied volatilities, it is easy to observe that this assumption is not borne out by reality; leading to the famous dictum that the implied volatility is “… the wrong number to put in the wrong formula to obtain the right price of plain vanilla options” [11].  The implied volatility of traded options generally varies, both with strike price and with maturity of the option, and since the implied volatility depends on two variables, one often talks of an implied volatility surface.

The question then arises as to how to price options in a way which is consistent with this market-observed variation of implied volatility.  Although it is easy to modify the Black-Scholes model to take into account of the term structure of implied volatilities, the variation with strike price – the so-called volatility smile or skew – cannot be incorporated into the Black-Scholes model.  One of the concepts used to cope with this problem is that of stochastic volatility.  There are various models of stochastic volatility, in particular those due to Hull & White [6], Stein & Stein [12], Hagan et al [4] and, arguably the most popular, Heston [5].

The constant volatility of the Black-Scholes model corresponds to the assumption that the underlying asset follows a lognormal stochastic process.  The basic assumption of stochastic volatility models is that the volatility (or possibly, the variance) of the underlying asset is itself a random variable.  There are two Brownian motions: one for the underlying, and one for the variance; stochastic volatility model are thus two-factor models.  Of course, the two processes are correlated and, at least in the equity world, the correlation is usually taken to be negative: increases/decreases in the asset price tend to be coupled to decreases/increases in the volatility.

Once the variance of the underlying has been made stochastic, closed-form solutions for European call and put options will in general no longer exist.  One of the attractive features of the Heston model, however, is that (quasi-) closed-form solutions do exist for European plain vanilla options.  This feature, in turn, makes calibration of the model feasible.

The implied volatility of such a European option is then the value of the volatility which would have to be used in the Black-Scholes formula, to get that specific price.  By varying the strike price and maturity, one can thus back out the implied volatility surface for the specific set of Heston model parameters under consideration.  One finds that the Heston model gives rise to a wide variety of implied volatility surfaces, many of which capture market-observed behavior very well.

The Heston model has five independent parameters, all of which can be determined by calibrating to the market-observed prices of European options of various strikes and/or maturities.  Once a set of parameters has been determined in this way, one can price other options, say a European option of a different strike, an American option, or a more exotic product. 

The FINCAD functions described here allow the Heston model of stochastic volatility to be calibrated to a set of European options, and for European options to be priced within that model.  They further allow the implied volatility surface for the model to be computed.  The objectives are: fast pricing of European options, necessary for calibration routines; the calibration itself; calculation of the Greeks, including sensitivities to the Heston model parameters; and calculating the implied volatility surface for a given set of such parameters.

Formulas & Technical Details

Basic Theory

The stochastic volatility model introduced by Heston [5] takes the underlying asset price  to follow a standard lognormal process, and the variance  to follow a mean-reverting square root process:

,

where

 and  are two standard Brownian motions which are correlated through ,  being the correlation. 

 and  are respectively the (continuously compounded) risk-free interest rate and dividend yield,

 is the speed of mean reversion,

 is the value of the long-term variance and

 is the volatility of volatility. 

The final parameter needed to specify the model is the initial variance, .  In terms of , a variable which we will use below, the process for the stock price is

.

In general, the price at time  of say, a European call option maturing at time  is given by the discounted expectation value

where  is the probability density function of the underlying logarithmic asset price.

Since analytic forms for such option prices cannot always be derived, it often turns out to be useful to work with the characteristic function

.

This is just the Fourier transform of the probability density function from x-space to u-space.  Since the characteristic function is a martingale, one can prove that it obeys the following equation

.

The solution with the correct boundary conditions is

,

where

 is the forward price and we have defined

where

There is actually a slightly different – and seemingly equivalent – form for the functions  and, the use of which is widespread in the literature.  However, these are complex-valued functions and one has to be careful of branch cuts.  The alternative form crosses the branch cut many times and one has to treat it very carefully [7].  The above form does not suffer from these problems (it never crosses the branch cut [1]) and is thus much easier to deal with.

To price plain vanilla European options, one can use the characteristic function in different ways.  We choose to use the Fast Fourier Transform (FFT) technique of Carr & Madan [3].  The beauty of this technique is that the prices of options with a range of strikes are computed all at once.

Pricing Methodology

By taking the option price to be a function of the log-strike, , Carr & Madan show that [3]

,

Equation 1

where

 and

 is a damping parameter necessary to ensure that the option price as a function of  is integrable.

Actually, Carr & Madan consider only call option prices, for which we need .  On the other hand, it is easy to see that to compute put option prices, we instead need .  Indeed, by analyzing contour integrals, Lee shows [8] that Equation 1 computes the following option prices, depending on the value of :

·         : put option, payoff =

·         : ½-cash secured put option, payoff =

·         : covered call option, payoff =

·         : ½-covered call option, payoff =

·         : call option, payoff =

The cases  are a little delicate since then  blows up.  To deal with this, we use

,

which has a well-defined limit at .

Since we can convert all of the above instruments into either calls or puts, using put-call parity, we are free to use whichever value of  is best for the given set of model parameters.  To determine this, note that

,

where the final step follows from the definition of the characteristic function.

For the damped price to be integrable, we thus need the th moment of the stock price to be finite [3].  Analysis of the moments of the stock price in the Heston model thus leads to various conditions on  which must be satisfied.  The choice of  will affect the error in the resulting price, as described in [1] and [8].  Contrary to much of the literature, the value for any given set of model parameters must be chosen dynamically.  We choose values of  along the lines suggested in [8].

There is a similar story for the binary call and put options, for which Equation 1 still holds, but with  replaced by

where

 for a binary call and

 for a binary put.

The integral in Equation 1 is computed using FFT methods in the following way.  First discretize in -space, fixing the step size, , and the number of steps, , used to compute the integral.  For efficient FFT algorithms, this should be a power of 2: .  (The exponent  is entered by the user in the method_param table.)  Then

,

where .

The next step is to discretize in -space around the (forward) at-the-money strike

,

where

 and

.

The result is

,

where

and the sum can be computed using standard FFT techniques.

The result is a set of option prices for the given number of discrete values of .  Linear interpolation is then used to compute the option price for the required strike value; if the -spacing is very small, this approximation will not introduce substantial errors.  However, for numerical accuracy, one needs  to be small.  But one also wants small , so  must be large.  For this reason, Carr & Madan actually compute the integral using Simpson’s rule to get better accuracy for larger , and this correction is easy to implement.

Calibration Methodology

The Heston model parameters can be determined by calibrating to a market observed implied volatility smile for European options.  The calibration routine takes as its starting point the implied volatilities for a set of such options, with varying strikes and/or maturities.  The volatilities are converted to option prices, and the parameters of the Heston model are chosen so as to best match this set of market data.

All calibration algorithms search a region of parameter space in a more or less intelligent way, by minimizing an error metric.  For a given set of parameters, the prices of the relevant options are computed using the pricing methodology described above.  The error metric is then calculated.  This is just a way to measure the discrepancy between the market data and the option prices predicted by the model with a given set of parameters.  The smaller the error metric, the closer the predicted prices are to the market data.  The next trial set of parameters are then chosen according to how the error metric has changed, and the process begins again.

The calibration function described below takes a set of parameter ranges and a set of initial parameter values.  The routine starts with the set of initial parameters, and searches the region of parameter space specified by the parameter ranges, in order to minimize the error metric.  The user thus has control over what range of parameters to look at for a given set of market data and can also, for example, use a previous set of calibrated parameters as a starting point for a future calibration.

FINCAD provides the choice of three calibration algorithms (Levenberg-Marquardt, downhill simplex and differential evolution) and also the choice of three error metrics (weighted , or a weighted  norm, a weighted  norm and a weighted  norm).  These are all described in detail in the Calibration of Interest Rate Models FINCAD Math Reference document.

In addition to this, different weights can be assigned to each individual option in one of three ways.  The user might want to assign less weight to data for illiquid out-of-the-money options, for example, and more weight to the liquid at-the-money options.  The weights can be chosen in one of three ways, and these are again described in detail in the Calibration of Interest Rate Models FINCAD Math Reference document. They can be chosen to be the vegas of the options (out-of-the-money having less weight than at-the-money options), or be chosen to be constant (all options having the same weight).

Alternatively, the weights can be supplied by the user in the form of implied volatility uncertainties.  The uncertainty in the implied volatility of an individual option is the inverse of the weight (a large/small uncertainty is thus a small/large weight), and a good choice would be to use the bid-ask spread.  This would again attach less weight to illiquid options and more weight to the liquid data, and would usually be the preferred method.

The differential evolution algorithm is most likely to find the best set of parameters for a given set of option prices, but the algorithm can take a significant amount of time to finish its search.  For that reason, the calibration function returns an order-of-magnitude estimate for the length of time it will take.  One recommendation is to use the differential evolution algorithm periodically and, at least if the market data haven’t changed too much, to use the Levenberg-Marquardt algorithm on a more frequent basis.  The results of the differential evolution algorithm can then be used as the set of initial parameter values for the Levenberg-Marquardt routine.

FINCAD Functions

aaCalibrateOptions_Heston (price_u, d_mkt, smile_type, smile_tbl, df_crv_std, df_crv_hld, intrp, param_rng, param_ini, min_method, min_param, error_metric, weighting, table_type)

 

Calibrates the Heston model of stochastic volatility to a given set of quoted market implied volatilities for European call and/or put options.  The implied volatilities are converted to price prior to the calibration.  The calibration can be done with Levenberg-Marquardt, downhill simplex or differential evolution algorithms.

 

aaOption_Heston_eu_p (price_u, payoff_type, strike_tbl, d_exp, d_v, param_tbl, df_crv_std, df_crv_hld, intrp, method, method_param, stat)

Calculates the price and risk statistics of a European plain vanilla call or put option, a standard European option strategy, or a user-defined portfolio of European plain vanilla options, within Heston’s stochastic volatility model.  The function uses quasi-closed-form solutions.

 

aaOption_Heston_payoff_eu_p (price_u, payoff_tbl, d_exp, d_v, param_tbl, df_crv_std, df_crv_hld, intrp, method, method_param, stat)

Calculates the price and risk statistics of an option with a freestyle payoff, within Heston’s stochastic volatility model.  The function uses quasi-closed-form solutions.

 

aaOption_Heston_iv (price_u, TK_tbl, d_v, param_tbl, df_crv_std, df_crv_hld, intrp, method, method_param, stat)

Calculates the implied volatility smile for Heston’s stochastic volatility model.  The function uses quasi-closed-form solutions.

Description of Inputs

aaCalibrateOptions_Heston

Input Argument

Type

Description

price_u

number

current value of the underlying stock

d_mkt

date

market date on which the implied volatility smile is observed

smile_type

number

switch to select the type of smile_tbl given as an input

smile_tbl

table

the market observed implied volatility smile

df_crv_std

table or rate

as above

df_crv_hld

table or rate

as above

intrp

number

as above

param_rng

table

model parameter range table.  This is a 2×5 table specifying the ranges of the 5 Heston model parameters.  The 1st and 2nd rows of the parameter range table are used to specify lower and upper bounds on the parameter values.  If the lower and upper bounds of a parameter have the same value, then the parameter is held fixed at this value during the calibration.

param_ini

table

initial parameter table. This is a 1x5 table which sets the initial parameter values for calibration with the Levenberg-Marquardt or downhill simplex algorithms. The table is ignored if the error minimization method is differential evolution.

min_method

number

error minimization algorithm.

min_param

table

minimization parameter table. This one-row table has at least two columns, the maximum number of iteration steps and the tolerance for the minimization. In the case of differential evolution a fractional number of iteration steps seeds the random number generator with a fixed seed. Three additional columns are optional for differential evolution: The number of population members per parameter (NP), the amplification factor (F), and the crossover probability (CR).

error_metric

number

switch to select the error metric used in the calibration.

weighting

number

switch to select the weighting of market data in the error metric.

table_type

number

switch to select the type of output table.

 

More details on the calibration-specific inputs (param_rng, param_ini, min_method, min_param, error_metric, weighting and table_type) can be found in the Calibration of Interest Rate Models FINCAD Math Reference document.

smile_tbl

The implied volatility smile can be specified in one of two ways (in all cases, the option maturities must be given as dates > d_mkt, or as number of years since d_mkt):

·         if smile_type = strike vs. implied volatility

smile_tbl

maturity

exercise price

implied volatility

uncertainty

where

the   are implied (Black-Scholes) volatilities, as a function of strikes  and

maturities ,and the  are optional volatility uncertainties.

 

·         if smile_type = delta vs. implied volatility

smile_tbl

maturity

delta

implied volatility

uncertainty

where now the volatilities are entered as a function of deltas  and maturities .  Since  for a put and  for a call, the user can enter either call or put deltas (or a mixture), without having to specify which is which.

In both cases, the uncertainty column is optional, as discussed above.

aaOption_Heston_eu_p

Input Argument

Type

Description

price_u

number

current value of the underlying stock

payoff_type

number

switch to select the payoff of the option/strategy

1.       portfolio (user-defined),

2.       vanilla call,

3.       vanilla put,

4.       binary call,

5.       binary put,

6.       call (bull) spread,

7.       put (bear) spread,

8.       risk reversal (collar),

9.       seagull,

10.   straddle,

11.   strangle,

12.   guts,

13.   butterfly,

14.   condor,

15.   iron butterfly,

16.   iron condor,

17.   box,

18.   ratio call spread,

19.   ratio put spread,

20.   synthetic forward,

21.   participating forward (put),

22.   participating forward (call),

23.   call ladder,

24.   put ladder,

25.   call spread vs. put,

26.   put spread vs. call,

27.   straddle vs. call,

28.   straddle vs. put. 

The choice will affect the form of the strike_tbl input.

strike_tbl

table or number

table of strikes to define the option, portfolio or strategy; see below for details

d_exp

date

maturity date of the option

d_v

date

valuation date

param_tbl

table

table of parameters to define the stochastic volatility model; see below for details

df_crv_std

table or rate

risk-free discount factor curve.  The discount factor curve may be input as an N×2 table (column 1 = date, column 2 = discount factor), or as a single cell containing a rate.

If input as a single rate, there are three format choices:

1.       a rate (1×1 table); or

2.       a rate and a rate quotation basis as per Switch 43 (1×2 table); or

3.       a rate, a rate quotation basis, and an accrual method as per Switch 331 (1×3 table).

If the basis or accrual methods are not provided, they are assumed to be annual, actual/365.  An N×2 flat-rate discount factor curve is constructed internally between the value date and the expiry date, using the rate, basis and accrual method.

df_crv_hld

table or rate

dividend discount factor curve.  The discount factor curve may be input as an N×2 table (column 1 = date, column 2 = discount factor), or as a single cell containing a rate.

If input as a single rate, there are three format choices:

1.       a rate (1×1 table); or

2.       a rate and a rate quotation basis as per Switch 43 (1×2 table); or

3.       a rate, a rate quotation basis, and an accrual method as per Switch 331 (1×3 table).

If the basis or accrual methods are not provided, they are assumed to be annual, actual/365.  An N×2 flat-rate discount factor curve is constructed internally between the value date and the expiry date, using the rate, basis and accrual method.

intrp

number

switch to select which interpolation method to use on the discount factor curves (linear, cubic spline, exponential, linear spot rates)

method

number

switch to select which numerical method to use (must be = 1).

method_param

table

table of parameters for the numerical method; see below for details

stat

table or number

switch to select which output the user wants; see Description of Outputs section

aaOption_Heston_payoff_eu_p

Input Argument

Type

Description

price_u

number

current value of the underlying stock

payoff_tbl

table

table defining the payoff profile.  This is an N×2 table (column 1 = underlying, column 2 = payoff) specifying the payoff at various values of the underlying.  A piecewise linear payoff function is constructed internally from this data, so it is important to enter all the points necessary to construct the correct (piecewise linear) payoff.

d_exp

date

maturity date of the option

d_v

date

valuation date

param_tbl

table

table of parameters to define the stochastic volatility model; see below for details

df_crv_std

table or rate

as above

df_crv_hld

table or rate

as above

intrp

number

as above

method

number

switch to select which numerical method to use (must be = 1).

method_param

table

table of parameters for the numerical method; see below for details

stat

table or number

switch to select which output the user wants; see Description of Outputs section

aaOption_Heston_iv

Input Argument

Type

Description

price_u

number

current value of the underlying stock

TK_tbl

table

table of option maturity dates and exercise prices for which to return the implied volatility

d_v

date

valuation date

param_tbl

table

table of parameters to define the stochastic volatility model; see below for details

df_crv_std

table or rate

as above

df_crv_hld

table or rate

as above

intrp

number

as above

method

number

switch to select which numerical method to use (must be = 1).

method_param

table

table of parameters for the numerical method; see below for details

param_tbl

In more detail, the stochastic volatility model in these functions is specified through the param_tbl input.  It must have the following form.

param_tbl

initial volatility

long-term volatility

speed of mean reversion

volatility of volatility

correlation

where

, ,  and  are all  and

.

method_param

The only numerical method currently implemented is the FFT, as described above.  The parameters needed to define this method are specified through the method_param input.  It must have the following form.

method_param

integral step size

exponent

where  is an integer, the number of steps used in the FFT routine being .

strike_tbl

The various options/portfolios/strategies in the function aaOption_Heston_eu_p are specified through the payoff_type and strike_tbl inputs.  The various strategies FINCAD supports are described in [9], where P&L diagrams can also be found; see the Appendix for a breakdown into their constituent plain vanillas.  The strike_tbl should specify the relevant exercise prices, and must take one of the following forms.

·         if payoff_type = portfolio (user-defined), the details of the options in the portfolio must be specified.

strike_tbl

long/short

call/put

strike

1/2

1/2

1/2

Here,  denotes respectively a long/short position in  options, which are either calls (1) or puts (2), with the given strikes.  The individual options must be either all European or all American.

 

·         if payoff_type = vanilla call, vanilla put, straddle or synthetic forward, only a single exercise price must be entered.

strike_tbl

exercise price

 

·         if payoff_type = vanilla call or vanilla put (and if option_style = American), a time-varying exercise price can also be specified.

strike_tbl

effective date

terminating date

exercise price

where

each terminating date must be greater than the corresponding effective date  and

each effective date must be greater than or equal to the previous terminating date

By allowing for gaps in this table, blackout periods are thus allowed (alternatively, a blackout period can be specified by setting ).

 

·         if payoff_type = binary call or binary put, a single exercise price and a cash payout must be specified.

strike_tbl

exercise price

cash payout

The binaries are digital all-or-nothing options, which pay a fixed amount of cash (and can be European or American).

 

·         if payoff_type = participating forward (put) or participating forward (call), a single exercise price and a percentage (the degree of participation) must be specified.

strike_tbl

exercise price

percentage

 

·         if payoff_type = straddle vs. call or straddle vs. put, then two distinct exercise prices must be specified.

strike_tbl

exercise price 1

exercise price 2

 

·         if payoff_type = call (bull) spread, put (bear) spread, risk reversal (collar), strangle, guts, butterfly, condor, box, then two distinct exercise prices must be specified.

strike_tbl

exercise price 1

exercise price 2

where the restriction  applies.

 

·         if payoff_type = call spread vs. put or put spread vs. call, then three distinct exercise prices must be specified.

strike_tbl

exercise price 1

exercise price 2

exercise price 3

where the restriction  applies.

 

·         if payoff_type = seagull, iron butterfly, call ladder, put ladder, then three distinct exercise prices must be specified.

strike_tbl

exercise price 1

exercise price 2

exercise price 3

where the restriction  applies.

 

·         if payoff_type = ratio call spread or ratio put spread, then two exercise prices and two integers must be specified (the integers give the ratio of the spread).

strike_tbl

exercise price 1

exercise price 2

number 1

number 2

where the restrictions  and  apply.

 

·         if payoff_type = iron condor then four distinct exercise prices must be specified.

strike_tbl

strike 1

strike 2

strike 3

strike 4

where the restriction  applies.

payoff_tbl

The function aaOption_Heston_payoff_eu_p allows the user to specify an arbitrary (piecewise linear) payoff function.  This is done through the payoff_tbl input which must take the following form:

payoff_tbl

underlying

payoff

where the payoff  is given for a set of underlying values .  A piecewise linear payoff function is constructed from this data internally, so it is important that the user enter enough points to construct the payoff of interest.  Outside of the range of given underlying values, the payoff is constructed by linear extrapolation from the last two (or first two) points in the payoff_tbl.

 

Description of Outputs

aaCalibrateOptions_Heston

If the table_type input is equal to ‘time estimate for calibration’, the output is a single cell with an order-of-magnitude estimate of the time in seconds required for the calibration.

 

Otherwise, the output is a 1-row table with the following columns:

Col

Output Statistic

Type

Description

1

time

number

time for fit

2

number of internal function calls

number

number of iterations used by the iterative calibration algorithm.

3

calibration converged

number

convergence flag that indicates whether or not the calibration converged on a solution for the model parameters.

4

error metric

number

error metric for the calibrated model parameter values.

5 to 9

model parameters

number/rate

calibrated values of the 5 Heston model parameters.

aaOption_Heston_eu_p, aaOption_Heston_payoff_eu_p

This function outputs the price and risk statistics of the relevant option, strategy or portfolio.

Output Statistics

Type

Description

fair value

number

fair value of the option.

delta

number

rate of change in the fair value of the option per change in the current value of the underlying stock.  This is the derivative of the option price with respect to the current value of the underlying.

gamma

number

rate of change in the value of delta per change in the current value of the underlying stock.  This is the second derivative of the option price with respect to the current value of the underlying.

theta

number

rate of change in the fair value of the option per one day decrease in the option time.  This is the negative of the derivative of the option price with respect to the option time (in years), divided by 365.

sensitivity to initial volatility

number

rate of change in the fair value of the option per 1% change in initial annual volatility.  This is the derivative of the option price with respect to the initial annual volatility, divided by 100.

sensitivity to long-term volatility

number

rate of change in the fair value of the option per 1% change in long-term annual volatility.  This is the derivative of the option price with respect to the long-term annual volatility, divided by 100.

sensitivity to speed of mean reversion

number

rate of change in the fair value of the option per change in the speed of mean reversion.  This is the derivative of the option price with respect to the speed of mean reversion.

sensitivity to volatility of volatility

number

rate of change in the fair value of the option per change in the volatility of volatility.  This is the derivative of the option price with respect to the volatility of volatility.

sensitivity to correlation

number

rate of change in the fair value of the option per change in the correlation.  This is the derivative of the option price with respect to the correlation.

rho of rate

number

rate of change in the fair value of the option per 1% change in the risk-free rate.  This is the derivative of the option price with respect to the risk-free rate, divided by 100.

rho of holding cost

number

rate of change in the fair value of the option per 1% change in the dividend rate.  This is the derivative of the option price with respect to the dividend rate, divided by 100.

aaOption_Heston_iv

This function will output a table of implied volatilities for the strikes and maturities given in the TK_tbl input.  The results can be plotted to give an implied volatility surface.  The output table will be of the following form (the first two columns are just the TK_tbl input):

output_smile_tbl

maturity

exercise price

implied volatility

where the  are implied volatilities for maturity  and exercise price .

 

Examples

Example 1:  Calibration

Today is January 1, 2007.  Suppose we want to use the Heston model to price some exotic option and, to that end, need to calibrate the model to a set of market observed implied volatilities for European options on the S&P 500.  The current underlying price is 1250, the risk-free rate is 5% (annual compounding, actual/365 accrual), and the dividend yield on the S&P 500 is 2% (annual compounding, actual/365 accrual).

Suppose the market observed implied volatilities are given by the following:

smile_tbl

expiry date

strike

volatility

uncertainty

1-Apr-2007

1000

23.000%

2.000%

1-Apr-2007

1100

21.000%

1.000%

1-Apr-2007

1200

19.200%

0.500%

1-Apr-2007

1300

18.700%

1.000%

1-Apr-2007

1400

18.500%

1.500%

1-Jul-2007

1000

22.000%

3.000%

1-Jul-2007

1100

20.700%

2.500%

1-Jul-2007

1200

19.400%

2.000%

1-Jul-2007

1300

18.600%

1.000%

1-Jul-2007

1400

18.400%

2.000%

1-Oct-2007

1000

21.500%

3.500%

1-Oct-2007

1100

20.500%

2.500%

1-Oct-2007

1200

19.500%

2.000%

1-Oct-2007

1300

18.700%

1.000%

1-Oct-2007

1400

18.600%

2.000%

The implied volatilities are the averages of the bid-ask volatilities, and the uncertainties are the bid-ask spreads. 

The model parameter range table is set up as follows:

param_rng

initial volatility

long-term volatility

speed of mean reversion

volatility of volatility

correlation

10.000%

10.000%

0

0

-1

50.000%

50.000%

3

1

0

If using the Levenberg-Marquardt or downhill simplex calibration algorithms, then the initial parameters can be set up such that they are at the midpoints of these intervals:

param_ini

initial volatility

long-term volatility

speed of mean reversion

volatility of volatility

correlation

30.000%

30.000%

1.5

0.5

-0.5

although note that this table is ignored by the differential evolution algorithm.  We choose the  statistic as our error metric with an error tolerance of 0.001. We fix the maximum number of iteration steps at 500:

min_param

max iteration steps

tolerance

500

0.001

We use differential evolution to reduce the possibility of terminating the calibration in a local minimum, though the calibration will then take some time to run.  In this case, the optional parameters in the min_param table can be set by the user, though the default values have been optimized for a wide range of calibration tasks and should not be changed in general.

All inputs to the aaCalibrateOptions_Heston function are summarized below.

aaCalibrateOptions_Heston

Argument

Description

Example Data

Switch

Comments

price_u

underlying price

1250

 

 

d_mkt

market date

1-Jan-2007

 

 

smile_type

type of implied volatility smile table

1

implied volatility vs. strike

 

smile_tbl

implied volatility smile table

see above

 

 

df_crv_std

discount factor curve – risk free

5%

 

annual compounding and actual/365 accrual is assumed

df_crv_hld

discount factor curve – holding cost

2%

 

annual compounding and actual/365 accrual is assumed

intrp

interpolation method

3

exponential

not used for constant rates

param_rng

model parameter range table

see above

 

 

param_ini

initial parameter table

see above

 

not used for differential evolution

min_method

error minimization algorithm

3

differential evolution

 

min_param

minimization parameter table

see above

 

 

error_metric

error metric used in the calibration

1

chi-squared

 

weighting

weighting of market data

1

user input of volatility uncertainties

 

table_type

type of output table

1

time estimate

 

Before the calibration we estimate the required time. In the first call to the function we set the table_type input to ‘time estimate for calibration’. The function output is

time estimate for calibration

8156

given in seconds, or a about 2¼ hours.  Note that this is only an order-of-magnitude, and the calibration will usually take substantially less time to run.

We then run the calibration (we change the table_type input to ‘calibration’).  The results are given below. The fitted values of all parameters are between the lower and upper bounds as specified in the model parameter range table. The convergence flag is 0, which indicates that the calibration converged.  None of the parameter values are close to the initial boundaries in the model parameter range table, which provides further indication that the algorithm found the function minimum in parameter space.  Therefore, this calibration was successful. 

time for fit

no. iter

conv. flag

error metric

initial volatility

long-term volatility

speed of mean reversion

volatility of volatility

correlation

3244.436

405

0

0.148

18.950%

20.575%

2.625

0.487

-0.184

Note that the calibration took a little less than 1 hour.  The other algorithms would take much less time to run.

These parameter values can be input into the Heston model implied volatility function, aaOption_Heston_iv, to verify the quality of the calibration.  As expected, the differences between the model-predicted implied volatilities and the input implied volatilities (column 3) are small, and are well within the uncertainties given in the smile_tbl input above.  The differences do not seem to be biased in the positive or negative direction, again indicating that this is a successful calibration.

market implied volatility (see smile_tbl above)

model-predicted implied volatility using aaOption_Heston_iv

difference between model and market

23.000%

22.873%

-0.127%

21.000%

20.940%

-0.060%

19.200%

19.270%

0.070%

18.700%

18.421%

-0.279%

18.500%

18.660%

0.160%

22.000%

22.132%

0.132%

20.700%

20.532%

-0.168%

19.400%

19.273%

-0.127%

18.600%

18.575%

-0.025%

18.400%

18.542%

0.142%

21.500%

21.630%

0.130%

20.500%

20.355%

-0.145%

19.500%

19.358%

-0.142%

18.700%

18.776%

0.076%

18.600%

18.612%

0.012%

In subsequent calibrations to market data where for example the implied volatilities are updated, we could use the parameter values found in this calibration as initial parameters and carry out the fit with the less time consuming Levenberg-Marquardt algorithm.

 

Example 2:  Pricing a European Call

Today is January 1, 2007.  Consider an at-the-money European call option that matures 6 months from today.  It has an exercise price of $50.  The current underlying price is $50, the risk-free rate is 7.5% (annual compounding, actual/365 accrual), and the dividend rate is 2.5% (annual compounding, actual/365 accrual).

Suppose we want to value the option with the assumption that movements in the underlying asset are described by the Heston model of stochastic volatility, with the following parameters (these could have been found by calibrating the model to market data):

param_tbl

initial volatility

long-term volatility

speed of mean reversion

volatility of volatility

correlation

50%

75%

1

1

-0.5

The most direct valuation is to call aaOption_Heston_p with the following inputs:

aaOption_Heston_p

Argument

Description

Example Data

Switch

Comments

price_u

underlying price

50

 

 

payoff_type

payoff type

2

vanilla call

 

strike_tbl

strike table

50

 

a single strike to define the call

d_exp

expiry date

1-Jul-2007

 

6 months from today

d_v

value date

1-Jan-2007

 

 

param_tbl

Heston model parameters

see above

 

 

df_crv_std

discount factor curve – risk free

7.5%

 

annual compounding and actual/365 accrual is assumed

df_crv_hld

discount factor curve – holding cost

2.5%

 

annual compounding and actual/365 accrual is assumed

intrp

interpolation method

3

exponential

not used for constant rates

method

numerical method

1

Fast Fourier Transform

 

method_param

parameters for the numerical method

see below

 

 

stat

list of statistics

1…11

 

 

The parameters for the Fast Fourier Transform are chosen to be the default values:

method_param

integral step size

exponent

0.03

14

With these inputs, the results are:

Results

Output Statistics

Description

Value

1

fair value

7.821858222

2

delta

0.641513168

3

gamma

0.020845022

4

theta

-0.02419735

5

sensitivity to initial volatility

0.092356488

6

sensitivity to long-term volatility

0.039486822

7

sensitivity to speed of mean reversion

0.80575448

8

sensitivity to volatility of volatility

-0.692758224

9

sensitivity to correlation

0.255113021

10

rho of rate

0.111881181

11

rho of holding cost

-0.155180599

To understand some of the features of the other FINCAD functions described here, and since the call option has a piecewise linear payoff function, we can check the above results by calling the function aaOption_Heston_payoff_eu_p with the following inputs:

aaOption_Heston_payoff_eu_p

Argument

Description

Example Data

Switch

Comments

price_u

underlying price

50

 

 

payoff_tbl

payoff table

see below

 

 

d_exp

expiry date

1-Jul-2007

 

 

d_v

value date

1-Jan-2007

 

6 months from today

param_tbl

Heston model parameters

see above

 

 

df_crv_std

discount factor curve – risk free

7.5%

 

annual compounding and actual/365 accrual is assumed

df_crv_hld

discount factor curve – holding cost

2.5%

 

annual compounding and actual/365 accrual is assumed

intrp

interpolation method

3

exponential

not used for constant rates

method

numerical method

1

Fast Fourier Transform

 

method_param

parameters for the numerical method

see above

 

 

stat

list of statistics

1…11

 

 

To specify the payoff of the European call, we need only three distinct points in the payoff_tbl.  For example:

payoff_tbl

underlying

payoff

20

0

50

0

80

30

The function internally constructs the familiar piecewise linear payoff function from these values displayed in Figure 1:

Figure 1

With these inputs, the results are as for aaOption_Heston_p above.

 

Example 3:  Pricing a European Butterfly

Today is January 1, 2007.  Consider a European butterfly option that matures 3 months from today.  It is built from two long calls with exercise prices of $20 and $30, and two short calls with exercise prices of $25.  The current underlying price is $25, the risk-free rate is 7.5% (annual compounding, actual/365 accrual), and the dividend rate is 2.5% (annual compounding, actual/365 accrual).

Suppose we want to value the option assuming that movements of the underlying asset are described by the Heston model with the same parameters as above.  There are again two ways to do this with the FINCAD functions described above.

The most direct is by calling aaOption_Heston_eu_p with the following inputs:

aaOption_Heston_eu_p

Argument

Description

Example Data

Switch

Comments

price_u

underlying price

25

 

 

payoff_type

payoff type

13

butterfly

 

strike_tbl

strike table

see below

 

two strikes are needed to define the butterfly

d_exp

expiry date

1-Apr-2007

 

3 months from today

d_v

value date

1-Jan-2007

 

 

param_tbl

Heston model parameters

see above

 

 

df_crv_std

discount factor curve – risk free

7.5%

 

annual compounding and actual/365 accrual is assumed

df_crv_hld

discount factor curve – holding cost

2.5%

 

annual compounding and actual/365 accrual is assumed

intrp

interpolation method

3

exponential

not used for constant rates

method

numerical method

1

Fast Fourier Transform

 

method_param

parameters for the numerical method

see above

 

 

stat

list of statistics

1..11

 

 

To specify the payoff of the strategy, we need two exercise prices (those of the long calls) in the strike_tbl:

strike_tbl

exercise price 1

exercise price 2

20

30

To specify the Heston model, we take the same param_tbl as in the example above.

With these inputs, the results are:

Results

Output Statistics

Description

Value

1

fair value

1.470601913

2

delta

-0.058762781

3

gamma

-0.029729461

4

theta

0.008019512

5

sensitivity to initial volatility

-0.02208953

6

sensitivity to long-term volatility

-0.004398855

7

sensitivity to speed of mean reversion

-0.094776047

8

sensitivity to volatility of volatility

0.13369242

9

sensitivity to correlation

0.157724038

10

rho of rate

-0.006742795

11

rho of holding cost

0.003534013

Alternatively, since the payoff of the butterfly strategy is piecewise linear, we can check the above results by calling the function aaOption_Heston_payoff_eu_p with the following inputs:

aaOption_Heston_payoff_eu_p

Argument

Description

Example Data

Switch

Comments

price_u

underlying price

50

 

 

payoff_tbl

payoff table

see below

 

 

d_exp

expiry date

1-Jul-2007

 

 

d_v

value date

1-Jan-2007

 

6 months from today

param_tbl

Heston model parameters

see above

 

 

df_crv_std

discount factor curve – risk free

7.5%

 

annual compounding and actual/365 accrual is assumed

df_crv_hld

discount factor curve – holding cost

2.5%

 

annual compounding and actual/365 accrual is assumed

intrp

interpolation method

3

exponential

not used for constant rates

method

numerical method

1

Fast Fourier Transform

 

method_param

parameters for the numerical method

see above

 

 

stat

list of statistics

1…11

 

 

The following table, for example, specifies the payoff of the European butterfly:

payoff_tbl

underlying

payoff

15

0

20

0

25

5

30

0

45

0

which gives rise to the following piecewise linear payoff function displayed in Figure 2:

Figure 2

With these inputs, the results are as for aaOption_Heston_p above.

 

Example 4:  Implied Volatility Surface for the Heston model

Today is January 1, 2007.  Suppose we have observed the implied volatilities for a range of European options on some underlying asset, with different exercise prices, and maturing every two months for the next year.  We have seen a distinct dependence of volatility on both the strike and maturity of the options.  The current underlying price is $65, the risk-free rate is 7.5% (annual compounding, actual/365 accrual), and the dividend rate is 2.5% (annual compounding, actual/365 accrual).

Suppose we are interested in whether this volatility surface can be reproduced by assuming that the underlying asset undergoes a stochastic volatility process described by the Heston model with the parameters as specified in the param_tbl above.  To this end, we would like to compute the implied volatilities for a range of European options within the Heston model.  We can do this by calling the FINCAD function aaOption_Heston_iv with the following inputs:

aaOption_Heston_iv

Argument

Description

Example Data

Switch

Comments

price_u

underlying price

65

 

 

TK_tbl

expiry dates and exercise prices

see below

 

maturity dates and strikes of the options for which we want the implied volatility

d_v

value date

1-Jan-2007

 

 

param_tbl

Heston model parameters

see above

 

 

df_crv_std

discount factor curve – risk free

7.5%

 

annual compounding and actual/365 accrual is assumed

df_crv_hld

discount factor curve – holding cost

2.5%

 

annual compounding and actual/365 accrual is assumed

intrp

interpolation method

3

exponential

not used for constant rates

method

numerical method

1

Fast Fourier Transform

 

method_param

parameters for the numerical method

see above

 

 

The TK_tbl specifies the maturity dates and exercise prices of the options in question.  Let us assume that this is given by:

TK_tbl

maturity

exercise price

1-Mar-2007

40

1-Mar-2007

45

1-Mar-2007

50

1-Mar-2007

55

1-Mar-2007

60

1-Mar-2007

65

1-Mar-2007

70

1-Mar-2007

75

1-Mar-2007

80

1-May-2007

40

1-May-2007

45

1-May-2007

50

1-May-2007

55

1-May-2007

60

1-May-2007

65

1-May-2007

70

1-May-2007

75

1-May-2007

80

1-Jul-2007

40

1-Jul-2007

45

1-Jul-2007

50

1-Jul-2007

55

1-Jul-2007

60

1-Jul-2007

65

1-Jul-2007

70

1-Jul-2007

75

1-Jul-2007

80

1-Sep-2007

40

1-Sep-2007

45

1-Sep-2007

50

1-Sep-2007

55

1-Sep-2007

60

1-Sep-2007

65

1-Sep-2007

70

1-Sep-2007

75

1-Sep-2007

80

1-Nov-2007

40

1-Nov-2007

45

1-Nov-2007

50

1-Nov-2007

55

1-Nov-2007

60

1-Nov-2007

65

1-Nov-2007

70

1-Nov-2007

75

1-Nov-2007

80

1-Jan-2008

40

1-Jan-2008

45

1-Jan-2008

50

1-Jan-2008

55

1-Jan-2008

60

1-Jan-2008

65

1-Jan-2008

70

1-Jan-2008

75

1-Jan-2008

80

With these inputs, the results are:

Results

maturity

exercise price

implied volatility

1-May-2007

40

62.376%

1-May-2007

45

59.732%

1-May-2007

50

57.267%

1-May-2007

55

54.993%

1-May-2007

60

52.883%

1-May-2007

65

51.002%

1-May-2007

70

49.355%

1-May-2007

75

48.031%

1-May-2007

80

47.029%

1-Jul-2007

40

62.439%

1-Jul-2007

45

59.975%

1-Jul-2007

50

57.714%

1-Jul-2007

55

55.629%

1-Jul-2007

60

53.730%

1-Jul-2007

65

52.023%

1-Jul-2007

70

50.545%

1-Jul-2007

75

49.295%

1-Jul-2007

80

48.311%

1-Sep-2007

40

62.530%

1-Sep-2007

45

60.252%

1-Sep-2007

50

58.172%

1-Sep-2007

55

56.274%

1-Sep-2007

60

54.562%

1-Sep-2007

65

53.036%

1-Sep-2007

70

51.697%

1-Sep-2007

75

50.565%

1-Sep-2007

80

49.625%

1-Nov-2007

40

62.658%

1-Nov-2007

45

60.553%

1-Nov-2007

50

58.647%

1-Nov-2007

55

56.933%

1-Nov-2007

60

55.387%

1-Nov-2007

65

54.012%

1-Nov-2007

70

52.801%

1-Nov-2007

75

51.754%

1-Nov-2007

80

50.865%

1-Jan-2008

40

62.812%

1-Jan-2008

45

60.867%

1-Jan-2008

50

59.122%

1-Jan-2008

55

57.551%

1-Jan-2008

60

56.147%

1-Jan-2008

65

54.891%

1-Jan-2008

70

53.786%

1-Jan-2008

75

52.815%

1-Jan-2008

80

51.979%

 

The Heston model gives rise to an implied volatility surface, which can be visualized by plotting the above results displayed in Figure 3:

 

Figure 3

Appendix A:  Trading Strategies

For further details on these strategies, and for the relevant P&L diagrams, see [9].

The call (bull) spread is a long call with exercise price  and a short call with exercise price .

The put (bear) spread is a short put with exercise price  and a long put with exercise price .

The risk reversal (collar) is a long put with exercise price  and a short call with exercise price .

The seagull is a short put with exercise price , a long put with exercise price  and a short call with exercise price .

The straddle is a long call and a long put, both with exercise price .

The strangle is a long put with exercise price  and a long call with exercise price .

The guts is a long call with exercise price  and a long put with exercise price .

The butterfly is a long call (or put) with exercise price , a long call (or put) with exercise price  and two short calls (or puts) with exercise price  (midway between  and ).  We assume that the American butterfly consists of calls rather than puts.

The condor is a long call (or put) with exercise price , a long call (or put) with exercise price , a short call (or put) with exercise price  and a short call (or put) with exercise price  (so that the exercise prices of the two short options are equally spaced between  and ) .  We assume that the American condor consists of calls rather than puts.

The iron butterfly is a long straddle and a short strangle: a short put with exercise price , a long call and a long put with exercise price  and a short call with exercise price .

The iron condor is a long strangle and a short strangle: a short put with exercise price , a long put with exercise price , a long call with exercise price  and a short call with exercise price .

The box is a long call and a short put with exercise price , and a long put and a short call with exercise price .

The ratio call spread is  short calls with exercise price  and  long calls with exercise price .

The ratio put spread is  long puts with exercise price  and  short puts with exercise price .

The synthetic forward is a long call and a short put, both with exercise price .

The participating forward (put) is a long call and some percentage () of a short put, both with exercise price .

The participating forward (call) is a long put and some percentage () of a short call, both with exercise price .

The call ladder is a long call with exercise price , a short call with exercise price  and a short call with exercise price .

The put ladder is a short put with exercise price , a short put with exercise price  and a long put with exercise price .

The call spread vs. put is a long call with exercise price , a short call with exercise price  and a short put with strike  (usually, but not always ).

The put spread vs. call is a short put with exercise price , a long put with exercise price  and a short call with exercise price  (usually, but not always ).

The straddle vs. call is a long call and a long put with exercise price , and a short call with exercise price  (usually, but not always ).

The straddle vs. put is a long call and a long put with exercise price , and a short put with exercise price  (usually, but not always ).

 

References

[1]          Albrecher, H., Mayer, P., Schoutens, W. and Tistaert, J. (2007) ‘The Little Heston Trap’, Wilmott, January 2007, 83-92.

[2]          Black, F. and Scholes, M. (1973) ‘The Pricing of Options and Corporate Liabilities’, Journal of Political Economy, 81 (3), 637-659.

[3]          Carr, P. and Madan, D. (1998) ‘Option Valuation using the Fast Fourier Transform’, Journal of Computational Finance, 2, 61-73.

[4]          Hagan, P. S., Kumar, D., Lesniewski, A. S. and Woodward, D. E. (2002) ‘Managing smile risk’, Wimott, September 2002, 84-108.

[5]          Heston, S. (1993) ‘A closed-form solution for options with stochastic volatility’, Review of Financial Studies, 6, 327-43.

[6]          Hull, J. and White, A. (1987) ‘The Pricing of Options on Assets with Stochastic Volatilities’, The Journal of Finance, 42, 281-300.

[7]          Kahl, C. and Jäckel, P. (2005) ‘Not-so-complex Logarithms in the Heston Model’, Wilmott, September 2005, 94-103.

[8]          Lee, R. W. (2004) ‘Option Pricing by Transfrom Methods: Extensions, Unification, and Error Control’, Journal of Computational Finance, 7, 51-86.

[9]          LIFFE Management and Administration (2002), LIFFE Options: a guide to trading strategies.  Available on the Internet at http://www.euronext.com/file/view/0,4245,1626_53424_516478967,00.pdf

[10]      Lord, R. and Kahl, C. (2006) ‘Optimal Fourier Inversion in Semi-Analytical Option Pricing’, Tinbergen Institute Discussion Paper No. 2006-066/2.

[11]      Rebonato, R. (1999) Volatility and Correlation in the Pricing of Equity, FX and Interest-Rate Options, Chichester: John Wiley & Sons Ltd.

[12]      Stein, E. M. and Stein, J. C. (1991) ‘Stock Price Distributions with Stochastic Volatility: An Analytic Approach’, The Review of Financial Studies, 4, 727-752.

 

 

Disclaimer

 

With respect to this document, FinancialCAD Corporation (“FINCAD”) makes no warranty either express or implied, including, but not limited to, any implied warranty of merchantability or fitness for a particular purpose. In no event shall FINCAD be liable to anyone for special, collateral, incidental, or consequential damages in connection with or arising out of the use of this document or the information contained in it. This document should not be relied on as a substitute for your own independent research or the advice of your professional financial, accounting or other advisors.

 

This information is subject to change without notice. FINCAD assumes no responsibility for any errors in this document or their consequences and reserves the right to make changes to this document without notice.

 

Copyright

 

Copyright © FinancialCAD Corporation 2008. All rights reserved.