11.2 Generating Realizations Directly From Historical Market Data

11.2 Generating Realizations Directly From
Historical Market Data

Historical simulation requires that historical data {αr, …, –2r, –1r, 0r} be converted into a realization {1r[1], 1r[2], … , 1r[m]} of 1R for use in a crude Monte Carlo analysis. Simplistically, historical values tr might be directly used as values 1r[k] of the realization. Let m = α + 1, and set


for all k.

But this would lead to a host of problems. The most obvious is that the resulting realization {1r[1], 1r[2], … , 1r[m]} may be inconsistent with current market prices, interest rates, spreads, implied volatilities, etc.

For example, suppose a key factor 1R1 represents a stock price whose current value 0r1 is EUR 120. If most of our historical data for the stock is from a period when it was trading near EUR 70, values for the realization would cluster around that EUR 70 price rather than the current EUR 120 price.

Our goal is to construct a realization {1r[1], 1r[2], … , 1r[m]} from historical data {αr, …, –2r, –1r, 0r} in a manner that captures the market dynamics reflected in the individual historical data points, but calibrated to current values 0ri of key factors.

Various approaches are possible. In practice, we employ a two-step process:

  1. Apply a linear polynomial to convert the time series of historical data {–αr, … , –2r, –1r, 0r} into a new time series {  , … , –2 , –1 , 0 } consistent with a realization of a white noise process  . Intuitively, this retains the market dynamics of the original data, abstracted from the actual values tri of key factors when the data was captured.
  2. Use another linear polynomial to convert that new time series {  , … , –2 , –1 , 0 } into a realization {1r[1], 1r[2], … , 1r[m]} by adjusting each data point to be consistent with current values 0ri of key factors

Construction of the linear polynomial for the first step parallels that of the white noise risk factor mapping we constructed in Section 7.3.3. The linear polynomial takes the form


where tb is a diagonal n matrix, and ta is a vector. We construct [11.2] component by component, depending upon what each component Ri of R represents.

If a component Ri represents a return with 0 conditional mean, we might consider it already a white noises and set




tbi,i = 1


tai = 0

If Ri represents a return or spread that can be assumed to have a nonzero conditional mean, it is often reasonable to treat the value t–1ri from the previous period as the conditional mean and subtract it:




tbi,i = 1


tai = t –1ri

If Ri represents a price, interest rate, exchange rate, or implied volatility, it is most often reasonable to set


which is a simple return, so



tai = 1

In the vast majority of cases, all components of R can be addressed in one of the above three manners, so we may consider mapping [11.2] specified.

The polynomial for the second step is the inverse of [11.2] but with one change: for each element k , it is applied as of time 0.


This gives us a realization {1r[1], 1r[2], … , 1r[m]} constructed directly from historical data, but consistent with current market conditions.

By composing the two steps [11.2] and [11.12], we combine them into a single step:


11.2.1 Example

Today is January 11, 2002. Let R1 represent the value of 3-month CHF Libor. Exhibit 7.7 indicates 30 days of data, which you used for Exercise 7.2. Let’s use the data to construct an historical realization of a sample for 1R1.

It would be unreasonable to treat R1 as white noise. Its unconditional mean is not 0. Assume t | t–1μ1 = t –1r1 for all t, and transform R1 to white noise  1 with


Applying the transformation to the data of Exhibit 7.7, we obtain white noise data shown in Exhibit 11.1.

Exhibit 11.1: White noise data calculated from the data of Exhibit 7.7 with transformation [11.6].

We apply the inverse transform for time t = 0,


to obtain the historical realization indicated in Exhibit 11.2. A histogram of the historical realization is indicated in Exhibit 11.3.

Exhibit 11.2: Historical realization of a sample for 1R1 for use in a historical simulation. Interest rates are expressed as percentages.
Exhibit 11.3: Histogram of the historical realization. The current CHF Libor rate of 1.673% is indicated in the exhibit with a dark blue triangle.
11.2.2 Mirror Values

Histogram 11.3 highlights a common problem with historical simulation. In the example, we assumed that the expected value of 1R1 equals the current value 0r1, which is 1.673%. However, this is not the sample mean of the historical realization. In the histogram, most values fall to the left of 1.673%. This results from the fact that the historical data from which we derived the realization was from a period during which CHF Libor fell. It started the period at 2.130% and ended the period at the current value of 1.673%. On an average day during that period, Libor fell, and this is reflected in our historical realization.

Holton (1998) describes a solution to this problem whereby “mirror” values are added to the historical realization. For each value real numbers of the realization, add another value:


This doubles the size of the sample and ensures a sample mean 1 | 0μ1. The solution assumes that the conditional distribution of 1R1 is symmetric.

We add mirror values to the historical realization of our example. A histogram of the new realization is indicated in Exhibit 11.4.

Exhibit 11.4: Histogram of the new historical realization obtained by adding mirror values to the historical realization depicted in the histogram of Exhibit 11.3.

11.3 Calculating Value-at-Risk With Historical

Historical simulation dispenses with an inference procedure. Or you could say that construction of a realization {1r[1], 1r[2], … , 1r[m]} from historical data is the inference procedure—it characterizes a distribution for 1R, not with some standard joint distribution—or perhaps a mean vector and covariance matrix—but with a realization of a sample. As with any VaR measure, a mapping procedure is required. This may include one or more remappings. The Monte Carlo analysis is performed as in Section 10.2. The only difference is that the realization {1r[1], 1r[2], … , 1r[m]} is constructed as in Section 11.2 above, rather than with standard methods for constructing pseudorandom vectors, as described in Section 5.8.3. A crude Monte Carlo estimator is used because techniques of variance reduction and the method of selective valuation of realizations—both described in Section 10.5—are incompatible with historical simulation.