Chapter 4

The Black-Scholes, Practitioner Black-Scholes, and Gram-Charlier Models

INTRODUCTION

In this chapter we review the Black-Scholes option pricing model and present the VBA code to implement it. We do not derive this model nor spend too much time explaining it since so much has been written about it already, in textbooks such as those by Hull (2006), Haug (1998), and Chriss (1997). We review implied volatility and the moneyness and maturity biases that give rise to volatility smiles. We then review the Practitioner Black-Scholes model, which uses the Deterministic Volatility Function of Dumas, Fleming, and Whaley (1998). Finally, we discuss the model of Backus, Foresi, and Wu (2004), which introduces skewness and excess kurtosis into the Black-Scholes model to account for moneyness and maturity biases.

THE BLACK-SCHOLES MODEL

This model hardly needs introduction. It is the most popular option pricing model, due to its simplicity, closed-form solution, and ease of implementation. The Black and Scholes (1973) price at time t for a European call option with maturity at time t + T with strike price K on a stock paying no dividends is

(4.1) 4.1

where

St = time t price of the stock

σ = annual stock return volatility (assumed constant)

r = annual risk-free interest rate

T = time to maturity in years

image

Some authors use the notation image and n(x) = φ(x).

To price a put option, the put-call parity relation can be used, which produces

(4.2) 4.2

or CBS can be substituted into (4.2) to get

image

image The Excel file Chapter4BlackScholes contains VBA code for implementing the Black-Scholes model. The VBA function BS_call() produces the Black-Scholes price of a European call given by Equation (4.1), while function BS_put() uses the put-call parity relationship (4.2) to produce the price of a European put. Both functions require as inputs the spot price of the asset (S), the strike price (K), the risk-free rate of interest (r), the time to maturity (T) and the volatility (σ).

 Function Gauss(X)
  Gauss = Application.NormSDist(X)
 End Function
 
 Function BS_call(S, K, r, T, v)
  d = (Log(S / K) + T * (r + 0.5 * v ^ 2)) / (v * Sqr(T))
  BS_call = S * Gauss(d) - Exp(-r * T) * K * Gauss(d - v * Sqr(T))
 End Function
 
 Function BS_put(S, K, r, T, v)
  BS_put = BS_call(S, K, r, T, v) -S + K * Exp(-r * T)
 End Function

The function Gauss() is used to save space. It replaces the VBA statement Application.NormSDist() with the simpler Gauss() statement whenever cumulative values of the standard normal distribution are needed.

We illustrate these functions in Figure 4.1. Suppose we wish to price a five-month option with strike price $30 on a non-dividend-paying stock with spot price $30 and annual volatility 30 percent, when the risk-free rate is 5 percent. Hence, S = 30, K = 30, r = 0.05, T = 5/12, and σ = 0.3. The cells that contain these inputs have been assigned names for convenience, so in cell E4 we type

FIGURE 4.1 Black-Scholes Price of Calls and Puts

image

image

which produces the Black-Scholes price of the call as $2.612638.

Similarly, the function BS_put() in cell E6 shows that the Black-Scholes price of the put is $1.994104.

Black-Scholes with Dividends

The value of a call option on a dividend-paying stock can be obtained, provided that the current stock price S is assumed to be equal to the sum of all discounted future dividends. For illustration, suppose that a stock pays quarterly dividends, so that in the ith quarter, a dividend in the amount of Di is paid. Suppose also that this dividend is discounted at the risk-free rate ri. The current stock price can therefore be expressed as the discounted dividend stream

(4.3) 4.3

The closer the ex-dividend dates, the more accurately the value of the dividend payments can be predicted. When a stock is purchased, the buyer hopes that future dividends will increase. The same is true for call options: a bet on future dividends is being made. If the call option expires in seven months, the first two dividends will be paid out and the stock price will drop to S*. This price can be expressed as the sum of future dividends starting in seven months,

(4.4) 4.4

image The Black-Scholes formula can be used to price European call options on stocks that pay dividends, simply by using S* in (4.1) instead of S, and keeping all other parameter values the same. This approximation works best for option with short maturities, since dividends are more predictable in the short term. In the more general case wherein dividends are paid at irregular times τi, the discount factors in (4.3) and (4.4) become exp(−ri × τi). The Excel file Chapter4BlackScholesDiv contains the VBA function BS_div_call() to price European call options on a dividend-paying stock.

Function BS_div_call(S, K, r, T, v, Div)
 Divnum = Application.Count(Div) / 3
 PVD = 0
   For i = 1 To Divnum
     PVD = PVD + Div(i, 2) * Exp(-Div(i, 1) * Div(i, 3))
   Next i
 Smod = S - PVD
 BS_div_call = BS_call(Smod, K, r, T, v)
 End Function

The stock price S* is stored in the variable Smod, and the function BS_call() for the Black-Scholes call price defined earlier in this chapter is used, but with the spot price S replaced by S*. The times to ex-dividend dates, dividends, and risk-free rates are stored in the first, second, and third columns of array Div(), respectively.

This reasoning can be extended to American-style options by employing Black’s approximation. Using arbitrage, it can be shown that it is never optimal to exercise prior to maturity an American call option on a stock paying no dividends (Hull, 2006; Chriss, 1997). For a stock paying dividends, it is never optimal to exercise an American call option on the stock anytime other than immediately prior to an ex-dividend date. This implies that we must only verify the value of the call prior to all ex-dividend dates and at maturity, and set the current value of the call to the greatest of these values. This procedure can be implemented by extending the previous algorithm. We have to calculate the value of all the call options expiring at the ex-dividend dates, by modifying the time to maturity and calculating the appropriate adjusted price S*. The function BS_div_amer_call() implements the procedure.

Function BS_div_amer_call(S, K, r, T, v, div)
 Dim allCall() As Double
 divnum = Application.Count(div) / 3
 ReDim allCall(divnum + 1) As Double
   For j = 1 To divnum
     PVD = 0
     For i = 1 To j
       If (i < j) Then
         PVD = PVD + div(i, 2) * Exp(-div(i, 1) * div(i, 3))
       End If
     Next i
     Smod = S - PVD
     allCall(j) = BS_call(Smod, K, r, div(j, 1), v)
   Next j
 allCall(divnum + 1) = BS_div_call(S, K, r, T, v, div)
 BS_div_amer_call = Application.Max(allCall)
 End Function

Figure 4.2 illustrates the use of these functions on a stock with spot price S = $100 and volatility σ = 30 percent, when the strike price is K = $100, the time to maturity is T = 7 months, and the risk-free rate is r = 5 percent. There are two dividends of $2 each (D1 = D2 = 2), paid out quarterly (τ1 = 0.25, τ2 = 0.50) and each dividend is discounted at the rate of five percent (r1 = r2 = 0.05). In cell C12 we type

FIGURE 4.2 Black-Scholes Call Price on a Dividend-Paying Stock

image

image

and obtain the price of a European call as $8.2951. Similarly, the price of an America call appears in cell C14 as $8.508572. In this example, it is optimal to exercise prior to the last dividend date, so the American call price is higher than the European price.

IMPLIED VOLATILITY AND THE DVF

In this section we introduce implied volatilities, which are volatilities extracted from option prices, and the deterministic volatility function (DVF). Implied volatilities differ from realized volatilities, which are volatilities estimated from historical returns. Implied volatilities are often preferred to realized volatilities, since implied volatilities are prospective estimates that reflect future expectations about stock price volatility. Realized volatilities, however, are retrospective estimates that reflect only past stock price volatility. Realized volatilities can be obtained by using simple estimators such as the standard deviation of historical returns, or by applying more sophisticated methods such as an exponential weighted average or the generalized autoregressive conditional heteroskedasticity (GARCH) model. Implied volatilities are obtained by matching a set of market option prices with given strike price and maturity to those produced by an option pricing model using the same strike price and maturity.

Black-Scholes implied volatilities are extracted using the Black-Scholes formula. This must be done numerically because the formula cannot be solved for σ in terms of the other parameters. If σiv denotes the implied volatility, Cobs(K, T) denotes the observed call price with strike price K and time to maturity T, and CBS(σ, K, T) denotes the Black-Scholes price of the call with same strike price and maturity, then σiv is the value of volatility in the Black-Scholes formula such that

image

To find implied volatilities numerically, the objective function f(σ) is often defined by the squared loss function

(4.5) 4.5

Implied volatility is that value of volatility σ = σiv which produces a zero difference between the observed price and the Black-Scholes price

(4.6) 4.6

Squaring the difference ensures that a minimization algorithm such as the Newton-Raphson method does not produce large negative values for fiv) instead of a root. It is possible to use objective functions other than that specified by (4.5). This will become evident in Chapter 10. In that chapter, implied volatilities are treated more thoroughly.

One important feature of Black-Scholes implied volatilities is that they resemble a smile or smirk when plotted against moneyness. The smile is more pronounced for options with short maturities. This smile-shaped pattern, which consistently appears in volatilities extracted from a wide variety of options, has provided evidence against the constant volatility assumption inherent in the Black-Scholes model.

Obtaining Implied Volatility with VBA

image In this section we present VBA code to obtain Black-Scholes implied volatilities from a cross-section of option prices. The Excel file Chapter4IV contains volatilities implied from call options on IBM stock paying no dividends, with strike price ranging from $40 to $115, and maturity of 137 days. The BS_call() function defined earlier in this chapter is used for the Black-Scholes call price, and the NewtRaph() function defined in Chapter 1 is used to find the root of our objective function (4.5). This objective function is defined as the VBA function ImpliedVolatility().

Function ImpliedVolatility(S, K, r, q, T, v, CallPrice)
   ImpliedVolatility = (CallPrice - BS_call(S, K, r, q, T, v)) ^ 2
 End Function

The VBA function NewtRaph() is similar to that defined in Chapter 1, except that it uses the VBA function ImpliedVolatility() as the objective function and uses the Taylor approximation to the derivative.

 Function NewtRaph(S, K, r, q, T, x_guess, CallPrice)
 ' More VBA statements
 fx = Run('ImpliedVolatility', S, K, r, q, T, cur_x, CallPrice)
 cur_x_delta = cur_x - delta_x
 fx_delta = Run('ImpliedVolatility', S, K, r, q, T, cur_x_delta, CallPrice)
 dx = ((fx - fx_delta) / delta_x)
 ' More VBA statements
 End Function

Figure 4.3 illustrates how these functions are used to find implied volatilities from a single call price, from a series of call prices, and to plot an implied volatility smile. In the first case, a spot price of S = 100 (in cell E4), a strike price of K = 100 (cell E5), a risk-free rate of r = 0.03 (cell E6), no dividend yield (q = 0 in cell E7), a time to maturity of 137 days (T = 137/365 or 0.3753 years in cell E8), and a volatility v = 0.6 (cell E9) are used. To obtain the Black-Scholes price in cell E11 we type

FIGURE 4.3 Black-Scholes Implied Volatilities

image

image

which produces a call price of $15.0676. The NewtRaph() function, using a starting value of 0.4 in cell C11, is used to obtain the Black-Scholes implied volatility from the Black-Scholes price. Hence, in cell E12 we type

image

which produces the original volatility of 0.6000, as expected.

To obtain multiple implied volatilities, shown in the right set of columns in Figure 4.3, assume a spot price of S = 88.43 (in cell I1), strike prices ranging from 40 to 115 (cells H7:H22), and the same risk-free rate and dividend yield as in the previous example. The market price of each option is defined as the midpoint between the bid price (column I) and the ask price (column J). In the NewtRaph() function we use the same starting value as in the previous example. Hence, in cell G7 we type

image

which produces the implied volatility of 0.4995 for the option with strike price of K = 40. The formula in cell G7 can then be copied to cells G8:G22, which produces the remaining implied volatilities.

Finally, the plotting wizard can be invoked to produce a graph for the Black-Scholes implied volatility smile, using cells H7:H22 for values of the x-axis, and cells G7:G22 for values of the y-axis.

Deterministic Volatility Functions

The parabolic shape of the volatility smile, and its dependence on moneyness and maturity, has motivated researchers to model implied volatility as a quadratic function of moneyness and maturity. Dumas, Fleming, and Whaley (1998) describe this as the deterministic volatility function (DVF) approach to modeling implied volatility. They consider four specifications for the DVF:

(4.7) 4.7

(4.8) 4.8

(4.9) 4.9

(4.10) 4.10

where

σiv= Black-Scholes implied volatility

K = strike price

T = time to maturity

a0, a1, a2, a3, a4, a5 = model parameters.

Each of these specifications stipulates a different form of the volatility function. Equation (4.7) assumes constant volatility with no dependence on the strike price or the time to maturity, and corresponds to the Black-Scholes model. Equation (4.8) stipulates volatility be a quadratic function of strike price, with no dependence on maturity. Equation (4.9) adds a dependence on maturity, with an interaction between moneyness and maturity contained in its last term. Equation (4.10) allows for the relationship between volatility and maturity to be quadratic also. In each of these models, a threshold of 0.01 is introduced to eliminate possible negative values of fitted volatility. For example, the model being fitted in Equation (4.9) is actually

image

Finally, a fifth model is defined which switches between models (4.8), (4.9), and (4.10) depending on whether the different expiration dates in the cross-section of option prices is one, two or three, respectively. Estimation of model parameters is done by minimizing error sum of squares between observed and fitted option prices.

DVF modeling is useful because it provides estimates of volatility for a combination of moneyness and maturity that is not available in observed option prices. For any such combination, volatility can be estimated from the fitted function. If a set of observed option prices contained a continuum of strike prices and time to maturity, there would be no need for the function. We would simply extract implied volatility from a cross-section of option prices with the strike price and time to maturity we require.

Dumas, Fleming, and Whaley (1998) show that of the five models under consideration, the Black-Scholes model leads to the largest valuation errors, consistent with the notion that volatility is not constant across moneyness and maturity. Most of the improvement over Black-Scholes, however, is from including K, K2, T, and KT into the volatility function. There is little improvement to be gained by introducing T2, squared maturity. This implies that volatility depends on both moneyness and maturity, but that smiles are dependent on moneyness only. The effect of maturity on volatility is linear only. In some cases, only K and K2 are needed. Hence, simple functions of volatility, such as those specified in Equations (4.8) and (4.9), are often sufficient for modeling volatility.

THE PRACTITIONER BLACK-SCHOLES MODEL

This model is referred to as the Practitioner Black-Scholes (PBS) model by Christoffersen and Jacobs (2004a), and as the ad-hoc model by Dumas, Fleming, and Whaley (1998). It constitutes a simple way to price options, based on implied volatilities and the Black-Scholes pricing formula. The assumption of constant volatility in the Black-Scholes model is circumvented by using volatility that is not constant, but rather depends on moneyness and maturity.

Implementing the Practitioner Black-Scholes Model

Implementing the PBS model is straightforward, since all that is required is a series of Black-Scholes implied volatilities on which to run multiple regression under ordinary least squares (OLS). This model can be summarized in four steps:

1. Use a cross-section of option prices with a variety of strike price and time to maturity to obtain a set of Black-Scholes implied volatilities.
2. Choose a deterministic volatility function and estimate its parameters.
3. For a given strike price and maturity, obtain the volatility as the fitted value of the volatility function in step 2.
4. Obtain the option price using the Black-Scholes formula, using the fitted volatility from step 3 and the same strike price and maturity.

While this model provides a rudimentary method of obtaining option prices, its performance in terms of pricing errors is remarkably effective. Christoffersen and Jacobs (2004a) compare the pricing errors of two option pricing models: the PBS model and the Heston (1993) model. When a different loss function is used for the estimation of model parameters and for the evaluation of the model in terms of pricing errors, the Heston (1993) model prevails. When the same loss function is used for estimation and evaluation, however, the PBS model prevails. Christoffersen and Jacobs (2004a) argue that using the same loss functions for estimation and evaluation is preferable. Furthermore, when evaluating the performance of different models, the same loss function should be used across models, which will avoid making unfair comparisons. According to the results of their paper, the PBS model is preferable to the Heston (1993) model for pricing options. The fact that the PBS model is easy to implement makes it all the more attractive. In-sample and out-of-sample loss function estimation will be presented in Chapter 9.

image The Excel file Chapter4PBS contains the PBS model to obtain fitted implied volatilities through the most general regression given by Equation (4.10). It uses the VBA functions BS_call(), which produces the Black-Scholes price for a call option, PBSparams(), which returns the six coefficients of the regression (4.10) estimated by OLS, and PBSvol(), which uses the estimated coefficients to produce fitted volatility for a given strike price and maturity. The function PBSparams() requires as inputs a vector of implied volatilities, impV, of strike prices, K, and of maturities, T. It returns the six regression coefficients a0 through a5 defined in Equation (4.10) and estimated by OLS using the VBA function OLSregress() introduced in Chapter 1.

Function PBSparams(impV, K, T)
 n = Application.Count(impV)
 Dim RHS() As Double
 ReDim RHS(n, 6) As Double
 For cnt = 1 To n
 RHS(cnt, 1) = 1
 RHS(cnt, 2) = K(cnt)
   RHS(cnt, 3) = K(cnt) ^ 2
   RHS(cnt, 4) = T(cnt) / 365
   RHS(cnt, 5) = (T(cnt) / 365) ^ 2
   RHS(cnt, 6) = K(cnt) * T(cnt) / 365
 Next cnt
   betas = OLSregress(impV, RHS)
   PBSparams = betas
 End Function

The function PBSvol() requires as inputs the six regression coefficients, a strike price, and a maturity, and returns a fitted volatility based on (4.10) or a value of 0.01 if the fitted volatility is negative.

Function PBSvol(p, K, T)
 PBSvol = p(1) + p(2)*K + p(3)*K^2 + p(4)*T/365
        + p(5)*(T/365)^ 2 + p(6)*K*T/365
 If PBSvol < 0 Then PBSvol = 0.01
 End Function

image Figure 4.4 illustrates how these functions are used to construct PBS fitted volatilities, using December 15, 2005, call options on IBM non-dividend-paying stock with spot price of $83.53 (in cell I4), strike price ranging from $50 to $120 in increments of $5 (cells A5:A47), and maturity ranging from 37 to 309 days (cells D5:D47). Figure 4.4 is from the Excel file Chapter4PBS, and has been truncated at 32 rows to conserve space.

FIGURE 4.4 Practitioner Black-Scholes Model

image

The first step is to obtain a set of Black-Scholes implied volatilities. These appear in cells E5:E47. Figure 4.4 uses a starting value of 0.7 for implied volatility (cell I7), along with a risk-free rate of 0.03 (cell I5), and the midpoint of the call option bid and ask price (cells B5:B47 and C5:C47, respectively) for the market price. Hence, in cell E5 we type

image

to produce the Black-Scholes implied volatility of 0.6218. The formula in cell E5 is then copied to cells E6:E47 to produce the remaining implied volatilities.

The second step is to select a deterministic volatility function. The VBA function PBSparams() uses the most general function given in (4.10) and requires as inputs implied volatilities, strike prices, and times to maturity. Hence, in cell I10 we type

image

and copy down to cells I11:I15, which produces estimates of the six parameters of (4.10), given by â0 = 1.23951, â1 = −0.01598, â2 = 0.00006, â3 = −0.78490, â4 = 0.21275, and â5 = 0.00552.

The third step is to obtain fitted volatilities for each strike price and time to maturity. The VBA function PBSvol() uses the six parameters estimated by PBSparams() to produce a fitted volatility from (4.10) using a given strike price and maturity. Hence, in cell F5 we type

image

to obtain a fitted volatility of 0.5319 for a strike price of K = 50 and a time to maturity of T = 37 days. As before, this formula is copied to cells F6:F47 to obtain the remaining fitted volatilities.

The fourth and final step of the PBS model is to price an option using the Black-Scholes pricing formula and the fitted volatility from (4.10) with parameters appearing in cells I10:I15. Figure 4.4 illustrates this for a strike price of K = 80 (cell M6) and a maturity of T = 100 days (cell M7). To obtain the fitted volatility for combination of strike price and maturity, in cell M9 we type

image

to produce a fitted volatility of 0.243338. To obtain the PBS price using this fitted volatility and the VBA function BS_call(), in cell M10 we type

image

to obtain the call option price of 6.56. It is also instructive to compare the PBS price with the market price. For example, replacing the strike price with K = 50 and the maturity with T = 37 days in cells M6 and M7, respectively, produces a PBS call price of 33.69, close to the bid and ask prices of 33.60 and 33.80 appearing in cells B5 and B6, respectively.

Finally, Figure 4.4 also includes a volatility smile for the Black-Scholes (BS) and PBS implied volatilities, for a maturity of T = 127 days. Hence the x-axis contains cells A14:A24 while the y-axis contains cells E14:E24 for the BS implied volatilities, and cells F14:F24 for the PBS implied volatilities. It is evident that the PBS implied volatilities produce a steeper curve and can therefore better capture the smile than the BS implied volatilities, which produce a curve that is flatter.

THE GRAM-CHARLIER MODEL

This model, which we refer to as the Gram-Charlier model, was developed by Backus, Foresi, and Wu (2004) and provides a simple way to account for both skewness and kurtosis. They use a Gram-Charlier expansion up to the fourth order in the distribution of returns of the underlying asset. This allows for skewness and greater kurtosis than the normal distribution to be introduced into option pricing. This model, however, still assumes that volatility is constant over time.

Define the one-period return on the asset as Rt+1 = logSt+1 − logSt, where St is the price of the asset at time t. Then the return over T periods is image, which can be written image as the sum of the previous one-period returns. Suppose that Rt+1 has cumulant-generating function given by

image

where κj are the cumulants of Rt+1. If returns are identically and independently distributed, then the cumulants of their sum image are given as Tκj so that the T-period return has mean and variance given by μT = Tμ and image, respectively. Back, Foresi, and Wu (2004) use the fact that if

image

and

image

denote the one-period skewness and excess kurtosis respectively, then the T-period skewness and excess kurtosis are given by image and γ2T = γ2/T respectively.

Backus, Foresi, and Wu (2004) use the first four terms of the Gram-Charlier expansion to arrive at the following probability density for the standardized T-period return image:

image

where

image, the density of the standard normal distribution

φ(k)(x) = the kth derivative of φ(x).

It is easy to show by straightforward differentiation that φ(3)(x) = (3xx3)φ(x) and φ(4)(x) = (x4 − 6x2 + 3)φ(x), so the density f(wT) is readily available.

The Gram-Charlier Call Price

Backus, Foresi, and Wu (2004) use the density f(wT) in the integral for the price of a call option with strike price K:

image

where r is the continuously compounded n-period interest rate and K is the strike price of the option. Substituting the Gram-Charlier density f(wT) for f(x), the call price becomes

image

where w* = (log(K/St) − μT)/σT. Backus, Foresi, and Wu (2004) break the integral into four parts and evaluate each separately. The first integral produces the usual Black-Scholes pricing formula, while the other integrals adjust the price for skewness and excess kurtosis. The resulting call price is shown to be approximately

(4.11) 4.11

Note that when skewness and excess kurtosis are both zero, the terms inside the square brackets in (4.11) become zero, and the Gram-Charlier formula for the call price CGC reduces to the Black-Scholes call price.

The form of d is identical to that given in the Black-Scholes formula, and depends on which type of option being priced. For options on a non-dividend-paying stock,

image

since image. For a stock that pays dividends at rate q per period, in the pricing formula for CGC we replace St by its discounted value Ste−qT and use

image

For currency options, we use this latter formula for d, except that q denotes the foreign risk-free rate.

The price PGC of a put option with same maturity as the call is given by put-call parity. Hence,

(4.12) 4.12

For options on stock paying no dividends, q = 0 and the last term is simply St. By differentiating (4.11) and (4.12), it is possible to obtain closed-form expressions for the option sensitivities (the Greeks) of Gram-Charlier calls and puts. This will be done in Chapter 7.

image The Excel file Chapter4GramCharlier contains the VBA function GC_call() to obtain the Gram-Charlier price (4.11) of a European call, and the VBA function GC_put() for the price of a European put using put-call parity (4.12).

 
 Function fz(x)
  fz = Exp(-x ^ 2 / 2) / Sqr(2 * Application.Pi())
 End Function
 
 Function GC_call(S, K, r, q, n, v, skew, kurt)
 Nskew = skew / Sqr(n): Nkurt = kurt / n
 Nvol = Sqr(n) * v
 d = (Log(S / K) + n * (r - q) + Nvol ^ 2 / 2) / Nvol
 GC_call = S * Exp(-q * n) * Gauss(d) - K * Exp(-r * n)
         * Gauss(d - Nvol) + S * Exp(-q * n) * fz(d)
         * Nvol * ((Nskew / 6) * (2 * Nvol - d)
         - (Nkurt / 24) * (1 - d ^ 2 + 3 * d * Nvol - 3 * Nvol ^ 2))
 End Function
 
 Function GC_put(S, K, r, q, n, v, skew, kurt)
   GC_put = GC_call(S, K, r, q, n, v, skew, kurt) + K * Exp(-r*n)
                  - S*Exp(-q*n)
 End Function

The VBA function GC_call() requires the same inputs as the Black-Scholes function BS_call, plus the one-period skewness and kurtosis. The VBA function fz() computes the standard normal density, while the VBA function Gauss() computes cumulative probabilities of the standard normal distribution. Both functions are used to conserve space in subsequent functions.

image Suppose an option on the non-dividend-paying stock presented in Figure 4.1 is to be priced, and suppose further that the one-month skewness and kurtosis of the stock are −2.3 and 1.2, respectively. Then S = 30, K = 30, r = 0.05/12 is the one-month risk-free rate, T = 5 months, and image is the one-month volatility. Figure 4.5 illustrates the use of the VBA functions for Gram-Charlier prices, contained in the Excel file Chapter4GramCharlier.

FIGURE 4.5 Gram-Charlier Prices for a Non-Dividend-Paying Stock

image

In cell C17 we type

image

which produces the call price of $2.519584. Similarly, in cell C19 we type

image

which produces the put price of $1.901049. Note that when kurtosis and skewness are both set to zero in cells C14 and C15, the VBA functions produce the Black-Scholes prices of $2.612638 for the call and $1.994104 for the put, exactly as in the example presented in Figure 4.1.

image We illustrate the effect of skewness on option prices, using the experiment outlined in Exercise 3.3. We obtain the price of a call option with one month to maturity, using the Black-Scholes formula, and using the Gram-Charlier model with one period skewness equal to −3 and +3. We use a strike price of K = 30, vary the spot price from S = 20 to S = 40 in increments of $2.50 and plot the difference between the Gram-Charlier price and the Black-Scholes price. The results of this experiment are presented in the Excel file Chapter4CompareCGBS, and are illustrated in Figure 4.6.

FIGURE 4.6 Effect of Skewness on Option Prices

image

As expected, the Gram-Charlier model accounts for positive skewness (dashed line) by assigning a higher price than Black-Scholes to out-of-the money calls, but a lower price for in-the-money calls. The opposite is true when negative skewness is introduced into the Gram-Charlier price (solid line).

image Finally, we evaluate how the Gram-Charlier model compares with the Edgeworth binomial tree of Chapter 3. Since both of these models introduce skewness and kurtosis, prices obtained from both models should be similar. The file Chapter4CompareGCEW evaluates the effect of skewness on both models, using parameter values that have been matched. This is illustrated in Figure 4.7. For each model, a plot of the difference in call price between the model and the Black-Scholes call price is produced in a manner identical to that in Figure 4.6.

FIGURE 4.7 Comparison of Edgeworth and Gram-Charlier Call Prices

image

The following parameter values are used, S = 30, K = 30, yearly volatility σ = 0.30, time to maturity T = 0.5 years or 6 months. The kurtosis and skewness for the Edgeworth tree must be chosen so that they fall within the locus illustrated in Exhibit 2 of Rubinstein (1998). The 6-month skewness is ξ = −0.4 in the Edgeworth tree, so in cell C23 the one-month skewness for the Gram-Charlier model must be set to image or γ1 ≈ −0.98. Similarly, the 6-month kurtosis is κ = 4.5 in the Edgeworth tree, so in cell C24 the one-month kurtosis is set to γ2 = (4.5 − 3) × 6 or γ2 = 9. Since the Gram-Charlier model uses excess kurtosis, three must be subtracted from the Edgeworth kurtosis before multiplying the result by the number of months. Figure 4.7 is similar to the solid line in Figure 4.6, and indicates that the Edgeworth tree and the Gram-Charlier model both account for skewness. Moreover, the price differences produced by the Edgeworth tree (solid line) and the Gram-Charlier model (dashed line) are fairly close, even when only n = 100 steps are used in the Edgeworth tree.

SUMMARY

This chapter deals with the Black-Scholes model, the most popular option pricing model, and extends this model to allow for dividends paid out at discrete time intervals. We also introduce Black-Scholes implied volatilities, which are volatilities extracted from option prices with the Black-Scholes formula. The Practitioner Black-Scholes (PBS) exploits the volatility smile by using implied volatilities as the volatility input to the Black-Scholes option price. Finally, the Gram-Charlier model provides a closed-form solution that allows for skewness and kurtosis in the returns distribution.

EXERCISES

image This section presents exercises that involve the Black-Scholes, PBS, and Gram-Charlier models introduced in this chapter. All VBA code for these exercises is contained in the Excel file Chapter 4 Exercises.

4.1 Obtain implied volatilities in the Excel file Chapter4 IV using two additional methods.

1. By deriving the analytic derivative of the objective function (4.5) and incorporating this derivative into the Newton-Raphson method.

2. By using the objective function f(σ) = CBS(σ, K, T) − Cobs(K, T) and the Bisection method to find the value σiv for σ that produces fiv) = 0. Compare the accuracy of both methods using a small number of iterations. Which root-finding algorithm is the best for finding Black-Scholes implied volatilities?

4.2 Using the most general deterministic volatility function in (4.10) may not be the optimal choice if some of the regression coefficients are not statistically significant. Modify the function OLSregress() in the Excel file Chapter4PBS to include p-values for the estimated coefficients. Using the data in that worksheet on options with maturity T = 37, 127, and 218 days only, exclude all coefficients that are not significant at the 1 percent level, and use a simpler deterministic volatility function. Obtain new parameter estimates and fitted volatilities using this simpler function.

4.3 By including a cost-of-carry term, the Black-Scholes formula can easily be generalized to price European options for stocks paying dividends, for futures, and for foreign currencies. The Black-Scholes formula becomes

image

for calls, and

image

for puts, where image (Haug, 1998 ). For stocks paying dividends at a continuous rate q, we set b = rq, for options on futures we set b = 0 and replace the stock price St byFt = SterT in the expressions for CBS, PBS, and d, and for options on currencies we set b = rrF, where rF is the foreign risk-free rate. Program this general form of the Black-Scholes model in VBA.

SOLUTIONS TO EXERCISES

4.1 We will see in Chapter 10 that the bisection method, along with the objective function f(σ) = CBS(σ, K, T) − Cobs(K, T), is particularly well suited for finding implied volatility. To find a positive value of f we simply choose a very large value of σ, and to find a negative value of f we choose a very small value. Hence, the values a = 100 and b = 0.01 are used as starting values for the bisection algorithm. Figures 4.8 and 4.9 both show that the implied volatilities obtained by the three methods are virtually indistinguishable from one another.

FIGURE 4.8 Solution to Exercise 4.1

image

FIGURE 4.9 Solution to Exercise 4.1

image

4.2 We can use the formulas in the Excel file Chapter1WLS to obtain the standard errors, t-statistics, and p-values for each regression coefficient of the deterministic volatility function, modified for OLS. Hence, we modify the VBA function OLSregress() by adding statements that produce these statistics. Running the regression (4.10) on all implied volatilities, excluding those for options with maturity T = 390 days, produces the values in Table 4.1 for the coefficients and their associated p-values. The results indicate that the coefficient for Maturity2 has a p-value of 0.04015, which is not significant at the 1 percent level. Hence, we exclude that term from the regression and opt for model (4.9) instead, which specifies implied volatility as a function of Strike, Strike2, Maturity, and Maturity × Strike. We therefore create a new VBA function PBSparams2(), to estimate by OLS the parameters of (4.9).

TABLE 4.1 Regression Coefficients and p-Values Based on (4.10)

Coefficient Estimate p-Value
Intercept (a0)  1.69346 <0.00001
Strike (a1) −0.02541 <0.00001
Strike2 (a2)  0.00010  0.00039
Maturity (a3) −1.49915 <0.00001
Maturity2 (a4)  0.41584  0.04015
Strike × Maturity (a5)  0.01322 <0.00001
 
Function PBSparams2(impV, K, T)
 n = Application.Count(impV)
 Dim RHS() As Double
 ReDim RHS(n, 5) As Double
 For cnt = 1 To n
   RHS(cnt, 1) = 1: RHS(cnt, 2) = K(cnt)
   RHS(cnt, 3) = K(cnt) ^ 2
   RHS(cnt, 4) = T(cnt) / 365
   RHS(cnt, 5) = K(cnt) * T(cnt) / 365
 Next cnt
  betas = OLSregress(impV, RHS)
  PBSparams2 = betas
 End Function

Table 4.2 presents the parameter estimates and p-values for regression (4.9) produced by the PBSparams2() function. As expected, all coefficients are significant at the one percent level. We also create a new function, PBSvol2(), to produce fitted volatilities based on (4.9).

TABLE 4.2 Regression Coefficients and p-Values Based on (4.9)

Coefficient Estimate p-value
Intercept (a0)  1.66256 <.00001
Strike (a1) −0.02522 <.00001
Strike2 (a2)  0.00010  0.00098
Maturity (a3) −1.25650 <.00001
Strike × Maturity (a4)  0.01397 <.00001
 
Function PBSvol2(p, K, T)
 PBSvol2 = p(1) + p(2) * K + p(3) * K ^ 2 + p(4) * T / 365
         + p(5) * K * T / 365
 If PBSvol2 < 0 Then PBSvol2 = 0.01
 End Function

The results of this Exercise are presented in Figure 4.10. The coefficients of model (4.10) appear in cells I11:I16, while those of model (4.9) appear in cells M11:M15. To fit the model (4.9), in cell M11 we type

image

and copy to the range M12:M15 to produce the estimated coefficients. To produce the fitted volatilities, in cell G5 we type

image

to produce the PBS fitted volatility based on (4.9) of 0.5891, which is lower than the fitted volatility of 0.5953 based on (4.10) in cell F5. The formula in cell G5 is then copied to cells G6:G36 to produce the remaining fitted volatilities based on (4.9). The PBS price of the IBM call option with strike price of K = 80 and maturity of T = 100 days is $6.38 (cell N7), 20 cents higher than the price of $6.18 produced by the fitted implied volatility using (4.10) which appears in cell N5.

FIGURE 4.10 Solution to Exercise 4.2

image

4.3 The VBA functions GenBS_Call() and GenBS_Put() produce the price of a call and put from the generalized Black-Scholes model, respectively.

 Function Gauss(X)
   Gauss = Application.NormSDist(X)
 End Function
 Function genbs_call(S, K, r, b, T, v)
 d = (Log(S / K) + T * (b + 0.5 * v ^ 2)) / (v * Sqr(T))
 genbs_call = Exp((b - r) * T) * S * Gauss(d)
            - Exp(-r * T) * K * Gauss(d - v * Sqr(T))
 End Function
 Function genbs_put(S, K, r, b, T, v)
 genbs_put = K * Exp(-r * T) * Gauss(v * Sqr(T) - d)
    - S * Exp((b - r) * T) * Gauss(-d)
 End Function

These functions are illustrated on Figure 4.11, using the same inputs as in Figure 4.1, but on a stock paying a continuous dividend yield of 2 percent annually. The price of the call is $2.400839 and the price of the put is $2.132818.

FIGURE 4.11 Solution to Exercise 4.3

image