next up previous contents index
Next: An approximation to the Up: Approximations Previous: Approximations   Contents   Index

A quadratic approximation to American prices due to Barone-Adesi and Whaley.

We now discuss an approximation to the option price of an American option on a commodity having a continuous payout, described in Barone-Adesi and Whaley (1987) (BAW). Their solution technique finds an approximate solution to the differential equation

\frac{1}{2}\sigma^2 S^2 V_SS + bSV_S -rV +V_t = 0
\end{displaymath} (7.1)

The case we look at here is an option written on a commodity paying $b$ as a continuous payout. Here $V$ is the (unknown) formula that determines the price of the contingent claim. For an European option this can be explicitly solved, with the adjusted Black Scholes formula as the solution, but for American options, which may be exercised early, there is no known analytical solution.

To do their approximation, BAW decomposes the American price into the European price and the early exercise premium

\begin{displaymath}C(S,T) = c(S,T) + \varepsilon_C(S,T) \end{displaymath}

Here $\varepsilon_C$ is the early exercise premium. This will also have to satisfy the partial differential equation. To come up with an approximation BAW transformed equation (7.1) into one where the terms involving $V_t$ are neglible, removed these, and ended up with a standard linear homeogenous second order equation, which has a known solution.

The functional form of the approximation is

\begin{displaymath}C(S,T) = \left\{
...f} & S<S^* \\
S-X & \textrm{if} & S\ge S^*


\begin{displaymath}M = \frac{2r}{\sigma^2} \end{displaymath}

\begin{displaymath}N = \frac{2b}{\sigma^2} \end{displaymath}

\begin{displaymath}K(T) = 1-e^{-r(T-t)} \end{displaymath}

\begin{displaymath}q_2 = \frac{1}{2}[-(N-1)+\sqrt{(N-1)^2 +\frac{4M}{K}}\end{displaymath}

\begin{displaymath}A_2 = \frac{S^*}{q_2}\left(1-e^{(b-r)(T-t)}N(d_1(S^*))\right)\end{displaymath}

and $S^*$ solves

\begin{displaymath}S^* -X = c(S^*,T)+\frac{S^*}{q_2}\left(1-e^{(b-r)(T-t)}N(d_1(S^*))\right)\end{displaymath}

In implementing this, the only problem is finding the critical value $S^*$.

This is the classical problem of finding a root of the equation


This is solved using Newton's algorithm for finding the root.

We start by finding a first ``seed'' value $S_0$. The next estimate of $S_i$ is found

\begin{displaymath}S_{i+1}= S_i-\frac{g()}{g^\prime} \end{displaymath}

At each step we need to evaluate $g()$ and its derivative $g^\prime()$.

Call option

\begin{displaymath}g(S) = S-X-c(S)-\frac{1}{q_2}S(1-e^{(b-r)(T-t)}N(d_1)\end{displaymath}

\begin{displaymath}g^\prime(S) = (1-\frac{1}{q_2})(1-e^{(b-r)(T-t)}N(d_1))+
\frac{1}{q_2}(e^{(b-r)(T-t)}n(d_1))\frac{1}{\sigma\sqrt{T-t}} \end{displaymath}

where $c(S)$ is the Black Scholes value for commodities.

Similarly, for a put option the approximation is

\begin{displaymath}P(S) =
...xtrm{if} & S>S^* \\
X-S & \textrm{if} & S\le S^*
\end{array} \end{displaymath}

\begin{displaymath}A_1 = -\frac{S^{**}}{q1}(1-e^{(b-r)(T-t)}N(-d_1(S^**)) \end{displaymath}

and we solve for $S^{**}$ again by Newton's procedure, where now

\begin{displaymath}g(S) = X-S-p(S)+\frac{S}{q_1}(1-e^{(b-r)(T-t)}) \end{displaymath}

\begin{displaymath}g^\prime(S) = (\frac{1}{q_1}-1)(1-e^{(b-r)(T-t)}N(-d_1)) +
\frac{1}{q_1}e^{(b-r)(T-t)} \frac{1}{\sigma\sqrt{T-t}}n(-d_1) \end{displaymath}

// file
// author: Bernt Arne Oedegaard
// implements the quadratic approximation of Barone-Adesi and Whaley
// described in Journal of Finance, june 87.

#include <cmath>
#include <algorithm>         
#include "normdist.h"               // normal distribution
#include "fin_algoritms.h"         // define other option pricing formulas

const double ACCURACY=1.0e-6;

double option_price_american_call_approximated_baw( double S,
						    double X, 
						    double r,
						    double b,
						    double sigma,
						    double time) 
    double sigma_sqr = sigma*sigma;
    double time_sqrt = sqrt(time);
    double nn = 2.0*b/sigma_sqr; 
    double m = 2.0*r/sigma_sqr;  
    double K = 1.0-exp(-r*time); 
    double q2 = (-(nn-1)+sqrt(pow((nn-1),2.0)+(4*m/K)))*0.5;

    // seed value from paper
    double q2_inf = 0.5 * ( (-nn-1.0) + sqrt(pow((nn-1),2.0)+4.0*m));
    double S_star_inf = X / (1.0 - 1.0/q2_inf);
    double h2 = -(b*time+2.0*sigma*time_sqrt)*(X/(S_star_inf-X));
    double S_seed = X + (S_star_inf-X)*(1.0-exp(h2));

    int no_iterations=0; // iterate on S to find S_star, using Newton steps
    double Si=S_seed;         
    double g=1;
    double gprime=1.0;
    while ((fabs(g) > ACCURACY) 
	   && (fabs(gprime)>ACCURACY) // to avoid exploding Newton's  
	   && ( no_iterations++<500)
	   && (Si>0.0)) {
	double c  = option_price_european_call_payout(Si,X,r,b,sigma,time);
	double d1 = (log(Si/X)+(b+0.5*sigma_sqr)*time)/(sigma*time_sqrt);
	gprime=( 1.0-1.0/q2)*(1.0-exp((b-r)*time)*N(d1))
    double S_star = 0;
    if (fabs(g)>ACCURACY) { S_star = S_seed; } // did not converge
    else { S_star = Si; };
    double C=0;
    double c  = option_price_european_call_payout(S,X,r,b,sigma,time);
    if (S>=S_star) {
    else {
	double d1 = (log(S_star/X)+(b+0.5*sigma_sqr)*time)/(sigma*time_sqrt);
	double A2 =  (1.0-exp((b-r)*time)*N(d1))* (S_star/q2); 
    return max(C,c); // know value will never be less than BS value

For further details of the Barone Adesi quadratic approximation: Main source is the original paper: Barone-Adesi and Whaley (1987). The approximation is also discussed in section 14A of Hull (1993).

next up previous contents index
Next: An approximation to the Up: Approximations Previous: Approximations   Contents   Index
Bernt Arne Odegaard