Download General Instructions

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

2010 Flash Crash wikipedia , lookup

Modern portfolio theory wikipedia , lookup

Black–Scholes model wikipedia , lookup

Transcript
General Instructions
The following general instructions apply to all of the spreadsheets:
1. All fields designed for user input are highlighted in red or pink. Users should feel
free to experiment in changing formulas in other, non-highlighted, fields, or
overriding formulas with input values to see sensitivities, but should be careful to
restore original inputs when they wish to return to the original functionality.
2. Terminology throughout this documentation refers to a single sheet within a
spreadsheet as a worksheet.
3. The only user-defined functions used are Black, for Black-Scholes pricing of a
European option, Greeks, to calculate delta, gamma, vega, rho, and theta of a
European option, and Cox, for pricing an American option using the Cox-RossRubenstein binomial tree algorithm. All of these function can be found in Module
2 of the Macro editor and printouts of these functions are on the next page of this
documentation. Inputs to all functions are an indicator of “call” or “put”, price,
strike, time to expiry, implied volatility, risk-free rate and dividend rate. When it
is desirable to emphasize the drift (i.e., the difference between the risk-free rate
and the dividend rate), this is input on the spreadsheet and the dividend rate
needed as input to the user-defined functions is calculated as risk-free rate minus
drift. Puts are valued using formulas for calls, but with price and strike swapped
and with risk-free rate and dividend rate swapped.
4. In almost all cases, when a shape of the volatility surface by strike needs to be
specified, a fairly simplistic approach has been used to give a rough feel for the
impact of smile and skew (as defined in 9.6.2 of the text), based on the formula:
Volatility at strike K = At-the-money volatility + Volatility Skew * Ln(K/current
forward price) + Volatility Smile * ABS(Ln(K/current forward price))
1
Printouts of EXCEL Macros
Function black(c, p, s, t, v, r, d)
If c = "put" Then
black = black("call", s, p, t, v, d, r)
Else
a = v * t ^ 0.5
b = (Application.Ln(p / s) + t * (r - d)) / a
c = Application.NormSDist(b + a / 2)
e = Application.NormSDist(b - a / 2)
f = Exp(-d * t)
g = Exp(-r * t)
black = p * c * f - s * e * g
If p = s Then
black = (black(c, p + 0.000001, s, t, v, r, d) + black(c, p - 0.000001, s, t, v, r, d)) / 2
End If
End If
End Function
Function Greeks(g, c, p, s, t, v, r, d)
price = options(c, p, s, t, v, r, d)
Select Case g
Case "d"
Greeks = (options(c, p + 0.0001, s, t, v, r, d) - price) / 0.0001
Case "s"
Greeks = (options(c, p, s + 0.0001, t, v, r, d) - price) / 0.0001
Case "v"
Greeks = options(c, p, s, t, v + 0.01, r, d) - price
Case "r"
Greeks = options(c, p, s, t, v, r + 0.0001, d) - price
Case "f"
Greeks = options(c, p, s, t, v, r, d + 0.0001) - price
Case "t"
Greeks = options(c, p, s, t - 1 / 260, v, r, d) - price
Case "g"
Greeks = (options(c, p + 0.0001, s, t, v, r, d) + options(c, p - 0.0001, s, t, v, r, d) - 2 *
price) / (0.0001) ^ 2
Case "p"
Greeks = price
End Select
End Function
2
Function cox(c, p, s, t, v, r, d, n)
Dim nodep() As Double
Dim eur() As Double
Dim am() As Double
ReDim nodep(0 To n, 0 To n) As Double
ReDim eur(0 To n, 0 To n) As Double
ReDim am(0 To n, 0 To n) As Double
If c = "put" Then
cox = cox("call", s, p, t, v, d, r, n)
Else
b = black("call", p, s, t, v, r, d)
a = v * t ^ 0.5
up = Exp(v * (t / n) ^ 0.5)
down = 1 / up
Fact = (Exp((r - d) * (t / n))) / ((up + down) / 2)
disc = Exp(-r * (t / n))
For j = 0 To n
For i = 0 To n
nodep(j, i) = p * (up ^ ((2 * i) - j)) * (Fact ^ j)
Next i
Next j
For i = 0 To n
eur(n, i) = Application.Max(0, nodep(n, i) - s)
am(n, i) = Application.Max(0, nodep(n, i) - s)
Next i
For j = n - 1 To 0 Step -1
For i = 0 To j
eur(j, i) = 0.5 * disc * (eur(j + 1, i) + eur(j + 1, i + 1))
am(j, i) = Application.Max(nodep(j, i) - s, 0.5 * disc * (am(j + 1, i) + am(j + 1, i +
1)))
Next i
Next j
cox = b + (am(0, 0) - eur(0, 0))
End If
End Function
3
The MixtureOfNormals spreadsheet
Input specifies up to two different scenarios for two different variables. In each scenario,
you specify the mean and standard deviation of each of the two variables and the
correlation between them. A Monte Carlo distribution is created for each of the two
variables in each of the two scenarios, assuming a normal distribution. The two nornal
distributions are then mixed together, based on probabilities assigned to scenario 2 in cell
E1 (the probability for scenario 1, shown in cell C1, is calculated as 100% less the
probabilities for scenario 2).
Mixture of the scenarios takes place in columns G, H, J ,and K. For each row of the
Monte Carlo simulation, column H selects one of the two scenarios, based on a random
number generated in column G. Columns J, for variable 1, and K, for variable 2, then
have the value of the mixture for each row. Statistics (mean, standard deviation, skew,
kurtosis, and correlation) are calculated for the mixture at the top of columns J and K.
Also calculated are percentile values of the two mixed distributions, based on percentile
points selected in cells M2 through R2. Ratios are also computed to what these percentile
values would be for a normal distribution.
The linearity (or non-linarity) of the correlation between the two mixed variables can be
seen in the Graph worksheet (all computations are contatined in the Mix worksheet).
Another measure of the correlation is contained in computations on line 11, which show
the percenatge of cases in which both variables are in the extreme part of the distribution,
based on the percentile value chosen in row 2. These values will be higher for a
distribution created as a mixture than they will be for a normal distribution with
the same linear correlation (as calculated in cell K7).
4
The Winners Curse spreadsheet illustrates the mechanism of the winner’s curse in
auction situations, as explained in section 2.4. The actual value of each deal can be input
in column B, the seller’s offering price in column C, and the price bids of the two buyers
in columns D and F. The buyer’s profits if they negotiate separately with the seller are
shown in columns E and G. The buyer’s profits if they compete against one another in an
auction are shown in columns H and I.
5
The VaR spreadsheet computes VaR using 3 different methods — historical simulation,
Monte Carlo simulation, and variance-covariance. It allows the user to compare results
obtained through the 3 methods and explore possible modification. Corresponding
material in the text is in sections 7.1 and 7.3.
The data sample used in these calculations is contained in the Data worksheet. It
consists of 10 series of daily data from 8/22/96 to 11/30/01, generously provided by
RiskMetrics. This data is only provided for use in exercises related to this book and
should not be copied or distributed. The 10 series selected have been chosen to provide a
cross-section of data from the equity, rates, currency, and credit markets and from the
US, Europe, and Japan. The data series are:
Government Debt Benchmark Yields to Maturity
Germany
10 year
Japan
10 Year
US
10 year
Foreign Exchange Spot
EUR/USD (prior to the creation of the Euro, the German Deutschemark is
used as a proxy)
JPY/USD
Equity Indices
S&P 500
(US broad stock market)
Nasdaq 100 (US high technology stock market)
Dax
(German stock market)
Nikkei 225
(Japanese stock market)
Credit Index
US 10 Year Swap Spread (spread between swap rates and US treasury
rates)
In the Returns worksheet, all of these daily prices and rates are converted into daily
returns by taking the natural log of the ratio of one day’s value to the next. Summary
statistics (count, mean, annualized volatility, skew, and kurtosis) are computed using the
standard EXCEL functions. The user inputs, on line 7, weights for each of these return
series in a portfolio. It is based on these weights that VaR and related statistics will be
computed. Based on these weights, a daily return for the portfolio is calculated in
column L, along with the same summary statistics as for the individual series.
If the user wants historical simulation VaR to be based on different volatilities than those
for the full 8/22/96 – 11/30/01 historical period, a volatility override can be entered in the
column corresponding to each series in row 9 (for example, a volatility for part of the
historical period, or one calculated by a weighted average, or an implied volatility can be
used). The ratio of the volatility override to the calculated volatility of the return series is
multiplied by the weight of the series in the portfolio to obtain an adjusted weight (row
10) which is used in calculating the daily portfolio returns. If the user does not wish to
override the historical volatility, then the entry in line 9 should be blank.
6
The Rankings worksheet shows the returns for each of the 10 series and the portfolio
ranked from worst return to best for the worst 10% of all returns (columns C through M).
The composition of each of the worst portfolio returns is shown in columns N through W,
along with the date on which the return occurred in column X.
The Ratios worksheet shows the ratios of the actual distribution to the normal
distribution for the returns of all 10 series and the portfolio for all percentiles in the worst
10% of all returns. A ratio of 100% indicates a series with the same degree of fatness of
tails as a normal distribution of returns; the higher the ratio the fatter the tail.
The Var-CovVaR worksheet calculates VaR using the variance-covariance method.
Correlation coefficients for the 10 series are calculated from the daily returns in B3:K12.
Daily standard correlations for the 10 series are calculated from the daily returns in
B14:K14, with corresponding annualized volatilities displayed in B15:K15. Using the
weights input in the Returns worksheet, along with the correlations and standard
deviations, a variance-covariance matrix is calculated in B28:K38. The standard
deviation and annualized volatility for the portfolio are then calculated in L14 and L15
and the portfolio standard deviation is then used to calculate VaR at selected percentile
levels (the percentiles are input in the Historical VaR worksheet). Any of the historical
standard deviations and correlations can be directly overridden by the user to see the
impact on portfolio standard deviations and VaR. In changing correlation coefficients,
the user must exercise care to maintain the symmetry of the matrix (e.g., if you change
the 2nd column, 7th row to 25%, you must also change the 7th column, 2nd row to 25%).
The three methods of calculating VaR contributions of risk components discussed in
section 11.3 of the text are illustrated in section A18:K26 of the VaR-CovVaR
worksheet. The user specifies a percentile level in B18. For each of the 10 return series,
the VaR contribution is calculated using stand-alone VaR (row 19), incremental VaR
(row 20), and marginal VaR (row 21). The sums of the contributions of each series are
shown for stand alone VaR (B24), incremental VaR (B25) and marginal VaR (B26). The
diversification benefit of the portfolio is computed in D24 as the difference between the
sum of the stand alone VaRs and the portfolio VaR.
The Historical VaR worksheet calculates for each percentile corresponding to the worst
10% of all portfolio returns, the VaR and shortfall VaR, in columns D and E. VaR is
computed non-parametrically as the actual portfolio return corresponding to the
percentile and shortfall VaR is computed as the average of all portfolio returns worse
than or equal to that return. In column G, an alternative method of computing VaR is
shown, estimating VaR by a properly selected shortfall VaR, following the suggestion on
page 12 of chapter 11. The user can input selected percentiles in column I. For each
selected percentile, the nonparametric VaR, shortfall VaR, and alternative VaR
computations are shown in columns K, L, and M.
The MonteCarlo VaR worksheet calculates VaR using a Monte Carlo simulation. The
Monte Carlo simulation begins with 10 series of 2,000 numbers generated to form a
pseudo-random set with each series having correlations of 0. These series were generated
7
with an APL program which implements the algorithm for generating a multinormal
distribution in Rubinstein(1981). The series are in the worksheet Random along with
calculated statistics which indicate that the objective of the algorithm has been achieved.
The next step is to take the correlation coefficient matrix for the 10 return series and
convert them into a matrix of factor loadings for the 10 series of pseudo-random
numbers. This calculation is performed in the worksheet Factors, with the factor
loadings matrix (B18:K27) derived from the correlation matrix (B4:K13) using the
Cholesky decomposition algorithm [ see Hull (2002) section 18.6]. The correlation
matrix is computed from the historical returns in the Returns worksheet, but may be
overridden by the user. (In changing correlation coefficients, the user must exercise care
to maintain the symmetry of the matrix).
Pseudo-random series representing each of the 10 returns series are now generated in
B2049:K4048 of the MonteCarlo worksheet combining the pseudo-random series in the
Random worksheet with the factor loadings derived in the Factors worksheet. A return
series for the portfolio is now generated in A40:A2039 by combining those pseudorandom series with the portfolio weights input in line 7 of the Returns worksheet and the
volatilities in row 18. The volatilities in row 18 are derived from the historical returns in
the Returns worksheet, but may be overridden by the user. The user may also supply a
volatility of volatility and a correlation between returns and volatilities, in rows 19 and
20, to provide kurtosis and skew to the series. Returns for each series are generated in
B10:K2039 by the formula: random return * exp((vol-of-vol*random number) +
(correlation between return and volatility * random return)).
Once the returns for the portfolio have been generated, statistics of standard deviation,
annualized volatility, skew, kurtosis, and correlation coefficients can be calculated
(A2:K16). VaR and shortfall VaR are calculated non-parametrically from the distribution
of the portfolio returns in A40:A2039. These calculations are in L40:P239. B22:D34
looks up VaR and shortfall VaR for selected percentiles from the fuller set in L40:P239.
The selected percentiles are those input in the HistoricalVaR worksheet.
8
The EVT spreadsheet uses the extreme value theory formulas from the box in Section
7.1.2 to calculate VaR and shortfall VaR for selected percentiles.
The key inputs for these calculation are two parameters, and , and a percentile which is
high enough that tail behavior starts to be exhibited but low enough to allow statically
meaningful numbers of observations. Of the two parameters, the more important is ,
which determines the degree of “fatness” of the tail —  must be greater than 0 and less
than 100%, with values close to 0 producing tails with roughly the same fatness as a
normal distribution and higher values producing fatter tails.
Input for the spreadsheet is observed VaR (B2 and B3) at two selected percentile levels
(A2 and A3), possible values for  (C5 to G5) and selected tail percentile levels (A9 to
A16). The first observed VaR (B2) is used as the base to project VaRs at higher
percentiles. The second observed VaR (B3), which should be for a higher percentile than
the first, is used to estimate the  parameter, with a value of  (C6 to G6) corresponding
to each possible  value, inverting the formula for VaRp.
Output is the VaR corresponding to each selected percentile based on a normal
distribution (B9 to B16) and based on the EVT formula for each possible  (C9 to G16)
and the shortfall VaR corresponding to each selected percentile and possible  (C19 to
G26).
9
The Rates spreadsheet can be used either to value and compute risk statistics for a
portfolio of linear instruments (forwards, swaps, bonds) based on an input set of forward
rates, or to determine a set of forward rates which achieve an optimum fit with a given set
of prices for a portfolio of linear instruments while also maximizing the smoothness of
the forward rates selected. Corresponding material in the text is in sections 10.2.1 and
10.4. Risk statistics are calculated on a separate Risk worksheet.
Spreadsheet inputs are contained on two worksheets – one labeled Forwards contains the
input forward rates; the second labeled Instruments contains specification and prices of
instruments.
Forward rates are input in column C of the Forwards worksheet. Dates for each forward
are calculated from an input current date (B1) and the first forward date (B2). Forwards
of a quarter-year length are used. If the first forward date is not the input current date,
then a “stub period” forward is created between the current date and the first forward date
– this corresponds to a situation in which forwards line up with a standard calendar such
as LIBOR futures dates. Discount factors for each date for which a forward rate is input
are calculated by multiplying the previous discount factor by exp(-forward rate * # of
days in the period / 365.25), making the assumption that the forward rates are quoted on a
continuously compounded basis. Discount factors appear in column G and are used to
compute continuously compounded zero coupon rates in column D. Par coupon rates are
computed in column E, using a standard bootstrapping formula [see Hull (2002) section
5.4]. A graph of the forward, zero, and par coupon rates is displayed in a separate
worksheet.
Instrument specifications are given by a start date (column B), end date (column C),
coupon rate (column D), and coupon frequency (column E). Coupon frequency can be 1
for annual coupons, 2 for semi-annual coupons, and 4 for quarterly coupons. Noncoupon paying instruments, such as discount bonds or LIBOR forwards, should have a 0
entered for the coupon rate. Any start date earlier than the current date has the same
effect – the price calculated for the instrument is what you would currently pay for the
cash flows. A start date after the current date indicates that the instrument is a forward
and the price calculated is that which is paid on the start date.
The price calculated is based on discounting all cash flows at discount factors
interpolated from those computed in the Forwards worksheet. First the coupon cash
flows are generated in columns V through CY (a maximum of 40 coupons is
accommodated, so that a 10 year instrument with quarterly coupons can be handled).
Each pair of columns within the range contains a date for the coupon cash flow and an
interpolated discount factor corresponding to this date. Coupon dates start with the end
date and are incremented backward in time, with no coupon date being allowed earlier
than either the start date or the current date. (Computation of coupon dates is only an
approximation not utilizing the full set of detailed rules which would be used in an actual
business situation). The total present value of all coupons is computed in column U as
the total of all coupon discount factors multiplied by the coupon rate divided by the
coupon frequency.
10
Discount factors are also computed for the start date (in column S) and the end date (in
column T), with the start discount factor equal to 1 for any instrument whose start date is
earlier than the current date. The present value of the future cash flows, the total of the
coupon values in column U and the final payment of par, is 100 times the total of column
U plus the end date discount factor in column T. This is divided by the start date
discount factor in column S to get the dirty price (in column P). Accrued interest (for
currently held instruments only) is computed in column L as the coupon rate multiplied
by the residual days by which the time to first coupon is short of a full coupon period
(this is only an approximate calculation). The clean price (in column J) is the dirty price
less accrued interest. A par coupon rate is calculated in column O as the coupon which
would result in a clean price of 100.
All discount factor interpolations are based on the zero coupon rates, treating the zero
coupon curve as piecewise linear. A separate Interpolation worksheet copies over the
zero coupon rates computed in the Forwards worksheet and calculates the linear slope
between each zero coupon rate. Piecewise linear interpolation can then be accomplished
using the EXCEL lookup function to find the zero coupon rate for the forward date
immediately preceding the date for which a discount factor is needed, and then adding an
amount equal to the slope at that point multiplied by the time between the preceding
forward date and the date for which the discount factor is needed.
When the spreadsheet is used to fit a set of observed market prices, the (clean) market
price for each instrument must be entered in column F of the “Instruments” worksheet, or
if the price is quoted using the market convention yield, a zero should be entered in
column F and the yield entered in column G and a conventional yield to price calculation
is made in column I, using the EXCEL Price function. A weight is assigned to each
instrument in column A – instruments which are entered just for the purpose of
computing price but which are not to be part of the price fitting should get a 0 weight, all
others should get a weight of 1 unless you wish to assign differing weights based on
varying degree of price liquidity. For each instrument, a pricing error is computed in
column M, with the weighted sum of the squares of these errors computed in M2 of the
Forwards worksheet.. The EXCEL SOLVER finds the set of forward rates which will
achieve the best combination of minimizing the weighted sum of squares of pricing errors
and minimizing a measure of smoothness of the forward curve (calculated in M3 of the
Forwards worksheet). The quantity minimized is in cell M4 of the Forwards worksheet
and is the weighted combination of the sum of squares of pricing errors and the measure
of smoothness with the relative weighting of these 2 measures assigned in cell N2. The
smoothness measure used is the square root of the sum of the squared second differences
of the successive forward rates (computed in column I).
For each instrument a duration is computed in column J and a value of a basis point in
column K. The duration is computed using the standard Macauley duration EXCEL
function. The value of a basis point is calculated by adding .01% to the yield and looking
at the change in the EXCEL Price function. Portfolio statistics of duration (J32) and
value of a basis point (K32) are calculated by weighting the individual quantities, by the
11
instrument weight for value of a basis point, and by the product of instrument weight and
instrument price for duration. The weights are interpreted as being in millions of dollars
(i.e., a weight of 1 is $1 million).
The Risk worksheet calculates risk statistics for the portfolio of instruments entered in
the Instruments worksheet. Two types of risk calculations are performed. First, a
portfolio of quarterly forwards is calculated to represent the risk of the portfolio. Second,
the risk measures for the forward buckets is aggregated into summary measures.
The most accurate way of calculating the risk exposure of a portfolio to a set of forwards
is to successively “tweak” the rate of each forward, rebuild the entire set of discount
factors for each tweak, and recalculate the value of the portfolio for each set of discounts.
This results in a value of a 1 basis point move for each forward which fully reflects all
interpolation methodology. An equivalent forward amount can then be determined by the
amount required to produce the same value of a 1 basis point move as the portfolio.
The worksheet uses a reasonable approximation to this more accurate but more
computationally intensive method. The approximation is based on representing each cash
flow as a set of forwards which will reproduce the cash flow. The following box
illustrates this method with a 1 year cash flow and 4 quarterly forwards.
Assume that the rates of the first 4 forwards are 3%, 4%, 5%, and 6%. A $100 cash flow
in one year can be reproduced by holding the first 4 forwards in amounts of $96.32,
$97.29, $98.51, and $100 respectively. You can begin with $95.60, use the first forward
to guarantee a 3% return in the first quarter to obtain $95.60e.03/4 = $96.32, invest the
$96.32 in the second quarter, using the second forward to guarantee a 4% return to obtain
$96.32e.04/4 = $97.29, invest the $97.29 in the third quarter, using the third forward to
guarantee a 5% return to obtain $97.29e.05/4 = $98.51, and invest the $98.51 in the fourth
quarter, using the fourth forward to guarantee a 6% return to obtain $98.51e.06/4 =
$100.00. We are assuming the forwards to be zero-coupon (discount) instruments, which
is why the par amounts are quoted as the amount received at the end.
The calculations of the forward equivalents start by representing each instrument as a
column between J and AH. First, forward equivalents are computed for the starting cash
flow, the ending cash flow, and all coupons, under the assumption that the payments are
all due on forward dates. These calculations are in columns AJ through BH, with each
row representing a forward bucket. The corresponding entries in J through AH are
calculated by taking a weighted mixture of AJ through BH and a one time period shifted
version of AJ and BH, with the weighing determined by the relationship between the
maturity date of the instrument and the forwards dates. Columns J through AH are
summed into column E, the forward equivalents of the portfolio. Column E is multiplied
by $1,000,000 x .01%/4 divided by the discount factor for the forward to obtain the
impact of a 1 basis point shift on the forwards equivalents. The 1 basis point impacts by
forward bucket are graphed in the RiskChart worksheet to obtain a visual representation
of the risk position.
12
Summary risk statistics are calculated in G11, H11, and I11 based on risk weightings
input in columns G, H, and I corresponding to each forward bucket. Weightings
represent forward curve shifts. In the sample spreadsheet, I have used a parallel shift,
consisting of a 1 basis point move in each forward rate, a tilt shift, consisting of a
negative 1 basis point move in the first bucket evolving smoothly to a positive 1 basis
point move in the 40th bucket, and a butterfly shift, consisting of a positive 1 basis point
half-way between the first and 40th buckets evolving smoothly to a negative 1 basis point
move in both the first and 40th buckets.
13
The Bootstrap spreadsheet produces a comparison between the bootstrap and optimal
fitting methodologies for extracting forward rates from an observed set of swap rates.
This is the spreadsheet that has been used to produce figure 10.1 in the text.
Inputs are par swap rates for 1, 2, 3, 5, 7, and 10 year swaps, entered in cells B5, B6, B7,
B9, B11, and B14. A bootstrap calculation, following the methodology of Hull (2002)
4.4 is used to produce the forward rates in F5:F14 by first using linear interpolation to fill
in the 4, 6, 8, and 9 year swap rates and then building a discount curve one year at a time.
The optimal fitting approach is a simple variation of the one used in the Rates
spreadsheet. The SOLVER is used to find forward rates in F17:F26, which minimizes
the quantity in cell H29, which is equal to a weighted mixture of 90% times the sum of
absolute error between the input par swap rate and the par swap rates calculated in
G17:G26 from these forward rates and 10% a second difference measure of the
smoothness of the forwards.
14
The RateData spreadsheet contains historical time series of US interest rates data from
8/26/96 to 10/30/01, generously provided by RiskMetrics. It is used in exercises 10.1 and
10.2. This data is only provided for use in exercises related to this book and should not
be copied or distributed. The data covers short-term interbank rates for 1 month, 3
month, 6 month, and 1 year tenors and par yield swap rates for 2 year, 3 year, 4 year, 5
year, 6 year, 7 year, 8 year, 9 year, 10 year, 12 year, 15 year, 20 year, and 30 year tenors.
This data is used in exercises 11.2 and 11.3.
15
The NastyPath spreadsheet is an illustration of the size of losses which can be incurred
in dynamically delta hedging an option. It is the example referenced in section 11.2. The
example follows the dynamic delta hedging of a purchased call option over the 30 days of
its life. The daily price history of the underlying asset must be input in cells B17:B46,
from which the P&L due to hedging is simulated. The options price and options delta are
calculated for each day, in columns C and D, based on the original implied volatility
stored in C3. Daily options P&L is computed in column E, based on the changes in
options prices from column C. Daily futures P&L is computed in column F from the
previous day’s delta from column D and the underlying asset price change from column
B. Cumulative P&L in column G is summed from the options P&L and the futures P&L.
The option payoff, based on the final day price input in cell B46, is computed in C10.
The final day’s cumulative P&L is copied from G46 to C9 and the total P&L, in cell C11,
is the sum of the final day’s cumulative P&L and the option payoff.
16
The PriceVolMatrix spreadsheet computes the price-volatility matrix and volatility
surface exposure for a small portfolio of vanilla European-style options. It illustrates the
material discussed in section 11.4.
Inputs and outputs are all contained in the Main worksheet. The portfolio is input in cells
C2:R7. Each column specifies one European option as follows:
Line 2: the volume (positive for purchase, negative for sale)
Line 3: either “call” or “put”
Line 4: current price of the underlying forward
Line 5: strike price
Line 6: time to expiry (in years)
Line 7: implied Black-Scholes volatility
For each option, the option price, delta, vega, gamma, and theta are computed and
displayed in rows 8 through 12 respectively. Total portfolio statistics are summed and
displayed in cells A8:A12. As in chapter 9, all computations are done with interest rates
set to 0 and deltas are expressed in terms of the underlying forward. Price and vega are
discounted to present value using a single discount rate input as B1 (a more accurate
version would use a full discount curve).
The price volatility matrix for the portfolio is displayed in cells A15:J26. Spacing of
shifts is determined by the input in A4, spacing of implied volatility shifts is determined
by the input in A6. All options in the portfolio are assumed to be written on closely
related underlyings, so that while different options may have different inputs for
underlying price and implied volatility, it makes sense to look at parallel shifts in these
prices and volatilities. In calculating the impact of these shifts, it is always assumed that
the portfolio starts delta hedged, using the delta displayed in cell A9, but that this same
delta hedge is maintained throughout any price move. This assumption allows the matrix
to display convexity exposure as well as vega exposure and exposure to combinations of
convexity and vega risk. All output is shown as changes from current option values and
is displayed as a % of 100 (so an at-the-money strike should be entered as 100).
Calculations take place in blocks of cells between A39 and J276, with one block of cells
linked to each option in the portfolio. A15:J26 is just a summation of these blocks. For
each price level, the vega is computed in column K and the convexity of the vega (the
degree which valuation is a non-linear function of volatility) is computed in column L.
The price volatility results are plotted in the PriceVolatility chart. The BS value, delta,
vega, and gamma vs. changes in price are plotted in the PortfolioRisk chart The
SOLVER can be used to find combinations of options which minimize convexity and
vega risk (the SOLVER is set up to minimize the sum of the square of entries in the
price-volatility matrix; computed in N14 – you might also want to consider minimizing a
weighted sum of squares, with weights corresponding to subjective probabilities of each
cell in the matrix).
17
Exposure to the changes in the volatility surface is displayed in A28:I36, with vega
exposures shown in a two-dimensional array by time to expiry and strike in relation to atthe-money. Totals by time to expiry are displayed in C36:H36 and by strike in I29:I35.
The grand total in I36 matches the total portfolio vega in A10. Users can input the
desired time to expiry categories in B28:H28 and strike categories in A29:A35. The
strike categories follow market convention in being entered on an at-the-money strike,
abbreviated “ATM,” with other strikes designated by their call deltas. Calculations of the
vega exposure by bucket are carried out for each option individually, and are calibrated to
the at-the-money strike and the deltas of each individual option. The individual
calculations are carried out in columns W through AF, alongside the price-vol matrix
calculation for each option, with the portfolio statistics in A28:I36 a straight summation
of these individual calculations. The vega for each option is linearly proportional
between the time to expiry buckets and the strike buckets the option falls between.
The user can control the shift by which the price-vol matrix is calculated in two ways.
The first is by specifying whether volatility shifts should be parallel or proportional, the
second is by specifying that shifts in price will be accompanied by shifts in volatility to
keep volatility aligned with its relationship to the at-the-money strike. Both of these shift
controls are implemented. by having volatilities for each box in each individual price vol
matrix by separately calculated in columns L through T, alongside the individual price
vol matrices.
A parallel shift is specified by entering a 0 in M28, next to “proportional shifts.” In this
case, every implied volatility is shifted up or down by the same flat amount. A
proportional shift is specified by entering a 1 in M28. In this case, the implied volatility
shifts in row 15 are taken to apply to the base implied volatility entered in M29 and all
other volatilities are shifted proportionally. For example, if the base implied volatility is
25%, then an up 2% shift results in a 2% x 30% / 25% = 2.4% shift in an instrument
which currently has a 30% implied volatility and a 2% x 20% / 25% = 1.6% shift in an
instrument which currently has a 20% implied volatility. Since longer dated options
generally have lower volatilities, proportional shifts result in less variability in longer
term option volatilities than in shorter term option volatilities.
If smile and skew are entered as 0 in M30 and M31, then shifts in price do not result in
shifts in volatility. Non-zero entries for smile and/or skew cause volatilities to be shifted
along the specified volatility surface as prices shift.
18
The VolCurve spreadsheet fits a forward volatility curve to observed options prices.
This spreadsheet is designed for European options other than interest rate caps and floors,
for which the spreadsheet CapFit can be used. Corresponding material in the text is in
section 11.6.1.
Inputs are a series of time periods (column A) for which forward volatilities are to be
implied and a series of adjustment factors (column C) to be applied to each time period.
The adjustment factors represent anticipated volatility patterns, as explained in section
9.6.1, with a higher weight representing higher anticipated volatility for a given period.
Forward volatilities in column B are divided by these adjustment factors to obtain
adjusted forward volatilities in column D. It is these adjusted forward volatilities for
which the smoothness function is calculated in column E. Smoothness is measured as the
square root of the sum of squares of the second differences of the adjusted forward
volatilities (K5). A more sophisticated smoothness measure might involve different
weightings for each second difference.
Balanced against desired smoothness is the attempt to fit observed option prices as
closely as possible. Observed option prices are entered as implied volatilities by time
period (column F). A period for which an option price is not observed can be indicated
by a blank entry in the corresponding row of column F. The relative liquidity of options
prices can be used to place weights on the fitting errors, with weights input in column G.
Fitting errors are calculated in column I as the difference between observed implied
volatility and a spot volatility (column H) calculated from the forward volatilities as the
square root of the sum of the squares of forward volatilities weighted by the length of the
forward period. The overall fitting error measure is the square root of the sum of squares
of these fitting errors weighted by the weights input in column G (K4).
The optimization utilizes the EXCEL SOLVER. It minimizes a weighted sum of the
fitting error and smoothness measure calculated in K6, using a relative weight input in
L4. The forward volatilities in column B are solved for, subject to the constraint that no
forward volatility can be negative. A chart of the resulting adjusted forward volatilities
and spot volatilities is produced.
19
The CapFit spreadsheet fits a forward volatility curve to observed options prices for
interest rate caps. Since caps are baskets of options, with each option within the basket
termed a caplet, the spreadsheet needs to break each cap apart into its constituent caplets
and price each individually. Corresponding material in the text is in section 11.6.1.
Inputs are current FRA (forward rate agreement) rates, input in line 4, current prices for
1,2,3,4,5,7, and 10 year caps, input in B12:C253, and a smile (D1) and skew (D2) for the
volatility surface. Each cap is specified by the strike rate on the cap, entered in column
B, and the flat volatility at which the cap is currently trading, entered in column C. The
use of flat volatility, a single volatility to be applied to each caplet in the cap, as a way of
expressing the price of a cap, is a fairly standard convention within the cap market. It is
similar to the convention used to quote a bond at a single yield at which to discount all its
cash flows, even though accurate bond pricing would discount each cash flow at a zerocoupon rate specific to the tenor of the cash flow. Fitting a forward volatility curve to a
set of caps consists of finding volatilities which, when used to value each individual
caplet, results in cap prices matching the price which results from the flat volatility.
The first calculation step is to derive discount prices for each time period from input FRA
rates — this is done in row 5. Caplet prices are then derived in D12:AQ25. Each caplet
is priced twice on two adjoining rows. On the top row it is priced using the flat volatility
from row 10 for the cap it is part of. On the bottom row, it is priced using the at-themoney caplet volatility corresponding to its time period, adjusted for smile and skew. In
both cases, the caplet value derived from Black-Scholes is discounted back to the current
date using the discount factor corresponding to one quarter later than the option expiry,
corresponding to market convention that each caplet is on an FRA maturity one period
later than option expiry.
Spot caplet volatilities are derived as the square root of the sum of squares of the forward
caplet volatilities in row 9. The EXCEL SOLVER is used to find a set of forward caplet
volatilities which best fits the input cap prices while also obtaining a smooth pattern of
forward caplet volatilities. Closeness of fit is calculated in D28 and smoothness is
calculated in D29 as the square root of the sum of squared second differences of the
forward volatilities. The quantity to be minimized is D30, a weighted average of the
closeness of fit and smoothness measures with weighting selected by the user in E28.
The spreadsheet can also be used to value a selected cap using the forward caplet
volatilities. The tenor is entered in B32 and the coupon in D33. The cap is priced in D33
using the forward caplet volatilities and in D32 using a flat cap volatility input in C32.
A more complete fitting routine would utilize caps at different coupons and the same
tenor to fit the smile and skew as well as the at-the-money forward caplet volatilities,
with smile and skew allowed to vary by tenor. In the simpler version presented here,
smile and skew are treated as previously derived inputs which are constant across tenors.
20
The VolSurfaceStrike spreadsheet interpolates implied option volatilities by strike for a
given tenor, utilizing methods discussed in section 11.6.2. There are two modes in which
the interpolation can be performed:
1. Implied volatilities are input for enough strikes to allow for reasonable
interpolation.
2. Implied volatilities are input for only 3 strikes.
Calculations for the first mode are contained in the worksheet FullFit.
Inputs are time to expiry (B2), market implied volatilities at different
strike levels (column G), weights to apply to these implied volatilities
(column H), and a relative weighting (D1) between fitting market implied
volatilities ad the smoothness of the probability distribution used to
interpolate. One other input is an at-the-money volatility (B1) which is
used in creating a chart but does not impact calculations. Output is the
cumulative probability distribution (Column B), probability density
(column C), put value (column D) and implied volatility (column E) that is
interpolated for each strike.
Calculations for the second mode are contained in the worksheet ParameterFit. Inputs
are time to expire (B2) and three strikes (D2-D4) with associated market implied
volatilities (E2-E4). Output are three parameters that came closest to matching these
implied volatilities: an at-the-money volatility (B1), a percentage mixture of lognormal
and normal distribution (B3), and a volatility of volatility (B4). Based on these
parameters a cumulative probability distribution (column J), probability density (column
K), put value (column L), and implied volatility (column M) is generated for all strikes.
The method used to generate the cumulative probability distribution based on these
parameters is to first create a volatility, which is one standard deviation higher and one
standard deviation lower than the at-the-money volatility, based on the volatility of
volatility. These two volatilities are placed in the High and Low worksheets respectively.
Then on each of these worksheets a normal and lognormal distribution based on the
volatility and a weighted mixture of the normal and lognormal distribution calculated
using the input percentage of mixture with values ranging from 100% for completely
lognormal to 0% for completely normal. Finally, the two weighted distributions from the
High and Low worksheets are averaged. This is a truncated version of the full Hull White procedure for calculating an option price with stochastic volatility [see Hull,
(2002). p. 447], but is reasonably accurate in practice. A comparison to a more detailed
Hull White computation can be seen on the StochasticVolatility worksheet.
Fundamental to all calculations on the spreadsheet are the algorithms for estimating put
prices, implied volatilities, and probability density from a given cumulative probability
distribution. This computation appears in many places on the spreadsheet, for example
columns B, C, D,and E of FullFit and columns J, K, L and M of ParameterFit. Density
is just the first difference between successive cumulative probabilities. The put price at a
given strike level, P (Si), is computed iteratively from the cumulative probability
distribution, Cum (Si), and density, Den (Si), by the approximation formula
21
P (Si) = P (Si–1) + (Si – Si–1) x (Cum (Si-1) + Den (Si)/2)
The basic idea behind this approximation can be seen by an example.
Take Si = 90 and Si–1 = 88. Assume Cum (Si-1) = 30% and Cum (Si)= 33%, so that Den Si
= Cum (Si) – Cum (Si-1)= 3% and that we have already determined from the probability
distribution that the price of an 88 strike put is 3.5. At a minimum the 90 strike must be
worth 3.5 + 2 x 30%= 4.1, since for every possible price below 88, the 90 strike is worth
2 more than the 88 strike, and 30% of the probability occurs below 88. There is a 3%
chance that the underlying price will finish between 88 and 90. At one extreme, assume
that the whole 3% is concentrated at the underlying finishing at 90, so this 3% contributes
nothing to the price of the 90 put. At the other extreme, assume that the whole 3% is
concentrated at the underlying finishing at 88, so it contributes 3% x 2 = .06 to the price
of the 90 put, for a total value of 4.16. We have averaged between these two extremes
for our approximation of 3.5 + 2 x (30% + 3% /2) = 4.13. As we make the spacing
between strikes smaller, the possible approximation error becomes smaller.
The Black-Scholes implied volatility is derived from the put value using the secant
iteration method for inverting a non-linear function [see, for example, Elden and
Wittmeyer-Koch (1990) section 4.2). These computations can be found in columns YAF of the FullFit worksheet and columns Q – X of the ParameterFit worksheet. I have
only used three iterations, since I have found this to give reasonable accuracy in cases I
have tested, but the number of iterations can easily be increased by extending the block of
computations on the right with copies of the last two columns. Implied volatilities are
only displayed for strikes where the vega exceeds a minimum threshold (I have selected
.1), since when vega gets too small the implied volatility cannot be determined with any
accuracy.
22
The spreadsheet OptionRoll is a variant of the PriceVolMatrix spreadsheet. It differs in
the form of the optimization, which is set up to calculate a hedge that will minimize a
future roll cost. Corresponding material in the text is in section 11.6.3.
The entries for Time in row 6 represent the time remaining to expiry at the roll date. The
time to the roll date is entered in E1. For example, if you want to consider hedging the
sale of a 12 year option with 6 and 7 year options which, after 5 years, will become 1 and
2 year options that are rolled as 7 year options, you enter 5 in E1, 7 in B6 for the option
to be rolled into, and 1s and 2 in the remaining columns of row 6 for the options to be
sold in the roll.
In addition to the output produced by PriceVolMatrix, OptionRoll calculates, in line 13,
the current price of putting on the option positions. All other calculations are as of the
time of the roll. The value to be minimized in the optimization,, in cell N14, is the sum
of the square of the entries in the price-vol-matrix plus the square of the current price of
putting on the option position. So what is minimized is both the cost of the roll across all
combinations of future price level and future implied volatility and the cost of setting up
the hedge.
23
The OptionMC spreadsheet calculates a single path of a Monte Carlo simulation of the
delta hedging of a vanilla European-style call option position. It is designed to be used to
help in checking your work for the Monte Carlo simulation exercise in chapter 11.
The details for the option to be hedged are input in cells B1:B4 — the current price of the
underlying (B1), the strike (B2), the time to expiry (B3), and the implied volatility (B4).
Key inputs for the simulation are input in cells B6:B11 — the volatility of the underlying
price over this particular path (B6), the transaction cost as a percentage of the size of
hedge (B7), the threshold for determining whether to change the hedge (B8), the skew of
the volatility of the charges in underlying price (B9), the probability a jump will take
place over the life of the option (B10), and the standard deviation of a jump (B11). All
hedges are assumed to use the forward as an underlying and all P&L calculations are
assumed to be as of the option expiry date.
The simulation is set up for a path with 20 time steps. At each time step, the following
calculations are made:
1. The time that has expired so far, in column A.
2. A random number which generates the underlying price change in the absence of
a jump, in column B. This random number, and all the others in the spreadsheet,
is chosen using the EXCEL function Rand which selects a random number based
on a uniform distribution between 0 and 1.
3. The volatility to be used in this price change, in column C. It is derived from the
base volatility in B6 and the volatility skew in B7, based on the relation between
the last period’s price in column H and the price at the start date in B1. Volatility
= base volatility + skew x ln (Last price/start price). To avoid high skews leading
to negative volatilities, the volatility is floored at 1%.
4. A multiplicative factor for price, based on the random number and the volatility,
in column D. The formula used is
exp[normsinv(random number) x volatility x timestep – ½ x time step x
volatility2], where time step = time to expiry/number of time steps. Normsinv is
the EXCEL function that converts a percentage between 0% and 100% to the
number of standard deviations that correspond to this probability for a normal
distribution. The multiplication by timestep reflects the fact that volatility is
expressed as an annualized quantity. The subtraction of ½ time step x volatility2
is the usual adjustment for a log-normal quantity.
5. A multiplicative jump factor, in column G. If there is no jump, the factor is 1.
Jump behavior is determined by two random variables. The random variable in
column E determines if a jump occurs while the random variable in column F
determines the size of the jump. A jump occurs if the first random variable is
greater than the jump probability/number of time steps (the reason for dividing by
the number of time steps is that the jump probability is expressed in terms of the
life of the transaction — if there is a 50% chance of a jump sometime during the
24
life, that translates into a 2 ½% chance of a jump in each of the 20 time steps). If
a jump does occur, the size is determined by exp[normsinv(the random number in
column F) x the standard deviation of the jump from B11].
6. The price at the end of the time step, in column H. It is generated by taking the
price at the end of the previous time step (or the initial price B1 if it is the initial
time step) x the multiplicative factor from column D x the jump factor from
column G.
7. The delta hedge at the end of the time step in column I. The target delta is
computed based on the Black-Scholes formula and then compared to the delta at
the end of the previous time step. The Black-Scholes calculation is based on the
implied volatility at which the option was initially priced rather than the actual
volatility on a particular path. If the absolute difference is less than the threshold
(B8), then no change in hedge is made; otherwise, it is set equal to the target
delta. For the final time step, the threshold is ignored.
8. The hedge P&L for the time step, in column J. Calculated as the change in
underlying price multiplied by the delta hedge at the end of the previous period.
9. The transaction amount, in column J. Calculated as the absolute amount of
change in the delta hedge.
Summary statistics for the entire path are calculated as follows:
1. The initial option price calculated using the standard Black-Scholes formula, in
D1.
2. The price of the underlying asset as of option expiry, in D2, is just the final entry
in column H.
3. The option payoff as of option expiry, in D3, is either 0 or the excess of the final
price over the strike.
4. The sum of the hedge P&L, in D4, is just the sum of entries in column J.
5. The total P&L, in D5, is the sum of the initial option payment received and the
hedge P&L less the option payout.
6. The total transaction costs, in D6, is the sum of the transaction amounts from
column K multiplied by the transaction cost from B7.
25
The OptionMCHedged spreadsheet is a variant on the OptionMC spreadsheet. It
calculates a single path of a Monte Carlo simulation of the delta hedging of Europeanstyle call option hedged by two other call options with the same terms but different strike
prices.
The inputs for OptionMCHedged, which are supplemental to those in OptionMC, are
the specification for the two options being used as hedges. For each option, the input
specifies the strike (G2 and G3) and the weight (H2 and H3), the amount of the hedge as
a percentage of the option sold.
The changes to calculations are to the deltas in column I, the option price in D1 and the
option payoff in D3, all of which are altered to take all three options into account.
26
The BasketHedge spreadsheet calculates and prices a piecewise-linear hedge using
forwards and plain vanilla European options for any exotic derivative whose payoffs as
non-linear functions of the price of a single underlying asset at one particular point in
time. The spreadsheet consists of a Main worksheet which can be used for any payoff
function and other worksheets which contain illustrations of how the Main worksheet can
be used to hedge particular payoff functions. The particular functions illustrated are: (1)
a single asset quanto, (2) a log contract, (3) interest rate convexity, and (4) a compound
option. Corresponding material in the text is in section 10.1.
The primary inputs for the Main worksheet are: time to payoff, in years (B1); the current
volatility surface for European options with option expiry of this time to payoff, specified
by an ATM volatility (F2), a vol smile (F3), and a vol skew (F4); the non-linear payout
function specified by a formula in column C, which will reference possible ending
underlying asset prices in column B. The current forward price is assumed to be 100, so
all other prices are taken to be percentages of the current forward. Hedge amounts are
computed in column D. The unit price of each hedge is computed in column G, with
total proceeds computed as the product of hedge amount and unit price in column H. The
sum of all total proceeds (H1) represents the initial cost of establishing the hedge. The
computation involves no discounting, so the cost of the hedge is a forward price to be
paid at option expiry, which can be easily discounted to a present value (as in chapter 9,
page 1).
Hedges are divided between cash (row 7), a forward (row 8), puts at strike below the
forward (rows 9 to 58), and calls at strike above the forward (rows 59 to 159). The cash
hedge provides for a payout equal to the required payout if the ending underlying price is
equal to the current forward (C8). The forward hedge amount is determined by the ratio
of changes in payout to changes in underlying between the current forward and the first
call strike. All put hedges are determined by the difference between the ratio of changes
in payout to changes in underlying and hedges already in place for the forward and puts
at higher strikes. All call hedges are determined by the differences between the ratio of
changes in payout to changes in underlying and hedges already in place for the forward
and calls at lower strikes. The cumulative hedges for the forward and puts at higher
strike and calls at lower strikes are kept track of in column E.
Unit prices are determined as follows: the forward is assumed to be costless as it is
executed at the current forward price, all puts and calls are priced using Black-Scholes
based on a volatility computed in column F, which is based on the input ATM volatility,
smile, and skew.
Users desiring to change the strike prices used for puts and calls should be guided by the
following: (1) there is no need for uniform spacing of strikes, so more detail can be used
for price ranges with greater probability than for those with lower probability; (2) strikes
must be in order — downward for puts, upward for calls; (3) you should end with a very
low strike for puts and a very high strike for calls to avoid underhedging the tails; (4) the
lowest strike put should have a hedge amount in column D of 0, the lowest strike call has
27
a hedge amount in column D and cumulative hedge in column E which references row 8
for forwards.
Sample computations which have been provided are:
1. In the Main worksheet, an option which pays off the square root of the difference
between final price and a strike of 100.
2. In the Quanto worksheet, a single asset quanto (see the corresponding subsection
in section 10.1). An additional input is the strike (B2). An analytic price is
computed as a check in J3. It should agree closely with the hedge cost with smile
and skew equal to 0.
3. In the Log worksheet, a log contract (see the corresponding subsection in section
10.1). An analytic price is computed as a check in K1. It should agree closely
with the hedge cost with smile and skew equal to 0.
4. In the Convexity worksheet, the cost of hedging convexity risk on a constant
maturity interest rate swap (see the corresponding subsection in section 10.1 and
Hull (2002) section 25.4).
Additional inputs are the yield (J2), tenor (J3), and coupon (J4) of the bond on which the
constant maturity swap is based. For each bond price in column B, the corresponding
bond yield is computed in column J and constant maturity swap price in column K.
The difference between the constant maturity swap price and the bond price is the
convexity cost of hedging a constant maturity swap with a standard bond. This
difference is used as the payout in column C which is to be hedged with vanilla interest
rate puts and call bond options. Two further adjustments are needed. The first is that
bond prices which are so high as to lead to negative yields are not feasible, so no hedging
is needed against such prices. The second is that since bond option volatilities are quoted
as yield volatilities, they need to be converted to price volatilities before input to the
Black-Scholes model. This is done using a factor calculation in L4 which computes the
ratio of % changes in bond price to % change in bond yields at the current price level.
5. In the Compound worksheet, a compound option. The particular example is a
call-on-a-call, but the payouts in column C can be easily modified to handle any
compound option. Additional inputs are the strike of the compound option (B2),
and the time to expiry (B4), strike (B5), and implied volatility (B6) of the option
on which the compound option is written, with time to expiry of this option
measured from the expiry of the compound option. When smile and strike are set
to 0, the resulting hedge price can be checked against a standard compound option
calculation using the formulas from section 19.4 in Hull (2002) an
implementation of which can be found in the Options On Options worksheet
accompanying Haug (1998). As described in section 10.2, the basket hedge only
protects against changes in underlying asset price, not against changes in the
implied volatility of the underlying option. Exposure to this volatility is
computed in J1:S13 in a format compatible with that used in the
ForwardStartOption spreadsheet. The output in this matrix may be used directly
28
as input to cells B41:J51 of ForwardStartOption to compute a hedge on the
residual forward starting volatility risk.
29
The BinaryMC spreadsheet calculates the distribution of hedging costs for a portfolio
consisting of two digital options of the same size but opposite signs, using Monte Carlo
simulation. It can be used to explore the impact of differing strikes, maturity dates,
correlations between underlying variables, and use of vanilla call option spreads as part
of the hedge. It can be used as a prototype for testing Monte Carlo simulations of hedging
costs for larger portfolios of digital options.
The two digital options in the portfolio are designated by their respective underlying
variables: Variable 1 and Variable 2 (a case in which the two options have the same
underlying can be specified by inputting a correlation of 100% between the tow
underlyings).
The same computations as are used in the MixtureOfNormals spreadsheet are employed
for generating the growth rates for each Monte Carlo case for the two underlying
variables. Inputs for the most likely case are specified in cells C3:C7 and for the variant
case in E3:E7, with the probability of the variant case input in E2. These growth rates are
then applied to the starting prices of the two variables, input in cells B14 and B19
respectively, for the expiry periods of the two digital options, input in D13 and K13
respectively. The strike levels for the two options are specified in D14 and K14
respectively. A digital payout that applies to both options is input in cell D15. If vanilla
call option spreads, as explained in Section 12.2.4, are not to be used as part of the hedge,
then a zero should be input for the width of the spread in cell F13. If vanilla call option
spreads are to be used as part of the hedge, then the width of the call option spread should
be input in F13 – this will result in calculation of the size and strike of call options
30
The ForwardStartOption spreadsheet is a slight variant on the PriceVolMatrix
spreadsheet that can be used for risk management of forward starting options using the
method discussed in section 12.2.
The difference from PriceVolMatrix is that the option specified by inputs C2 to C7 is a
forward starting option with the number of years to the start date specified in E1 and the
number of years from the start date to expiry specified in C6. The changes needed to
handle a forward starting option are : (1) price (C4) and strike (C5)are automatically set
to 100, (2) delta (C9), gamma (C11), and theta (C12) are automatically set to 0, and (3)
the computation for the price-vol matrix in A40:J51 only allows the volatility to vary
from cell to cell with the price fixed at 100.
In addition to the output produced by PriceVolMatrix, ForwardStartOption calculates,
in line 13, the current price of putting on the option positions. All other calculations are
as of the time of the roll. The value to be minimized in the optimization,, in cell N14, is
the sum of the square of the entries in the price-vol-matrix plus the square of the current
price of putting on the option position. So what is minimized is both the cost of the roll
across all combinations of future price level and future implied volatility and the cost of
setting up the hedge.
This spreadsheet can also be used to find a hedge with vanilla options which neutralizes
as closely as possible any pattern of price-vol P&Ls. The desired pattern to hedge just
needs to be pasted into the cells B41:J51, as suggested above in the documentation of the
Compound worksheet within the BasketHedge spreadsheet.
31
The CarrBarrier spreadsheet compares the pricing of barrier options using Carr’s static
hedging replication with those computed using standard analytic formulas, published by
Rubenstein and Reiner, which can be found in Hull (2010) section 25.8. The cost of
unwinding the static hedge is also calculated. Corresponding material in the text is in
section 12.3.
Input fields are in B7:B17. Option specifications are in cells B1:B7. The current
volatility curve for vanilla European options is specified in cells B8:B10. Behavior of the
static hedge at a time the barrier is hit can be seen by specifying the time still remaining
to option expiry at the time the barrier is hit, in cell B12, and the volatility curve for
vanilla European options at the time the barrier is hit, in cells B13:B16.
Cells D2:K2 show the standard analytic values for the eight varieties of barrier options
(“cdo” = call down-and-out, “pui” = put up-and-in, etc). All analytic values are
computed using the at-the-money volatility. Cells D3:K6 show the cost of the static
hedges which the Carr methodology calls for putting on against each of the barrier
options. These are broken down as follows:
1. In row 3, a vanilla option struck at the same strike price as the barrier option
2. In row 4, the digital options struck at the barrier. Prices of the digital options are
approximated (a very close approximation) by a spread of vanilla calls.
3. In row 5, vanilla options struck at the barrier which are needed to add on to the
digital options as a “correction” to create a hedge against the digital portion of the
barrier option.
4. In row 6, options struck at the reflection point, which is calculated in row 9.
The value of the barriers based on the static hedge is shown in row 7, as the negative of
the sum of each of the static components. The difference between the analytic value and
the value based on the static hedge is shown in row 8. When the risk-free rate equals the
dividend rate and for a flat volatility surface (smile and skew both = 0), analytic values
and values based on the static hedge should be in complete agreement. However, the
static hedge approach is capable of taking volatility smile and skew into account in
pricing, which the analytic approach cannot. This static hedge approach only works
when the risk-free rate and dividend rate are equal and with an assumption of no
volatility skew when the barrier is hit.
The cost of unwinding the static hedge when the barrier is hit is shown by component in
cells D12:K15, with total cost in cells D16:K16. When the risk-free rate equals the
dividend rate and when there is no volatility skew at the time the barrier is hit, there
should be no cost to unwinding the static hedge when the barrier is hit.
32
The OptBarrier spreadsheet illustrates the use of optimization to find a hedge for a
down-and-out call barrier option. Input closely parallels that of CarrBarrier. A sold
barrier option is hedged by buying a vanilla call option with the same strike and tenor as
the barrier option and selling a series of vanilla put options struck below the barrier. The
amounts sold of the put options are determined by minimizing payouts for user related
barrier unwind conditions. Corresponding material in the text is in section 12.3.
The down-and-out call is specified by current forward price of the underlying (B1), strike
(B2), barrier (B3), time to expiry (B4), risk-free rate (B5), and drift (B6). Initial pricing
for the vanilla call and puts is specified by ATM volatility (B7), smile (B8), and skew
(B9). The strikes of possible put hedges are input in H12:H18.
A series of barrier unwind scenarios are specified by the user in the boxed area B10:F20.
The user can specify different times remaining to option expiry (column B), ATM
volatilities (column C), smiles (column D), skews (column E), and rate drifts (column F).
Between 1 and 8 entries may be used for each of these categories. Cases are created for
all possible combinations of entries. The spreadsheet has been set up to accommodate up
to 144 barrier unwind cases, so the product of the number of entries in each category
must be less than or equal to 144 (the number of entries in each column is displayed on
line 11 of each column, the product of these numbers is displayed in A13). In each
column, the user should leave blanks after the set of entries for the variable in that
column.
Each scenario is displayed on a separate line from 43 to 186. On each of these lines is
displayed the variable values corresponding to the case (columns C to G), the proceeds
from unwinding the call option at the barrier (column J) and the cost of unwinding each
put option at the barrier (columns K through Q). Call and put payouts are summed in
column G and statistics computed on the average net payout (H2), average absolute
payout (H3), and maximum absolute payout (H4). The user can specify in I2 and I3 the
mix of these 3 statistics to be minimized. The quantity to be minimized is in H6. H6 also
adds in a small contribution due to the sum of squares of the put amounts, to avoid
blowing up the sizes of hedges. The EXCEL SOLVER is called to find the amounts of
put options (I12:I19) which minimizes barrier unwind uncertainty. The proceeds from
selling these puts is computed in E4. Added to the cost of the vanilla call (E3), this gives
the cost of creating a down-and-out call (E1).
33
The CarrBarrierMC spreadsheet performs a Monte Carlo simulation of a Carr static
hedge of a down-and-out call barrier option. The calculations used in each individual case
of the simulation exactly match the down-and-out call calculation of the CarrBarrier
spreadsheet. By simulating the results of the hedge over a distribution of conditions that
could prevail at the time of the barrier being hit, a distribution of P&L results can be
generated.
The two variables to which unwind costs will be most sensitive are the volatility skew
and the drift at the time of unwind. These two variables are simulated by allowing
specification of distribution parameters and correlation between the two variables, using
the same calculations as in the MixtureOfNormals spreadsheet. Other variables to which
unwind costs are less sensitive – at-the-money volatility, volatility smile, and interest rate
– are modeled more simply, as normal variables uncorrelated with one another.
Inputs and outputs can all be found on the Main worksheet, while computations of the
Monte Carlo cases are performed on the MC, Regime, Price, and Time worksheets.
Inputs are:
For volatility skew at time of unwind, mean for cases 1 and 2 in C2 and E2, respectively;
standard deviation for cases 1 and 2 in C3 and E3, respectively.
For annualized drift (in the forward curve) at time of unwind, mean for cases 1 and 2 in
C4 and E4, respectively; standard deviation for cases 1 and 2 in C5 and E5, respectively.
Correlation between volatility skew and drift for cases 1 and 2 in C6 and E6,
respectively.
Probability of Case 2 in E1 (probability of Case 1 is just 100% minus the probability of
Case 2).
At-the-money volatility at time of unwind – mean in E8, standard deviation in E9.
Volatility smile at time of unwind – mean in F8, standard deviation in F9.
Interest rate level at time of unwind – mean in G8, standard deviation in G9.
Underlying price volatility in D9.
Annualized drift that will govern the evolution of the underlying price (as opposed to the
drift at unwind) in H8.
Time to expiry of option in G1.
Number of periods into which the time to expiry will be divided (for the purpose of
determining the date the barrier is hit) in G2.
Price of the underlying at the time the option is written in B8.
Strike of the call option in B9.
Down-and-out barrier level in B10.
Outputs are:
The mean and standard deviation of unwind costs in B14 and B15, respectively.
The percentage of unwind losses that exceed certain levels – the levels are user inputs in
A17:A20 and the loss percentages are output in B17:B20.
34
As checks that the Monte Carlo has produced desired distributions of input variables, the
calculated mean and standard deviation of the volatility skew is output in I2 and I3,
respectively, the calculated mean and standard deviation of the drift is output in I4 and I5,
respectively, the correlation between volatility skew and drift is output in I6, the mean
and standard deviation of at-the-money volatility at unwind in E11 and E12, respectively,
the mean and standard deviation of volatility skew at unwind in F11 and F12,
respectively, and the mean and standard deviation of the interest rate level at unwind in
G11 and G12, respectively.
Calculations are performed in the following order:
The Regime worksheet calculates the volatility skew and drift for each case, using the
same computations that are used in the MixtureOfNormals spreadsheet. To save
computational time in the simulation, this spreadsheet calculates call and put prices using
standard EXCEL functions rather than using the user-written Black function used in the
CarrOption spreadsheet.
The Price spreadsheet follows the evolution of the underlying price by period in each
case to allow the Time spreadsheet to determine if the barrier is hit and the time the
barrier is hit in each case.
Unwind cost for each case is calculated in the MC spreadsheet, using the following
columns:
Time to expiry when the barrier is hit in A.
Elapsed time from when the option was written to when the barrier is hit in B.
At-the-money volatility in C.
Volatility skew in D.
Volatility smile in E.
Drift in F.
Rate level in G.
Dividend level in H.
The ratio of the forward price when the barrier is hit to the call strike in I.
The volatility of the vanilla call option in J
The price of the vanilla call option in O.
The ratio of the forward price when the barrier is hit to the put strike in P.
The volatility of the vanilla put option in Q
The price of the vanilla put option in V.
The total unwind P & L in W (= call option price in O less put option price in V).
35
The BasketOption spreadsheet computes an approximate value for the volatility to be
used in pricing an option on a basket of assets and also computes the sensitivity of this
volatility to changes in the volatility of the underlying asset and in the correlation
between assets. Corresponding material in the text is in section 12.4.1.
In the general case, 3 inputs are needed: the number of assets in the basket (B6), the
average volatility of each asset (B7), and the average correlation between assets (B8).
Volatility of the basket (B12) is computed by the approximation formula:
1 N 


N 2  N 2  N  2
where N = number of assets in the basket
 = average volatility
 = average correlation
The same formula is then used to compute sensitivities to a change in volatility and a
change in correlation. The size of these changes is input in B2 for volatilities and in B3
for correlations. The recomputed basket volatilities are in C12 for change in volatility
and D12 for change in correlation. The sensitivities to change in volatility (C13) and
change in correlation (D13) are then just the differences between the recomputed
volatility and the base volatility of the basket.
A more detailed computation is available for a 3 asset case. The inputs are the basket
weights of the 3 assets (B17-B19), which should sum to 100%, the volatilities of the 3
assets (C17-C19), and the correlations between assets (D17, D18, E17). Volatility of the
basket (B21), of cases where each volatility is changed separately (C25 – C27), of a case
where all volatilities are shifted (C28), where each correlation is shifted separately (D25,
D26, E25) and where all correlations are shifted together (D28) are computed in a
separate worksheet labeled “Details.” The computation uses the approximation formula
w w  
11, 3
j 1, 3
i
j
i
j
i j
where wi is the weight of each asset in the basket
i is the volatility of each asset in the basket
ij is the correlation between assets
36
The CrossHedge spreadsheet simulates the hedging of a quanto which pays the product
of two asset prices. Inputs are prices for the two assets at 6 points in time (B2:B7 for the
first asset, C2:C7 for the second asset). The hedge is simulated using two different
assumptions, if the asset price moves are completely uncorrelated and if the asset price
moves are completely correlated. Completely uncorrelated price moves are captured by
having the price moves for the first asset take place at different times than the price
moves for the second asset, with rehedges allowed in between. Completely correlated
price moves are captured by having price moves for the two assets occur simultaneously.
Corresponding material in the text is in section 12.4.5.
P&L for the quanto (D9 and K9) which is assumed to have been sold, is calculated as sale
price at the start, which is the product of the two starting asset prices, minus purchase
price at the end, which is the product of the two ending asset prices. P&L for the hedges
is computed for each asset individually (D10 and K10 for asset 1, D11 and K11 for asset
2). Total P&L (D12 and K12) is the sum of the quanto P&L and hedge P&Ls. It should
always be zero for the uncorrelated case.
The cross-hedging strategy, which is calculated in A13:P29, consists of shifting the size
of the asset 1 hedge by the amount of each price change in asset 2 and shifting the size of
the asset 2 hedge by the amount of each price change in asset 1. At the start, the size of
the asset 1 hedge is equal to the initial asset 2 price and the size of the asset 2 hedge is
equal to the initial asset 1 price. At the end, the individual asset hedges are closed out at
the prevailing prices.
37
The AmericanOption spreadsheet calculates risk statistics for the early exercise value of
American call options. Multiple cases are calculated, with one case per column. Inputs
in each column are strike (row 1), time to expiry (row 2), volatility (row 3), risk free rate
(row 4), and drift (row 5). The strike is measured relative to the current spot price of the
underlying asset, with a strike of 100% indicating at-the-money. Corresponding material
in the text is in section 12.5.1.
For each case the European call option price (row 7) is calculated using Black-Scholes
and the American call option price (row 8) is calculated using Cox-Ross-Rubenstein,
with the early exercise value (row 9) calculated as the difference between the two (since
the Cox-Ross-Rubenstein algorithm employed uses the Black-Scholes value as a control
variate, the early exercise value will be calculated as 0 for cases in which early exercise
cannot be economical). The European option vega is calculated in row 10, and the early
exercise value is shown as a percentage of both the European option price (row 12) and
the vega (row 13), to give a measure of its relative impact.
Risk statistics calculated are the ratio of the American to European delta (row 15), the
ratio of the American to European vega (row 16), the sensitivity to a 1% change in the
drift per $1MM par value (row 18).
This calculation can be used for puts on an asset by treating the put as a call to exchange
currency for the asset, as explained in the introduction to chapter 9. For example, a put
on a share of stock with current stock price of $100, strike of $80, risk-free rate of dollars
of 5%, and stock borrow rate of 2%, could be entered as a call to exchange $100 for 1.25
shares of stock (1.25 = $100/$80), which is 125% of the current spot value, with a riskfree rate of stock borrow of 2%, and a drift of 2%–5% = –3%.
38
The TermStructure spreadsheet illustrates the difficulties involved in pricing yield curve
shape dependent products. It shows that different combinations of input parameters
which result in identical pricing of European caps/floors and swaptions can lead to very
different pricing of yield curve shape dependent products. Corresponding material in the
text is in section 12.5.2.
To keep calculations simple, the products being priced only have two possible option
tenors, 1 year or 2 years. Inputs are (we use the description 1-2 FRA for the forward rate
agreement on 1 year rates which set 1 year from today and 2-3 FRA for the forward rate
agreement on 1 year rates set 2 years from today):
1. The current 1-2 and 2-3FRA rates (B1 and B2)
2. The volatility of the 2-3 FRA over the next year (E4)
3. The volatility of the 2-3 FRA over the year following
4. The volatility of the 2-3 FRA over the year following the next year (F4)
5. The correlation between movements in the 1-2 FRA and the 2-3 FRA over the
nest year (G4)
The Spreadsheet prices a 1-year into 2-year European swaption (C5) and a 2 years into 1
year European swaption (C6) as well as the following yield curve shape dependent
products: Bermudean swaption ((8), knock-out floor (C9), a 1-year option on the spread
between the 1-2 between the 1-2 FRA and the 2-3 FRA (C10), and a 1 year option on the
2-3 FRA with a strike which resets based on where the 1-2 FRA level in 1 year (C11).
The matrix in D5:G11 shows the dependency of product pricing on inputs. All pricing is
done using a Monte Carlo simulation. By having only two swap tenors, we can price the
Bermudean swaption using Monte Carlo by the "trick" of taking the maximum between
the value of a 2-year swap in 1 year and a 1 year option over the2-3 FRA at that time.
The Monte Carlo simulation uses 2 sets of random numbers, 2,000 numbers to a set,
which have been chosen to be normally distributed with mean of 0, standard deviation of
1, and correlation between the 2 sets very close to 0 (the program which selected these
random numbers uses a combination of stratified sampling and Cholesky decomposition
to fit the desired parameters). The 2 sets of random numbers are contained in B18:B2017
and C18:C2017 — averages, standard deviations and the correlation are computed in
B13:C14 and B15.
A lognormal distribution of the 1-2 FRA at the end of one year is generated in
D18:D2017 using the random number set B18:B2017, the beginning 1-2 FRA, B1, and
the volatility of the 1-2 FRA, D4. An adjustment is made based on a percentage
(contained in D17) of the square of the volatility which causes the average 1-year forward
price of the FRA to be very close to par (which is the correct arbitrage-free condition,
since it is prices not interest rates which should determine potential arbitrages), with FRA
prices computed in M18:M2017 and averaged in M13.
39
A lognormal distribution of the 2-3 FRA at the end of one year is generated in E18:E2017
using the random number set C18:C2017, the beginning 2-3 FRA, B2, the volatility of
the 2-3 FRA, E4, and the correlation with the 1-2 FRA, G4. The correlation is achieved
using the techniques shown in Hull (2002) section 18.6. An adjustment is made based on
a percentage (contained in E17) of the square of the volatility which causes the average
1-year forward price of the FRA (N13) to be very close to par.
By using lognormal distributions of the underlying FRAs, we are assuming a flat
volatility surface (no skew or smile), so any differences in the pricing of yield curve
shape dependent products is due entirely to the impact of correlation and not to volatility
surface shape.
To see how the pricing of yield curve shape dependent products is impacted by changes
in correlation, we can hold fixed the volatility of the 1-2 FRA, which determines the price
of a 1-year European caplet on one year rates, and the prices of the 1-year into 2-year
swaption and the 2 year into 1 year swaption. For a changed correlation, we need to reset
the first and second year volatilities of the 2-3 FRA to get back to the prices of the 1 year
into 2-year swaption and 2-year into 1-year swaption. This can either be done by trial
and error or by using the EXCEL SOLVER to change these volatilities to minimize the
squared differences (contained in J9) these swaption prices and target swaption prices in
cells I5 and I6.
The remainder of this documentation gives details of the calculation of the price of each
product. In all cases the product is first priced as of the end of one year from now and
then discounted to today at the current 1-yeaar rate contained in B3. The price at the end
of one year from now is always determined as a simple average over the 2,000 Monte
Carlo cases.
The 2 into 1 swaption is priced in column F. The price in each case is determined by
what a 1-year put option priced one year from now would be. The strike of the put option
is the coupon of the swaption (contained in N1) and the current 2-3 FRA is taken from
column E. The volatility of the put option is the second year volatility of the 2-3 FRA
(F4). Since payments received on the put will not take place until the end of year 3, they
must be discounted by both the 1-2 FRA from column D and the 2-3 FRA from column E
to get the value at the end of 1 year.
The 1 into 2 swaption is priced in column H as the maximum between 0 and the
difference between the value of a 2-year swap in one year, which is priced in column G.
The value of the 2-year swap in 1 year is determined by the coupon on the swap
(contained in N1) and the 1-2 FRA rate from column D and the 2-3 FRA rate from
column E which are used to discount the coupons and final principal payment.
The Bermudean swaption is priced in column I as the maximum in one year between the
value of the 2 into 1 swaption from column F and the 2 year swap from column G.
40
The knock-out floor is priced in column J. It has 0 value if the 1-2 FRA in one year from
column D is greater than the coupon in N1. Otherwise, it has the value of a 2 into 1
swaption from column F.
The payoff on the spread option priced in column K is simply the maximum between 0
and the spread between the 2-3 FRA from column E and the 1-2 FRA from column D.
The reset option priced in column L is a call option on the 2-3 FRA with a strike set at the
current level of the 1-2 FRA. So the underlying price is the 2-3 FRA taken from column
E, the strike is the 1-2 FRA taken from column D, and the volatility is the second year
volatility of the 2-3 FRA (F4). For simplicity, discount and dividend rates have been set
to 0.
41
The CreditPricer spreadsheet translates between par yields and default rates for risky
bonds and also prices risky bonds based on the derived default rates. Computations only
cover bonds with a whole number of years to maturity less than or equal to five, with
annual coupon payments. All inputs and principal results are on the Main worksheet.
Supporting computations are on the Details worksheet. Corresponding material in the
text is in section 13.1.
Inputs are continuously compounded zero coupon rates for a risk free instrument
(B4:B8), annual default rates for the risky bond (D4:D8) and a loss given default rate for
the risky bond (F1) and par rates for the risky bond (G4:G8).
Simple computations are the risk free discount rates (C4:C8) and the risk free par rates
(F4:F8) from the zero coupon rates, cumulative default rates (E4:E8) from the annual
default rates. The risky spreads (H4:H8) are calculated as the spread between input par
rates for risky bonds and calculated par rates for risk free bonds.
The more detailed computations on the Details worksheet are the pricings of the risky
par bonds in cells A1:O8. Let’s focus on just one example: the 5 year risky par bond
price computed in cells N1:O8. The price in cell O7 consists of the sum of discounted
expectations of cash flows received if no default occurs, computed in N2:N7 and the sum
of the discounted expectations of cash flows received if default does occur, computed in
O2:O6. All discounting is done at the risk free discount rates, since probability of default
is being explicitly accounted for through lower receipts in the event of default rather than
through higher discounting of promised receipts. In each year, the cash flows received if
default does not occur are the ordinary coupon payments plus the return of principal in
the final year. Each is multiplied by 1 – the cumulative default probability for that year.
Cash flows received if default does occur in a given year is the principal amount
multiplied by 1 – the loss given default (recall from pages 3-4 of chapter 12 that in
bankruptcy only the principal amount can be claimed for recovery). The chance that this
cash flow will be received in a given year is the probability that no default occurred in a
previous year and that default did occur in this year, which is the product of (1–last year’s
cumulative default rate) and this year’s annual default rate.
While the spreadsheet allows par coupon rates for the risky bonds to be input, the
resulting pricing of the risky par bonds in Details A1:A8 may not result in bond prices of
100%. This can be corrected in one of two ways; using the Solve functionality of
EXCEL. Either the annual default rate inputs in D4:D8 are altered to fit the input par
coupon rates or the par coupon rates for the risky bond input in G4:G8 are altered to fit
the input annual default rates. In either case, the target cell for Solve is H10 which sums
the absolute difference between the prices of the risky par bonds and 100%.
The spreadsheet also supports the pricing of risky bonds with selected tenor (1,2,3,4, or 5
years) and selected coupon rate. Three combinations of tenor and coupon rates can be
entered in A12:B14. The resulting prices are displayed in C12:C14, with computations
42
following the same algorithm as those for the risky par bonds described above. These
calculations are contained in the Details worksheet in cells A12:H18.
The MertonModel spreadsheet calculates default probabilities and distance to default
using the simplified model documented of section 13.2.3. Inputs are:
 E0, the current market value of firm equity
 D0, the current value of firm debt, discounted at the risk-free rate
 E, the annualized implied volatility of equity
 T, the time to debt maturity (in years)
Outputs are:
 Pd, the probability of default
 Ld, the % loss in the event of default
 S, the required annualized spread above the risk free debt to compensate the (risk
neutral) expected default loss
 The current market value of firm debt
 The distance to default
Intermediate computations include V0, the current market value of total firm assets, and
v, the annualized volatility of total firm value. V0 and v are calculated by the EXCEL
SOLVER to fit calculated values of E0 and E (using the equations on page 14 to relate E
and E to V0 and v) to the input values of E0 and E. The square root of the sum of the
squares of the differences between input and calculated values is computed in B19 and is
minimized by the SOLVER.
43
The JumpProcessCredit spreadsheet implements the jump process model of credit
defaults described in Section 13.2.4.1.
The model has seven inputs – stock price (B2), annualized volatility of stock price (B3),
the debt-per-share (B4), the default barrier as a % of debt (B5), the standard deviation of
the default barrier (B6), the recovery rate of the particular instrument you are analyzing
(B7), and the risk-free interest rate (B8). Output consists of the following, for each
maturity from 1 year through 10 years: the cumulative default probability (the
probability that a default will take place in any year prior to maturity; in column D) the
forward default probability (the probability that default will take place during the
maturity year; in column B), the annualized default probability (the annual probability of
default that when compounded gives the cumulative default probability; in column F), the
annualized loss (which is just the annualized default probability multiplied by (1 – the
input recovery rate; in column G), and the par CDS spread (the spread on a CDS of the
specific maturity that would exactly compensate the writer of CDS insurance for
expected loss; in column H).
The model and assumptions used closely follow that documented in CreditGrades (2002).
This model is also documented in Schonbucher (2003, Section 9.5). Details of the
calculations are displayed in columns K through U, using the notation of CreditGrades
(2002).
Of the seven inputs, three can be determined from available data: the current stock price ,
the debt-per-share, and the risk-free rate. Methodology for estimating the current debtper-share can be found in Appendix B of CreditGrades (2002), which recommends some
adjustments to published debt-per-share before inputting to the model. For accuracy, the
risk-free rate should be input for each maturity; in the spreadsheet, we utilize the
approximation of a single risk-free rate for all time periods.
Equity volatility could in theory be based on levels that can be assured by entering into
volatility swaps determined by the sensitivity of values of CDS holdings to change in
equity volatility inputs. In practice, this may be placing too much reliance on the
predictive accuracy of this model. Simple forecasts of equity volatility (differing by
maturity, for better accuracy) are probably the best input.
CreditGrades(2002) Section 2.2 gives an argument for using the average recovery rate on
all of the firms debt as the input for the default barrier as a % of debt outstanding, but this
is only a heuristic argument and I prefer to leave this input to the user who can choose the
CreditGrades assumption or experiment with default barrier levels that seem to fit the
historical credit spreads of the particular issuer or category of issuers. If the user chooses
to experiment with different barrier levels to fit historical credit spreads, then the input
for debt-per-share becomes somewhat arbitrary, since its only role in the model is in
determining the default barrier as a product of the debt-per-share and the default barrier
as % of debt outstanding.
44
As discussed in Section 13.2.4.1, standard deviation of the default barrier is
assumed to represent uncertainty about the current level of the default
barrier, and hence is independent of time period. Section 2.3.2 and Figure
2.2 of CreditGrades (2002) shows the impact of the standard deviation of
the default barrier on the term structure of credit spreads. Evidence is
presented there that a standard deviation of 30 percent for the default
barrier, derived from historical statistics on actual recovery data, produces a
term structure of credit spreads that is consistent with market observations.
45
The CDO spreadsheet calculates credit losses on each tranche of a CDO given input
about the expected value and distribution of losses on the pool of underlying credits for
the CDO.
Input and outputs are located on the Main worksheet while primary calculations are
performed on the Calculation worksheet.
Principal inputs are overall expected loss on the underlying pool (B2), correlation
between losses (B1) and the break points for tranches (B11:G11). Other inputs are the
size of “deltas” to use in calculating sensitivities: loss delta in E1, default delta in E2,
correlation delta in E3, and jump delta in E4. Heavier tails can be generated by inputting
tail factors greater than 100% in cells B6:B8 and/or factors greater than 100% for
correlation factors in cells C6:C8. Inputting 100% as inputs in B6:B8 and E6:E8 will
result in a run corresponding to the Gaussian Copula Model, as documented in
Section 13.3.3 of my book and in Section 23.9 of Hull (2012).
Outputs are displayed for each tranche, in columns B through G, and for the entire pool,
in column H. Outputs are: the expected loss for each base tranche (row 12), expected loss
for each tranche (row 13), loss as a % of investment (row 14), standard deviation of loss
(row 15), standard deviation of loss as a % of average loss (row 16), sensitivity to a
change in overall expected loss (row 17), sensitivity to a default (row 18), sensitivity to a
change in the correlation factor (row 19), and sensitivity to a jump in the expected loss
(row 20). Also shown are the % distribution of sensitivities between tranches: to a change
in expected loss (row 21), to a default (row 22), to a change in the correlation assumption
(row 23), and to a jump in expected loss (row 24). Note that since sensitivity to a
correlation change will be positive for some tranches and negative for other tranches, the
% distribution shown in row 23 is a % of the sum of absolute changes due to correlation,
calculated in row 27. Also shown is the loss by tranche (rows 32 and 35) and loss as a %
of investment by tranche (rows 33 and 36) corresponding to two very large changes in the
common factor driving all losses – the first corresponding to a 1.05% probability and the
second corresponding to a 2.45% probability.
The Calculation worksheet performs the computations that produce these outputs. Each row
Of Column E corresponds to an instance of equation (23.12) in Hull (2012). Parallel
calculations are performed in the LossDelta, DefaultDelta, CorrDelta, and Jump
worksheets to produce the sensitivity outputs. The Factor worksheet produces piecewise
linear interpolations of the input tail factors and correlation factors, for use in columns B
and A, respectively, of the Calculation worksheet.
46