HACIA UNA PSICOLOGIA SOCIAL SUSTANTIVA
8.1 Las explicaciones en psicología social.
These generic routines can also be used to price other options. Any European option that only depends on the terminal value of the price of the underlying security can be valued. Consider the binary options discussed by e.g. Hull (2006). An cash or nothing call pays a xed amount Q if the price of the asset is above the exercise price at maturity, otherwise nothing. An asset or nothing call pays the price of the asset if the price is above the exercise price at maturity, otherwise nothing. Both of these options are easy to implement using the generic routines above, all that is necesary is to provide the payo functions as shown in C++Code 14.8.
double payo cash or nothing call(const double& S, const double& K){ if (S>=K) return 1;
return 0; };
double payo asset or nothing call(const double& S, const double& K){ if (S>=K) return S;
return 0; };
C++Code 14.8: Payo binary options
Now, many exotic options are not simply functions of the terminal price of the underlying security, but depend on the evolution of the price from now till the terminal date of the option. For example options that depend on the average of the price of the underlying (Asian options). For such cases one will have to simulate the whole path. We will return to these cases in the chapter on pricing of exotic options. Example
Given S = 100, K = 100, r = 0:1, = 0:25, time=1. Use 5000 simulations. Price cash or nothing option with Q = 1.
Price asset or nothing option.
C++program:
double S=100.0; double K=100.0; double r=0.1; double sigma=0.25; double time=1.0; int no sims=5000;
cout << " cash or nothing, Q=1: "
<< derivative price simulate european option generic(S,K,r,sigma,time, payo cash or nothing call, no sims)
<< endl;
cout << " control variate "
<< derivative price simulate european option generic with control variate(S,K,r,sigma,time,
payo cash or nothing call, no sims)
<< endl;
cout << " antithetic variate "
<< derivative price simulate european option generic with antithetic variate(S,K,r,sigma,time,
payo cash or nothing call, no sims)
<< endl;
cout << " asset or nothing: "
<< derivative price simulate european option generic(S,K,r,sigma,time,
payo asset or nothing call, no sims)
<< endl;
cout << " control variate "
<< derivative price simulate european option generic with control variate(S,K,r,sigma,time,
payo asset or nothing call, no sims)
<< endl;
cout << " antithetic variate "
<< derivative price simulate european option generic with antithetic variate(S,K,r,sigma,time,
payo asset or nothing call, no sims)
<< endl;
Output from C++program:
cash or nothing, Q=1: 0.547427 control variate 1.02552 antithetic variate 0.549598 asset or nothing: 70.5292 control variate 69.8451 antithetic variate 70.2205 Exercise 14.1.
Consider the pricing of an European Call option as implemented in code 14.2, and the generic formula for pricing with Monte Carlo for European options that only depend on the terminal value of the underlying security, as implemented in code 14.5.
Note the dierence in the implementation of the lognormal simulation of terminal values. Why can one argue that the rst implementation is more ecient than the other?
14.7 References
Boyle (1977) is a good early source on the use of the Monte Carlo technique for pricing derivatives. Simulation is also covered in Hull (2006).
Chapter 15
Pricing American Options Approximations
Contents
15.1 The Johnson (1983) approximation . . . 153 15.2 An approximation to the American Put due to Geske and Johnson (1984) . . . 156 15.3 A quadratic approximation to American prices due to BaroneAdesi and Whaley. . . 159 15.4 An alternative approximation to american options due to Bjerksund and Stensland (1993) . . . . 162 15.5 Readings . . . 165
There has been developed some useful approximations to various specic options. It is of course Amer- ican options that are approximated. We will look at a number of approximations, both for their intrinsic usefulness, but also as examples of dierent approaches to generating an approximated value. The rst we will look at is the Johnson (1983) approximation to an American put. This is a purely empirical approach to estimating the functional forms, with parameters estimated using regressions. The Geske and Johnson (1984) approach is to view the American option as a the limit of a sequence of Bermudan options with increasing number of exercise dates. The American value is found by interpolating forward the Bermudan values. The Barone-Adesi and Whaley (1987) approximation decomposes the American option into two, the European value, and the early exercise premium. The early exercise premium is relatively small, and is easier to approximate. Finally, the Bjerksund and Stensland (1993) is an example of bounding the option value by nding a lower bound on its value. A typical approach to doing so is to specify some (suboptimal) exercise strategy. As soon as the exercise strategy is known, the option is easily valued.
Approximations are useful, but they should be used with caution. Typically, an approximation works well within a range of parameter values, but can go seriously wrong for some unfortunate combination of parameters. The user is well advised to to consider alternative approximations, and at a minimum use the price of the corresponding European option as a sanity check in the calculations. (In fact, in several of the following routines values are checked against Black Scholes values.)
15.1 The Johnson (1983) approximation
An early attempt at an analytical approximation to the price of an American put is provided by Johnson (1983). Formula 15.1 provides the details, and C++Code 15.1 provides the implementation.
Example
Using the parameters r = 0:125, S = 1:1, X = 1, = 0:5 and time to maturity of one year, calculate the price of an american call using the Johnson (1983) approximation.
P (X) = pXer(T t)+ (1 )p (X) = r(T t) a0r(T t) + a1 l ; where l = ln(S=Sc) ln(X=Sc) Sc= X 1 + m ; where m = b 2(T t) 02(T t) + b1 = 2r= 2
The constants a0, a1, b1 and b2 are constants. Their parameter values are estimated as
a0= 3:9649 a1= 0:032325
b0= 1:040803 b1= 0:00963
S: Current value of underlying security. X: Exercise price of american put. : Volatility of underlying. r: risk freee interest rate. (T t): Time to maturity for option.
Formula 15.1: The functional form of the Johnson (1983) approximation to the value of an American put C++program:
double r=0.125; double S=1.1; double X=1; double sigma=0.5; double time = 1;
cout << " American put price using Johnson approximation = "
<< option price american put approximated johnson(S, X, r, sigma, time) << endl;
Output from C++program:
American put price using Johnson approximation = 0.11582
Barone-Adesi (2005) notes that this approximation is inaccurate outside of the parameter range consid- ered in the paper.
#include <cmath> #include "fin_recipes.h"
double option price american put approximated johnson( const double& S, const double& X, const double& r, const double& sigma, const double& time ){ double sigma sqr=pow(sigma,2);
double a0= 3.9649 ; double a1 = 0.032325; double b0 = 1.040803; double b1 = 0.00963;
double gamma = 2*r/sigma sqr;
double m = (sigma sqr*time)/(b0*sigma sqr*time+b1); double Sc = X * pow (((gamma)/(1+gamma)),m); double l = (log(S/Sc))/(log(X/Sc) );
double alpha = pow( ( (r*time)/(a0*r*time+a1) ), l );
double P = alpha*option price put black scholes(S,X*exp(r*time),r,sigma,time) + (1 alpha)*option price put black scholes(S,X,r,sigma,time);
double p=option price put black scholes(S,X,r,sigma,time); // for safety use the Black Scholes as lower bound return max(p,P);
};