Bond Pricing: Z-Spread

This is a series of short posts examining the bond markets and some of the key pricing, risk and quoting concepts (with EXAMPLES!) –
        The Yield Curve
        Duration/Convexity and DV01
        Spread Quoting
        Roll PnL

An alternative to the spread-to-benchmark for a credit-risky bond that tries to capture the full shape of the yield curve is the Z-Spread.

Since govvies are ‘risk-free’, we should be able to recover the market price of a govvie by discounting each of its cashflows using the discount factor coming from the point on the yield curve that the payment occurs*. If we perform the same calculation for a higher-yielding corporate bond, but offset the yield curve that we use for discounting by a fixed amount \Delta at each cashflow payment such that the sum of the PVs of the cashflows matches the bond’s traded price, then this \Delta is the bond’s Z-Spread (in this case, interpolation IS used to find discount factors at each time).

A yield curve implied from govvies, and another offset by a constant Z-Spread of 1.1%. On the right axis, the corresponding discount curves

In the graph above, we show the effect of this parallel shift of the yield curve on the discount factors that we use to discount the payments at each time coming from the risky coupon. A larger spread between the two yield curves leads to a more rapidly falling discount curve and lower prices for credit bonds.

Putting this together, we can find the Z-Spread by fixing \Delta to solve the equality

(1)   \begin{align*} C(t) &= \sum^{N}_{i=1} CF(t_i) \cdot \frac{1}{\Bigl(1 + ( r_{gy}(t_i) + \Delta ) \Bigr)^{t_i}} \end{align*}

where C(t) is the market price of the bond, CF(t_i) are the cashflows at each time t_i, and r_{gy}(t_i) is the govvie yield at time t_i interpolated from the yield curve (compare this to the equality we had to solve to calculate YtM, discussed in an earlier post).

What is the advantage of the Z-Spread over the plain spread to benchmark? Firstly, as we interpolate discount factors to each coupon payment date, we come up with a measure that behaves continuously as maturity and coupon payment dates increase, where spreads jump as benchmarks bonds change along the curve. Secondly, the Z-Spread gives us some measure of how much pickup we are getting over the risk-free payment we would receive for our bond, so Z-Spread gives us a good quantity for comparing similar maturity bonds from different issuers or bonds at different points on the curve from a single issuer (‘Relative Value’ ideas involving going long one bond and short another are often quoted in terms of the Z-Spread pickup that the Asset Manager will achieve). Practically, as seen below, spread and Z-Spread are typically fairly similar when maturity date and payment date of the benchmark and the corp bond are close to overlapping.

*Note the subtle implication here – the yield curve shows the return for a zero coupon bond, coupon-bearing bonds will display a slightly different yield than the yield curve implies for their maturity, as discussed in an earlier post. This effect is very, very small except for long-dated bonds with large coupons, as shown in the example.

Example: assuming the yield curve for USD has the values shown in the table in the image below, calculate the Z-Spread for a BB-rated corp bond paying a 6% coupon with 4 years left to maturity and trading at $104 (paying biannual coupons, assume it recently paid a coupon and this is reflected in the pricing).

Data to go with the Z-Spread example

Answer: Since the bond pays bi-annual coupons, we’ll need to discount a $3 payment at each 6m interval out to 4 years. The table is missing a 3.5y point so let’s interpolate linearly between 3y and 4y, giving 3.1% ytm for that point. Discount factors can be approximated as (1+r_y+\Delta)^t where t is time in years, and the sum-product of these with the relevant cashflow payments should be the traded price of $104, which hopefully leads you to a calibrated Z-Spread of \Delta=1.804%

Bonus: Consider the govvies used to build the yield curve. Imagine that they all paid 5% coupons (biannual payments). Discount each payment according to the yield curve to determine what their traded price should be today, and then use the YtM formula from the Yield Curve post to determine their yield to maturity. Observe that is is close to, but not the same as, the yield curve’s yield (eg. for the bond maturing in 3y, the YtM should be 2.96% – so note that coupon bearing bonds should have a YtM BELOW that of a ZCB for an upward-sloping yield curve, reflecting that these bonds return a portion of your investment earlier than maturity as coupons, which the market is pricing ass less risky).

Fitting the initial discount curve in a stochastic rates model

I’ve introduced the Vasicek stochastic rates model in an earlier post, and here I’m going to introduce a development of it called the Hull-White (or sometimes Hull-White extended Vasicek) model.

The rates are modelled by a mean-reverting stochastic process

    \[dr = \bigl( \theta(t) - a r(t) \bigr) dt + \sigma dW_t\]

which is similar to the Vasicek model, except that the \theta(t) term is now allowed to vary with time (in general a and \sigma are too, but I’ll ignore those issues for today).

The freedom to set theta as a deterministic function of time allows us to calibrate the model to match the initial discount curve, which means at least initially our model will give the right price for things like FRAs. Calibrating models to match market prices is one of the main things quants do. Of course, the market doesn’t really obey our model. this means that, in time, the market prices and the prices predicted by our model will drift apart, and the model will need to be re-calibrated. But the better a model captures the various risk factors in the market, the less often this procedure will be needed.

Using the trick

    \[d \bigl( e^{at} r(t)\bigr) = e^{at} \bigl(dr + ar(t)dt \bigr)\]

to re-express the equation and integrating gives

    \[r(t) = r_0 e^{-at} + e^{-at}\int^t_0 \theta(u) e^{au} du + \sigma e^{-at} \int^t_0 e^{au} dW_u\]

where r_0 is the rate at t=0. The observable quantities from the discount curve are the initial discount factors (or equivalently the initial forward rates) P(0,t), where

    \[P(0,t) = {\mathbb E}\bigl[ e^{-\int^t_0 r(u) du} \bigr]\]

The rate r_0 is normally distributed, so the integral \int^t_0 r(u) du must be too. This is because an integral is essentially a sum, and a sum of normal distributions is also normally distributed. Applying the Ito isometry as discussed before, the expectation of this variable will come wholly from the deterministic terms and the variance will come entirly from the stochastic terms, giving

    \begin{align*} {\mathbb E} \bigl[ \int^t_0 r(u) du \bigr] &= r_0 B(0,t) + \int^t_0 e^{-au} (\int^u_0 \theta(s) e^{as} ds ) du \nonumber \\ {\mathbb V}\bigl[ \int^t_0 r(u) du \bigr] &= \sigma^2 \int^t_0 B(u,t)^2 du \nonumber \end{align*}

where throughout

    \[B(t,t') = {1 \over a}\bigl( 1 - e^{-a(t'-t)}\bigr)\]

and since

    \[{\mathbb E} \bigl[ e^x | x \sim {\mathbb N}(\mu,\sigma^2) \bigr] = e^{\mu + {1\over 2}\sigma^2}\]

we have

    \[P(0,t) = \exp \Bigl\{ -r_0 B(0,t) - \int^t_0 e^{-au} \bigl( \int_0^u \theta(s) e^{as} ds + {1 \over 2} \sigma^2 B(u,t)^2 \bigr) du \Bigr\}\]

Two differentiations of this expression give

    \[-{\partial \over \partial t} \ln P(0,t) = r_0 e^{-at} + e^{-at} \int^t_0 \theta(u) e^{au} du + {1\over 2} \sigma^2 B(0,t)^2\]

    \[-{\partial^2 \over \partial t^2} \ln P(0,t) = -ar_0 e^{-at} + \theta(t) - ae^{-at} \int^t_0 \theta(u) e^{au} du + \sigma^2 e^{-at} B(0,t)\]

and combining these equations gives an expression for \theta(t) that exactly fits the initial discount curve for the given currency

    \[\theta(t) = -{\partial^2 \over \partial t^2} \ln P(0,t) - a{\partial \over \partial t} \ln P(0,t) + {\sigma^2\over 2a}( 1 - e^{-2at} )\]

and since -{\partial \over \partial t} \ln P(0,t) = f(0,t) is simply the initial market observed forward rate to each time horizon coming from the discount curve, this can be compactly expressed as

    \[\theta(t) = {\partial \over \partial t} f(0,t) + a f(0,t) + {\sigma^2 \over 2a} ( 1 - e^{-2at} )\]

Today we’ve seen how a simple extension to the ‘basic’ Vasicek model allows us to match the initial discount curve seen in the market. Allowing the volatility parameter to vary will allow us to match market prices of other products such as swaptions (an option to enter into a swap), which I’ll discuss another time. But we’re gradually building up a suite of simple models that we can combine later to model much more complicated environments.

Bootstrapping the Discount Curve from Swap Rates

Today’s post will be a short one about calculation of discount curves from swap rates. I’ve discussed both swaps and discount curves in previous posts, you should read those before this one or it might not make much sense!

Although bonds can be used to calculate discount bond prices, typically swaps are the most liquid products on the market and will go to the longest expiry times (often 80+ years for major currencies), so these are used to calculate many of the points on the discount curve [and often both of these can be done simultaneously to give better reliability].

In the previous post on swaps, I calculated the swap rate X that makes swaps zero-valued at the current time

    \[X = {Z(0,t_0) - Z(0,t_N) \over \sum_{n=0}^{N-1} \tau \cdot Z(0,t_{n+1})}\]

where the t‘s here represent the fixing dates of the swap (although payment is made at the beginning of the following period, so the n‘th period is received at t_{n+1}.

Consider the sequence of times \{t_0 = 0, t_1, t_2, \dots , t_n\} for which a sequence of swaps are quoted on the markets, with swap rates X_i for the swap running from t_0 up to t_i. We can back out the discount factor at each time as follows:

    \[X_0 = {Z(0,0) - Z(0,t_1) \over \tau \cdot Z(0,t_1)}\]

    \[\Rightarrow Z(0,t_1) = {1 \over 1 + \tau X_0 }\]

    \[X_1 = {Z(0,0) - Z(0,t_2) \over \tau \big(Z(0,t_1) + Z(0,t_2)\big) }\]

    \[\Rightarrow Z(0,t_2) = {1 - \tau \cdot X_1 \cdot Z(0,t_1) \over 1 + \tau X_1}\]

and we can see from this the general procedure, calculating another ZCB from each successive swap rate using the expression

    \[Z(0,t_i) = {1 - \sum_{i=1}^{i-1} \big(\tau \cdot X_i \cdot Z(0,t_i) \big) \over 1 + \tau X_{i-1}}\]

These swaps and ZCBs are called co-initial because they both started at the same time t_0.

Now imagine that instead the swaps X_i have the first fixing at time t_i and their final fixing at time t_n for 0 \leq i < n – such swaps are called co-terminal swaps as they start at different times but finish at the same one. Once again we can calculate the discount factors up to a constant factor, this time by working backwards:

    \[X_{n-1} = {Z(0,t_{n-1}) - Z(0,t_n) \over \tau \cdot Z(0,t_n)}\]

    \[\Rightarrow Z(0,t_{n-1}) = Z(0,t_n)\cdot\big( { 1 + \tau X_{n-1} }\big)\]

    \[X_{n-2} = {Z(0,t_{n-2}) - Z(0,t_n) \over \tau \big(Z(0,t_{n-1}) + Z(0,t_n)\big) }\]

    \[\Rightarrow Z(0,t_{n-2}) = Z(0,t_{n})\big( 1 + \tau X_{n-2} ( 1 + \tau X_{n-1}) \big)\]

and so on, the dcfs can be backed out.

To specify the exact values of co-terminal swaps, we need to know at least one dcf exactly. In general the co-initial case will also require this – I implicitly assumed that they started fixing at t=0 where we know Z(0,0) = 1, but for general co-initial swaps we would also have this issue.