SigmaField
Mathematical Foundations for Quant Finance
0 of 256 lessons
      1. 3.5.1 Span, independence and basisConcept · 35 min
      2. 3.5.2 Orthogonal projectionConcept · 35 min
      3. 3.5.3 Least squaresConcept · 30 min
      4. 3.5.4 Practice set: spaces and projectionsPractice set · 25 min
      5. 3.5.5 Case study: the minimum-variance hedge as a projectionCase study · 35 min

Level 3, Linear algebra 3.5 Spaces and projections Lesson 5 of 5

Case studyLesson 3.5.5 in Level 3, Linear algebra. About 35 minutes.

Case study: the minimum-variance hedge as a projection

The data

The returns below are invented for illustration, not market data. They are 60 monthly returns made with a fixed seed. Each month the index moves at random, and the stock moves 1.2 times the index plus a move of its own.

Write x\mathbf{x} for the stock's 60 returns and f\mathbf{f} for the future's, two vectors in R60\mathbb{R}^{60} as in case study 3.1.4. A future's return here means its gain per dollar of index it covers; the cost of holding it is left out.

The stock's monthly volatility is 6.26%, or 21.69% a year after multiplying by 12\sqrt{12} (case study 3.2.5). The future's is 4.63% a month, and the correlation of the two is 0.852.

Try it

rng.normal(mean, size, 60) draws 60 random numbers around mean, of typical size size (Level 5 explains it). The returns are rounded to 0.01%.

The cell prints the first three months of each, then the two monthly volatilities, the stock's annual volatility and the correlation.

⌘/Ctrl + Enter runs the cell

The variance of a hedged position

Hold $1 of stock and sell hh dollars of futures. Each month the position returns x−hf\mathbf{x} - h\mathbf{f}, and hh is called the hedge ratio. Its variance is case study 1.2.4's two-asset formula with weights 1 and −h-h, or w⊤Σw\mathbf{w}^\top\Sigma\mathbf{w} with w=(1,−h)\mathbf{w} = (1, -h) (case study 3.2.5):

Var⁡(x−hf)=Var⁡(x)−2hCov⁡(x,f)+h2Var⁡(f)\begin{aligned} \operatorname{Var}(\mathbf{x} - h\mathbf{f}) = {} & \operatorname{Var}(\mathbf{x}) - 2h\operatorname{Cov}(\mathbf{x}, \mathbf{f}) \\ & + h^2\operatorname{Var}(\mathbf{f}) \end{aligned}

These are sample variances and covariances, dividing by n−1=59n - 1 = 59. Here Var⁡(x)=0.003921\operatorname{Var}(\mathbf{x}) = 0.003921, Cov⁡(x,f)=0.002471\operatorname{Cov}(\mathbf{x}, \mathbf{f}) = 0.002471 and Var⁡(f)=0.002145\operatorname{Var}(\mathbf{f}) = 0.002145, all monthly.

The variance is a parabola in hh that opens upwards. Its lowest point, the vertex of lesson 1.2.2, is at h∗=Cov⁡(x,f)Var⁡(f)=1.1518h^* = \frac{\operatorname{Cov}(\mathbf{x}, \mathbf{f})}{\operatorname{Var}(\mathbf{f})} = 1.1518. (The rounded numbers above give 1.152.)

hh00.511.15181.52
volatility, a month6.26%4.46%3.35%3.28%3.65%5.12%
volatility, a year21.69%15.44%11.62%11.36%12.66%17.73%

Selling one dollar of futures per dollar of stock already does well, 11.62%. Selling two does worse than selling half: beyond h∗h^* the extra futures are a bet against the index.

Rule: Minimum-variance hedge ratio

h∗=Cov⁡(x,f)Var⁡(f)h^* = \frac{\operatorname{Cov}(\mathbf{x}, \mathbf{f})}{\operatorname{Var}(\mathbf{f})}

x\mathbf{x} holds the returns of the position to hedge and f\mathbf{f} those of the hedge. Selling h∗h^* dollars of the hedge per dollar of position leaves the least variance. With correlation ρ\rho and volatilities σx\sigma_x and σf\sigma_f, h∗=ρ σxσfh^* = \rho\,\frac{\sigma_x}{\sigma_f}.

Try it

The first line prints the three numbers of the parabola, then h∗h^*.

The loop is the table: the volatility of x−hf\mathbf{x} - h\mathbf{f} for each hh, a month and a year.

⌘/Ctrl + Enter runs the cell

The hedge is a projection

Centre both vectors, as in case study 3.1.4: x~=x−xˉ 1\tilde{\mathbf{x}} = \mathbf{x} - \bar{x}\,\mathbf{1} and f~=f−fˉ 1\tilde{\mathbf{f}} = \mathbf{f} - \bar{f}\,\mathbf{1}. Then Cov⁡(x,f)=x~⋅f~n−1\operatorname{Cov}(\mathbf{x}, \mathbf{f}) = \frac{\tilde{\mathbf{x}} \cdot \tilde{\mathbf{f}}}{n - 1} and Var⁡(f)=f~⋅f~n−1\operatorname{Var}(\mathbf{f}) = \frac{\tilde{\mathbf{f}} \cdot \tilde{\mathbf{f}}}{n - 1}. The two n−1n - 1 cancel:

h∗=f~⋅x~f~⋅f~h^* = \frac{\tilde{\mathbf{f}} \cdot \tilde{\mathbf{x}}}{\tilde{\mathbf{f}} \cdot \tilde{\mathbf{f}}}

That is the coefficient of the projection of x~\tilde{\mathbf{x}} onto the line through f~\tilde{\mathbf{f}} (lesson 3.5.2). It is also the slope of the least-squares line of the stock's returns against the future's (lesson 3.5.3). Desks call it the stock's beta to the index.

The centred hedged return, e=x~−h∗f~\mathbf{e} = \tilde{\mathbf{x}} - h^*\tilde{\mathbf{f}}, is the residual of that projection. So it is orthogonal to f~\tilde{\mathbf{f}}: the hedged position is uncorrelated with the future. No other amount of the future removes more of its risk.

What is left

The projection and the residual are the legs of a right-angled triangle with hypotenuse x~\tilde{\mathbf{x}}. By Pythagoras, the sums of squares split: 0.231355=0.167934+0.0634210.231355 = 0.167934 + 0.063421. Divided by 59, the variance 0.003921 splits into 0.002846 removed and 0.001075 left.

The angle θ\theta between x~\tilde{\mathbf{x}} and f~\tilde{\mathbf{f}} has cos⁡θ=ρ=0.852\cos\theta = \rho = 0.852, so θ=31.57°\theta = 31.57° (case study 3.1.4). The residual's length is ∥x~∥sin⁡θ\lVert \tilde{\mathbf{x}} \rVert \sin\theta, so the hedge leaves sin⁡θ=0.5236\sin\theta = 0.5236 of the volatility: 21.69%×0.5236=11.36%21.69\% \times 0.5236 = 11.36\%.

Rule: Risk left by the best hedge

Var⁡(x−h∗f)=σx2(1−ρ2)R2=ρ2=cos⁡2θ\begin{gathered} \operatorname{Var}(\mathbf{x} - h^*\mathbf{f}) = \sigma_x^2(1 - \rho^2) \\[4pt] R^2 = \rho^2 = \cos^2\theta \end{gathered}

R2R^2 is the share of the variance the hedge removes, here 0.8522=0.72590.852^2 = 0.7259. The volatility left is σx1−ρ2=σxsin⁡θ\sigma_x\sqrt{1 - \rho^2} = \sigma_x\sin\theta.

The hedged volatility against the hedge ratio, and the same numbers as a projection. The best hedge removes the part of the stock's centred returns along the future's. The residual at right angles is the risk left, sin⁡θ\sin\theta of the original.

Hedges need high correlations. At ρ=0.5\rho = 0.5, the best hedge leaves 0.75=0.866\sqrt{0.75} = 0.866 of the volatility. Even at ρ=0.9\rho = 0.9 it leaves 0.4359.

Try it

The cell centres both vectors and computes h∗h^* as a projection coefficient. The residual's dot product with f~\tilde{\mathbf{f}} is rounding noise, so the cell tests it against 10−1210^{-12}.

Then Pythagoras, sin⁡θ\sin\theta, R2R^2, and the slope from lstsq with a column of ones (lesson 3.5.3).

⌘/Ctrl + Enter runs the cell
Check yourself
A fund's returns have correlation −0.6-0.6 with an index future. What does the minimum-variance hedge do?

Several hedges

With kk instruments, sell h1,…,hkh_1, \ldots, h_k of them per dollar of the position. Put their centred returns in the columns of a matrix F~\tilde{F}, one row per month. The centred hedged return is x~−F~h\tilde{\mathbf{x}} - \tilde{F}\mathbf{h}, and making its variance smallest is least squares (lesson 3.5.3).

The normal equations are F~⊤F~ h=F~⊤x~\tilde{F}^\top\tilde{F}\,\mathbf{h} = \tilde{F}^\top\tilde{\mathbf{x}}. Divided by n−1n - 1, each entry becomes a covariance: F~⊤F~/(n−1)\tilde{F}^\top\tilde{F}/(n-1) is the instruments' covariance matrix, and F~⊤x~/(n−1)\tilde{F}^\top\tilde{\mathbf{x}}/(n-1) holds their covariances with the position.

Rule: The minimum-variance hedge

ΣHH h=σHvariance left=σx2−σH⊤h\begin{gathered} \Sigma_{HH}\,\mathbf{h} = \boldsymbol{\sigma}_H \\[4pt] \text{variance left} = \sigma_x^2 - \boldsymbol{\sigma}_H^\top\mathbf{h} \end{gathered}

ΣHH\Sigma_{HH} is the covariance matrix of the hedging instruments, and σH\boldsymbol{\sigma}_H the vector of their covariances with the position, whose variance is σx2\sigma_x^2. Entry ii of h\mathbf{h} is how much of instrument ii to sell per unit of the position. With one instrument, this is h∗=Cov⁡Var⁡h^* = \frac{\operatorname{Cov}}{\operatorname{Var}}.

Hedging asset C with A and B

Take the three assets of case study 3.2.5 and hedge a holding of C with A and B. The blocks of Σ\Sigma are

ΣHH=(0.01440.006480.006480.0324)σH=(0.0030.0225)\begin{gathered} \Sigma_{HH} = \begin{pmatrix} 0.0144 & 0.00648 \\ 0.00648 & 0.0324 \end{pmatrix} \\[6pt] \boldsymbol{\sigma}_H = \begin{pmatrix} 0.003 \\ 0.0225 \end{pmatrix} \end{gathered}

Solving gives h=(−0.1145,0.7173)\mathbf{h} = (-0.1145, 0.7173). The variance left is 0.046703, a volatility of 21.61% against C's 25%, so R2=0.2527R^2 = 0.2527. B alone, with h=0.6944h = 0.6944, already gives R2=0.25R^2 = 0.25, which is ρBC2\rho_{BC}^2.

The ratio for A is negative although A and C are positively correlated. Selling 0.7173 of B also sells some of A's moves, since A and B move together, and buying a little A takes that back.

On a sample the same equations hold with sample covariances. Case study 3.2.5's 120 invented months give h=(0.1061,0.4895)\mathbf{h} = (0.1061, 0.4895), both from the sample covariance matrix and from least squares on the centred returns. The sample R2R^2 is 0.1789, against the model's 0.2527: ten years of data pin a hedge down no better than they pin down Σ\Sigma.

Try it

The first block solves ΣHHh=σH\Sigma_{HH}\mathbf{h} = \boldsymbol{\sigma}_H for the model, then gives the variance left, its volatility and R2R^2, and B alone.

The second block uses case study 3.2.5's sample, with the same seed. lstsq on the centred returns and solve with the sample covariances agree, and the residual is orthogonal to both hedges.

⌘/Ctrl + Enter runs the cell

Equal volatilities: case study 3.4.3's system

Case study 3.4.3 hedged a stock with two futures on the same index and took the system Rh=cR\mathbf{h} = \mathbf{c} on trust. Here is where it comes from. Give the stock and every hedge the same volatility σ\sigma.

Then every covariance is σ2\sigma^2 times a correlation: ΣHH=σ2R\Sigma_{HH} = \sigma^2 R, with RR the hedges' correlation matrix, and σH=σ2c\boldsymbol{\sigma}_H = \sigma^2\mathbf{c}, with c\mathbf{c} their correlations with the stock. Dividing ΣHHh=σH\Sigma_{HH}\mathbf{h} = \boldsymbol{\sigma}_H by σ2\sigma^2 leaves Rh=cR\mathbf{h} = \mathbf{c}.

For futures with correlation 0.999 and c=(0.90,0.90)\mathbf{c} = (0.90, 0.90), this gives case study 3.4.3's h=(0.4502,0.4502)\mathbf{h} = (0.4502, 0.4502), with R2=c⊤h=0.8104R^2 = \mathbf{c}^\top\mathbf{h} = 0.8104. One future alone gives h=0.9h = 0.9 and R2=0.81R^2 = 0.81. The second future adds 0.0004, and, as case study 3.4.3 showed, positions that swing with every small change in c\mathbf{c}.

With unequal volatilities, each ratio is scaled by σxσi\frac{\sigma_x}{\sigma_i}, where σi\sigma_i is hedge ii's volatility. For a stock with volatility 0.25 and futures with 0.20 and 0.21, the same correlations give h=(0.5628,0.5360)\mathbf{h} = (0.5628, 0.5360).

Try it

The cell solves the system both ways, with RR and c\mathbf{c} and with ΣHH\Sigma_{HH} and σH\boldsymbol{\sigma}_H for σ=0.2\sigma = 0.2. They agree.

The last lines are R2R^2 for two futures and for one, and the hedge with unequal volatilities.

⌘/Ctrl + Enter runs the cell

The closest copy of the call

Case study 3.3.4 found that the bond and the stock alone cannot copy the call: their payoff matrix has rank 2, below the three states. Least squares finds the closest copy instead. Here h^\hat{\mathbf{h}} holds units bought, as in case study 3.3.4: a negative entry is a short position.

D2=(18011001125),call=(0025)D2⊤D2=(330530532025)D2⊤ call=(253125)\begin{gathered} D_2 = \begin{pmatrix} 1 & 80 \\ 1 & 100 \\ 1 & 125 \end{pmatrix}, \quad \text{call} = \begin{pmatrix} 0 \\ 0 \\ 25 \end{pmatrix} \\[6pt] D_2^\top D_2 = \begin{pmatrix} 3 & 305 \\ 305 & 32025 \end{pmatrix} \\[6pt] D_2^\top\,\text{call} = \begin{pmatrix} 25 \\ 3125 \end{pmatrix} \end{gathered}

The normal equations give h^=(−50,0.5738)\hat{\mathbf{h}} = (-50, 0.5738): sell 50 bonds and buy 0.5738 shares. The copy pays −4.0984-4.0984, 7.3770 and 21.7213 in the down, middle and up states.

downmiddleupsum of squares
call0025
closest copy−4.0984-4.09847.377021.7213
leftover4.0984−7.3770-7.37703.278781.9672

The lines of case study 3.3.4's figure did worse. S−100S - 100 met two states and missed the down state by 20, a sum of squares of 400. The line through the down and up states missed the middle by 11.11, a sum of 123.4568.

What the leftover means

The leftover payoff is orthogonal to both columns of D2D_2. So it adds up to 0 across the three states, and it is orthogonal to the stock's payoffs too. Counting the states as equally likely, it has mean 0 and no covariance with the stock.

So the closest copy is the minimum-variance hedge of the call with the stock, with the bond taking care of the mean. The 0.5738 shares are Cov⁡(call,S)Var⁡(S)\frac{\operatorname{Cov}(\text{call}, S)}{\operatorname{Var}(S)} over the three states, the hedge ratio of the first half of this case study.

The copy costs 8.1598 today: selling 50 bonds brings in 48.50, and 0.5738 shares cost 56.6598. The call trades at 6.75.

That is not an arbitrage: the copy does not pay what the call pays. The difference, 6.75−8.1598=−1.40986.75 - 8.1598 = -1.4098, is the price of the leftover at the market's state prices.

The bond and the stock do not fix those state prices. Along case study 3.3.4's line of state prices, the copy always costs 8.1598, but the leftover costs anything from −6.4098-6.4098 to 3.5902. The whole range of call prices that case study left open, 1.75 to 11.75, sits in the leftover.

Least squares counts every state equally. A desk that thinks some states more likely would weight their misses more, and the holdings would change.

Try it

lstsq finds the closest copy; the leftover is checked against both columns.

The loop prices the copy and the leftover along case study 3.3.4's line of state prices. The last line is the hedge ratio over the three states.

⌘/Ctrl + Enter runs the cell
Check yourself
The closest copy of the call by bonds and shares costs 8.16, and the call trades at 6.75. What follows?

Try it

The loop estimates h∗h^* on each run of 24 months; the next line uses the two halves. Then the percent mix-up and the number of contracts.

⌘/Ctrl + Enter runs the cell
Exercise

The minimum-variance hedge and the closest copy

Write two functions, with NumPy.

  1. min_variance_hedge(target, hedges) returns (h, r2). target holds nn returns of the position, and hedges is either nn returns of one instrument or an n×kn \times k array with one column per instrument. Centre every series and find h\mathbf{h} by least squares. Return it as an array of length kk, with R2=1−∥e∥2∥x~∥2R^2 = 1 - \frac{\lVert \mathbf{e} \rVert^2}{\lVert \tilde{\mathbf{x}} \rVert^2}, where e\mathbf{e} is the centred hedged return.
  2. closest_copy(D, payoff) returns (h, leftover): the holdings whose payoffs D @ h are closest to payoff in the least-squares sense, and payoff - D @ h.

Raise ValueError when the sizes do not match or the target is constant. Raise it too when the hedges, or the columns of D, are dependent: a constant hedge, or one repeated.

The tests use this case study's data and the sample of case study 3.2.5. They also use the call and the put of case study 3.3.4, and each bad input.

See the tests
import numpy as np


def _case_study_data():
    """The 60 invented months of case study 3.5.5 (seed 355): the stock x and the index future f."""
    rng = np.random.default_rng(355)
    index = rng.normal(0.006, 0.045, 60)
    stock = 0.003 + 1.2 * index + rng.normal(0, 0.035, 60)
    return np.round(stock, 4), np.round(index, 4)


def _sample_325():
    """Case study 3.2.5's 120 invented months of A, B and C (seed 7)."""
    sigma = np.array([0.12, 0.18, 0.25])
    R = np.array([[1.0, 0.3, 0.1], [0.3, 1.0, 0.5], [0.1, 0.5, 1.0]])
    Sigma = np.diag(sigma) @ R @ np.diag(sigma)
    rng = np.random.default_rng(7)
    return rng.multivariate_normal(np.array([0.06, 0.08, 0.11]) / 12, Sigma / 12, size=120, method="cholesky")


def _raises_value_error(fn, *args):
    try:
        fn(*args)
    except ValueError:
        return True
    return False


BOND_STOCK = [[1, 80], [1, 100], [1, 125]]
CALL = [0, 0, 25]


def test_one_hedge():
    """The stock hedged with the future: h = Cov / Var = 1.1518, returned as an array of length 1"""
    x, f = _case_study_data()
    h, _ = min_variance_hedge(x, f)
    expect_equal(np.shape(h), (1,), what="shape of h for one hedge")
    expect_close(h[0], np.cov(x, f)[0, 1] / np.var(f, ddof=1), what="h for the stock and the future")
    expect_close(h[0], 1.1518, rel=1e-4, what="h, to 4 decimals")


def test_r2_is_rho_squared():
    """With one hedge, R² is the squared correlation, 0.7259"""
    x, f = _case_study_data()
    _, r2 = min_variance_hedge(x, f)
    expect_close(r2, np.corrcoef(x, f)[0, 1] ** 2, what="R² for one hedge")
    expect_close(r2, 0.7259, rel=1e-4, what="R², to 4 decimals")


def test_small_example():
    """Target (0.02, −0.01, 0.03, 0) hedged with (0.01, −0.01, 0.02, 0): h = 1.4"""
    x = [0.02, -0.01, 0.03, 0.0]
    f = [0.01, -0.01, 0.02, 0.0]
    h, _ = min_variance_hedge(x, f)
    expect_close(h[0], np.cov(x, f)[0, 1] / np.var(f, ddof=1), what="h for the small example")


def test_negative_hedge():
    """Hedging with the opposite of the future gives h = −1.1518: buy it instead of selling"""
    x, f = _case_study_data()
    h, r2 = min_variance_hedge(x, -f)
    expect_close(h[0], -np.cov(x, f)[0, 1] / np.var(f, ddof=1), what="h for the reversed hedge")
    expect_close(r2, 0.7259, rel=1e-4, what="R² for the reversed hedge")


def test_two_hedges():
    """Case study 3.2.5's sample: C hedged with A and B gives h = (0.1061, 0.4895) and R² = 0.1789"""
    X = _sample_325()
    h, r2 = min_variance_hedge(X[:, 2], X[:, :2])
    S = np.cov(X, rowvar=False)
    expect_close(h, np.linalg.solve(S[:2, :2], S[:2, 2]), what="h from the sample covariance matrix")
    expect_close(r2, 0.1789, rel=1e-3, what="R² for C hedged with A and B")


def test_units():
    """The stock in percent and the future in decimals make h 100 times bigger: 115.18"""
    x, f = _case_study_data()
    h, r2 = min_variance_hedge(100 * x, f)
    expect_close(h[0], 100 * np.cov(x, f)[0, 1] / np.var(f, ddof=1), what="h with the stock in percent")
    expect_close(r2, 0.7259, rel=1e-4, what="R² with the stock in percent")


def test_constant_hedge():
    """A hedge that returns 0.3% every month cannot offset anything: ValueError"""
    x, _ = _case_study_data()
    if not _raises_value_error(min_variance_hedge, x, np.full(60, 0.003)):
        raise AssertionError("expected ValueError for a constant hedge")


def test_repeated_hedge():
    """The same future twice is a dependent pair of hedges: ValueError"""
    x, f = _case_study_data()
    if not _raises_value_error(min_variance_hedge, x, np.column_stack([f, f])):
        raise AssertionError("expected ValueError for a repeated hedge")


def test_constant_target():
    """A target that never moves has no risk to hedge: ValueError"""
    _, f = _case_study_data()
    if not _raises_value_error(min_variance_hedge, np.full(60, 0.01), f):
        raise AssertionError("expected ValueError for a constant target")


def test_lengths_differ():
    """60 months of the stock against 59 of the future: ValueError"""
    x, f = _case_study_data()
    if not _raises_value_error(min_variance_hedge, x, f[:59]):
        raise AssertionError("expected ValueError when the lengths differ")


def test_closest_copy_of_the_call():
    """The bond and the stock copy the call best with −50 bonds and 35/61 ≈ 0.5738 shares"""
    h, leftover = closest_copy(BOND_STOCK, CALL)
    expect_close(h, [-50, 35 / 61], what="holdings of the closest copy")
    expect_close(leftover, [250 / 61, -450 / 61, 200 / 61], what="leftover payoff")


def test_leftover_is_orthogonal():
    """The leftover adds up to 0 across the states and is orthogonal to the stock's payoffs"""
    _, leftover = closest_copy(BOND_STOCK, CALL)
    expect_close(np.array(BOND_STOCK, dtype=float).T @ leftover, [0, 0], abs_tol=1e-9, what="D.T @ leftover")


def test_complete_market():
    """With the call added, the put is copied exactly: 100 bonds, −1 share, 1 call, leftover 0"""
    h, leftover = closest_copy([[1, 80, 0], [1, 100, 0], [1, 125, 25]], [20, 0, 0])
    expect_close(h, [100, -1, 1], what="holdings that copy the put")
    expect_close(leftover, [0, 0, 0], abs_tol=1e-9, what="leftover for the put")


def test_dependent_columns():
    """The bond, the stock and case study 3.4.3's fund are dependent: ValueError"""
    D = [[1, 80, 90], [1, 100, 100], [1, 125, 112.5]]
    if not _raises_value_error(closest_copy, D, CALL):
        raise AssertionError("expected ValueError: the fund is 50 bonds and half a share")


def test_states_differ():
    """Three states in D but a payoff for two: ValueError"""
    if not _raises_value_error(closest_copy, BOND_STOCK, [0, 25]):
        raise AssertionError("expected ValueError when the payoff has the wrong length")

Summary card

  • Hedging x\mathbf{x} by selling hh of f\mathbf{f} leaves the variance Var⁡(x)−2hCov⁡(x,f)+h2Var⁡(f)\operatorname{Var}(\mathbf{x}) - 2h\operatorname{Cov}(\mathbf{x}, \mathbf{f}) + h^2\operatorname{Var}(\mathbf{f}), smallest at h∗=Cov⁡Var⁡=ρσxσfh^* = \frac{\operatorname{Cov}}{\operatorname{Var}} = \rho\frac{\sigma_x}{\sigma_f}; here 1.1518, cutting 21.69% to 11.36% a year.
  • h∗h^* is the coefficient of the projection of the centred x~\tilde{\mathbf{x}} onto f~\tilde{\mathbf{f}}; the hedged return is the residual, uncorrelated with the hedge.
  • The best hedge leaves σx1−ρ2=σxsin⁡θ\sigma_x\sqrt{1 - \rho^2} = \sigma_x\sin\theta of the volatility and removes R2=ρ2=cos⁡2θR^2 = \rho^2 = \cos^2\theta of the variance.
  • With several hedges, ΣHHh=σH\Sigma_{HH}\mathbf{h} = \boldsymbol{\sigma}_H: the normal equations of least squares on centred returns. With equal volatilities it becomes case study 3.4.3's Rh=cR\mathbf{h} = \mathbf{c}.
  • The closest copy of the call by the bond and the stock is −50-50 bonds and 0.5738 shares. The leftover (4.0984,−7.3770,3.2787)(4.0984, -7.3770, 3.2787) is the part of the call whose price they cannot fix.
  • Hedge ratios move with the data window; keep signs and units straight, and avoid near-copies.

Free further reading

Optional. This lesson covers what you need; these add more examples and practice. All are free to read.