---
title: "Curve Construction"
book: "Rates, Credit, XVA and Risk"
subject: quant
language: en
chapter: 1
exercises: 8
source: https://one-course.com/books/quant/6/en/chapter/1-curve-construction
---

# Chapter 1 — Curve Construction

On a Friday evening a rates desk replaces the interpolation of its dollar curve: zero rates had been joined by straight lines, and from Monday they will be joined by the method the US Treasury itself adopted in 2021. Every input quote on Monday morning is exactly where it was on Friday, every input instrument still reprices to the last decimal, and yet the desk’s book of seven [off-pillar](#def-rc-curve-construction-pillar) swaps, five billion dollars of notional, shows a loss of 90 thousand dollars, and the hedge the risk system asks for on the fifteen-year swap has grown by two thirds. Nothing in the market moved; the curve between the quotes did. A curve is a model, fitted to a handful of prices and used to value everything between them. This chapter builds one from the instruments up, and measures what each choice costs in value and in hedges. One Quant Book 2, chapter 9, bootstrapped a single overnight-swap curve with one interpolation; here the curve takes deposits, futures and swaps together, is solved globally, and is interpolated in four ways.

## 1.1 Choosing the instruments

**Definition 1.1 (Pillar, instantaneous forward rate).**

A *pillar* of a curve is a date at which the curve carries a free parameter, here the continuously compounded zero rate $z(T)$, so that $P(T)=e^{-z(T)T}$; the curve between pillars is fixed by an interpolation rule. The *instantaneous forward rate* seen at $t$ for time $T$ is

$$
f(t,T) = -\frac{\partial}{\partial T}\ln P(t,T),
\qquad
P(t,T)=\exp\Bigl(-\int_t^T f(t,u)\,du\Bigr),
$$

the rate at which one can lock in, at $t$, borrowing over $[T, T+dT]$.

**Definition 1.2 (Curve calibration).**

*Curve calibration* is the solution for the [pillar](#def-rc-curve-construction-pillar) parameters of a curve such that a chosen set of instruments, each priced on the curve, reproduces its market quote. With one [pillar](#def-rc-curve-construction-pillar) per instrument it is a square system of equations; the general notion of calibration, fitting a model’s parameters to prices, is treated in One Quant Book 4, chapter 24.

The instruments are chosen for liquidity and so that each maturity is covered once. At the front of a dollar curve sit overnight fixings and short overnight-index deposits; then three-month SOFR futures, whose reference quarters tile the first one or two years; then par OIS swaps (One Quant Book 2, chapters 8 and 9). The rule is *no overlaps*: if four futures already fix the forwards to December 2027, a one-year swap maturing in September 2027 adds a second, slightly different price for a period the curve has already priced. Two quotes for one period cannot both be matched unless they agree; the builder either drops one or fits both in a least-squares sense and gives up exact repricing. [Figure 1.1](#fig-rc-curve-construction-instruments) shows the chapter’s choice.

![The instruments of the chapter’s dollar curve over its first two years, and their pillars (dots on the axis, one at each instrument’s maturity). The futures start on the third Wednesday of December 2026 and tile five quarters; the one-year swap would price a period the futures already price, and is left out.](https://one-course.com/images/onecourse/chapters/quant-6/rc-curve-construction/fig-c6559d063654.svg)

***Figure 1.1.** The instruments of the chapter’s dollar curve over its first two years, and their [pillars](#def-rc-curve-construction-pillar) (dots on the axis, one at each instrument’s maturity). The futures start on the third Wednesday of December 2026 and tile five quarters; the one-year swap would price a period the futures already price, and is left out.*

**As of September 2026 — Published curves.**

The US Treasury’s official daily par yield curve has been built with a monotone convex method since 6 December 2021, replacing a quasi-cubic Hermite spline; its inputs are indicative bid-side quotes for the most recently auctioned bills, notes and bonds, collected by the New York Fed near 15:30. The ECB publishes two euro-area government curves, from AAA-rated bonds and from all central-government bonds, every TARGET business day at 12:00 CET, each as the six parameters of a Svensson model ([Definition 1.8](#def-rc-curve-construction-ns)) and the rates they imply.

## 1.2 Calibration: curve bootstrapping and the global fit

Each instrument’s quote is a function of the discount factors up to its maturity. A deposit from spot to $T$ at simple rate $R$ (ACT/360) requires $P(T) = 1/(1+R\delta)$; a future on the quarter $[T_1,T_2]$, once its convexity adjustment is removed (One Quant Book 2, chapter 8), fixes $P(T_1)/P(T_2) = 1+F\delta$; a par swap fixes $P(T_0)-P(T_n)=K\,\sum_i
\delta_iP(t_i)$. With $n$ instruments and $n$ [pillars](#def-rc-curve-construction-pillar) the system $m_i(z_1,\dots,z_n)=q_i$ is square.

**Proposition 1.3 (When curve bootstrapping works).**

If the interpolation is *local*, in the sense that the curve on $[T_{j-1},T_j]$ depends only on the [pillars](#def-rc-curve-construction-pillar) $j-1$ and $j$, and each instrument $i$ has maturity $T_i$, then $\partial m_i/\partial z_j = 0$ for $j>i$: the Jacobian is lower triangular, and the system can be solved one [pillar](#def-rc-curve-construction-pillar) at a time, each a one-dimensional root search. This is curve bootstrapping. Linear interpolation of zero rates and of log discount factors are local; a cubic spline is not, and the monotone convex method is local except through the forwards it estimates at the two neighbouring [pillars](#def-rc-curve-construction-pillar).

**Proof.** Instrument $i$ only reads discount factors at dates up to $T_i$; under a local rule these depend only on [pillars](#def-rc-curve-construction-pillar) $1,\dots,i$. ∎

**Method 1.4 (Global curve calibration by Newton’s method).**

Start from $z^{(0)}_j=q_j$. At each step compute the residuals $r_i = m_i(z)
- q_i$ and the Jacobian $J_{ij}=\partial m_i/\partial z_j$ by finite differences; update $z \leftarrow z - J^{-1}r$; stop when $\max_i|r_i|<10^{-12}$. The same code serves every interpolation, local or not, and the final Jacobian is kept: it converts sensitivities to [pillar](#def-rc-curve-construction-pillar) rates into sensitivities to quotes ([Chapter 3](https://one-course.com/books/quant/6/en/chapter/3-rates-risk#ch-rc-rates-risk)).

```python
def calibrate(spot: dt.date, instruments: Sequence, kind: str = "flat_forward", tol: float = 1e-12,
              max_iter: int = 30) -> Calibration:
    """Solve for every pillar zero rate at once so that each instrument reprices to its quote
    (Newton's method with a finite-difference Jacobian). Pillars = instrument maturities."""
    times = [(i.maturity - spot).days / 365.0 for i in instruments]
    if any(b <= a for a, b in zip(times, times[1:], strict=False)):
        raise ValueError("instrument maturities must be strictly increasing")
    labels = [i.label or f"P{k}" for k, i in enumerate(instruments)]
    quotes = np.array([i.quote() for i in instruments])
    z = quotes.copy()

    def resid(zv):
        c = ZeroCurve(spot, times, list(zv), kind, labels)
        return np.array([i.model(c) for i in instruments]) - quotes

    n, it, r = len(instruments), 0, resid(z)
    jac = np.eye(n)
    while it < max_iter:
        jac = np.empty((n, n))
        for j in range(n):
            e = z.copy()
            e[j] += 1e-7
            jac[:, j] = (resid(e) - r) / 1e-7
        if np.max(np.abs(r)) < tol:
            break
        z = z - np.linalg.solve(jac, r)
        r = resid(z)
        it += 1
    return Calibration(ZeroCurve(spot, times, list(z), kind, labels), jac, it, float(np.max(np.abs(r))))
```

***Listing 1.1.** Global calibration of all pillar zero rates by Newton’s method. code/firm/curvebuild/firm_curvebuild.py*

On the seventeen instruments of [Figure 1.1](#fig-rc-curve-construction-instruments) Newton’s method converges in three iterations for all four interpolations, to residuals below $10^{-15}$. Speed is not the point here; what the global form buys is that the interpolation can be changed without changing the solver.

## 1.3 Interpolation and the forward curve

Every interpolation reprices the inputs; they differ in what they say between [pillars](#def-rc-curve-construction-pillar), and the forward curve is where the differences show.

**Proposition 1.5 (Forwards from zero rates).**

With $y(T) = z(T)T = -\ln P(T)$, the instantaneous forward is $f(0,T) =
y'(T) = z(T) + T z'(T)$. The average forward over a [pillar](#def-rc-curve-construction-pillar) interval is fixed by the two [pillars](#def-rc-curve-construction-pillar) alone: $\bar f_j = (y_j - y_{j-1})/(T_j-T_{j-1})$, the *discrete forward*.

**Definition 1.6 (Flat-forward interpolation).**

*Flat-forward interpolation* makes $\ln P(T)$ linear between [pillars](#def-rc-curve-construction-pillar): the instantaneous forward is constant on each interval and equal to its discrete forward, and jumps at the [pillars](#def-rc-curve-construction-pillar).

Linear interpolation of zero rates looks smoother on a zero-rate chart and is worse on a forward chart: by [Proposition 1.5](#prop-rc-curve-construction-fwd) the forward is $z + Tz'$, and $z'$ jumps at each [pillar](#def-rc-curve-construction-pillar), multiplied by $T$. At the chapter’s two-year [pillar](#def-rc-curve-construction-pillar) ($z = 3.2883\%$) the zero curve falls on its left and rises on its right; the forward jumps from $2.964\%$ to $3.331\%$, a 37-basis-point step made by the rule, not by the market. A natural cubic spline through the zero rates (One Quant Book 4, chapter 28) removes the jumps but, being a global fit, lets a change at one [pillar](#def-rc-curve-construction-pillar) ripple through all of them.

**Definition 1.7 (Monotone convex interpolation).**

*Monotone convex interpolation* (Hagan and West, 2006) builds the forward curve directly. On each interval it keeps the discrete forward $\bar f_j$, estimates the instantaneous forward $f_j$ at each [pillar](#def-rc-curve-construction-pillar) as the time-weighted average of the two adjacent discrete forwards, and fills the interval with $f(T)=\bar f_j + G(x)$, $x=(T-T_{j-1})/(T_j-T_{j-1})$, where $G$ is a quadratic, or a quadratic joined to a constant, with $G(0)=f_{j-1}-\bar f_j$, $G(1)=f_j-\bar f_j$ and $\int_0^1G=0$, chosen from four cases so that $G$ never overshoots its end values. The forward curve is continuous, reproduces every discrete forward, and stays within the range of the neighbouring forwards.

```python
def _mc_piece(g0: float, g1: float) -> list[tuple[float, float, Callable[[float], float]]]:
    """Hagan-West function G(x) on [0,1] (forward minus discrete forward), as pieces (a, b, G)."""
    if g0 == 0.0 and g1 == 0.0:
        return [(0.0, 1.0, lambda x: 0.0)]
    if (g0 < 0 and -0.5 * g0 <= g1 <= -2 * g0) or (g0 > 0 and -0.5 * g0 >= g1 >= -2 * g0):   # region (i)
        return [(0.0, 1.0, lambda x: g0 * (1 - 4 * x + 3 * x * x) + g1 * (-2 * x + 3 * x * x))]
    if (g0 < 0 and g1 > -2 * g0) or (g0 > 0 and g1 < -2 * g0):                                 # region (ii)
        eta = (g1 + 2 * g0) / (g1 - g0)
        return [(0.0, eta, lambda x: g0), (eta, 1.0, lambda x: g0 + (g1 - g0) * ((x - eta) / (1 - eta)) ** 2)]
    if (g0 > 0 and 0 > g1 > -0.5 * g0) or (g0 < 0 and 0 < g1 < -0.5 * g0):                     # region (iii)
        eta = 3 * g1 / (g1 - g0)
        return [(0.0, eta, lambda x: g1 + (g0 - g1) * ((eta - x) / eta) ** 2), (eta, 1.0, lambda x: g1)]
    eta = g1 / (g1 + g0)                                                                        # region (iv)
    amp = -g0 * g1 / (g0 + g1)
    return [(0.0, eta, lambda x: amp + (g0 - amp) * ((eta - x) / eta) ** 2),
            (eta, 1.0, lambda x: amp + (g1 - amp) * ((x - eta) / (1 - eta)) ** 2)]
```

***Listing 1.2.** The four cases of the monotone convex interpolant on one interval. code/firm/curvebuild/firm_curvebuild.py*

![Four instantaneous forward curves from the same seventeen quotes; every one reprices every input exactly. Linear zero rates give a sawtooth; flat forwards give steps; the cubic spline and the monotone convex curve are continuous and nearly coincide at this scale: they differ in how they respond to a change of one quote (). Data: the chapter’s illustrative dollar curve and tutorial.](https://one-course.com/images/onecourse/chapters/quant-6/rc-curve-construction/fig-e1a00c51ddc1.svg)

***Figure 1.2.** Four instantaneous forward curves from the same seventeen quotes; every one reprices every input exactly. Linear zero rates give a sawtooth; flat forwards give steps; the cubic spline and the monotone convex curve are continuous and nearly coincide at this scale: they differ in how they respond to a change of one quote ([Figure 1.4](#fig-rc-curve-construction-locality)). Data: the chapter’s illustrative dollar curve and tutorial.*

For government bonds, which are many, noisy and not all at par, a smooth parametric curve fitted by least squares is usual instead of one [pillar](#def-rc-curve-construction-pillar) per instrument.

**Definition 1.8 (Nelson–Siegel and Svensson curves).**

A *Nelson–Siegel curve* is the zero curve

$$
z(T) = \beta_0 + \beta_1\,\frac{1-e^{-T/\tau_1}}{T/\tau_1}
 + \beta_2\Bigl(\frac{1-e^{-T/\tau_1}}{T/\tau_1}-e^{-T/\tau_1}\Bigr),
$$

with long-run level $\beta_0$, short end $\beta_0+\beta_1$ and a hump of size $\beta_2$ near $\tau_1$; its forward curve is $f(0,T) = \beta_0 + \beta_1
e^{-T/\tau_1} + \beta_2 (T/\tau_1)e^{-T/\tau_1}$. Svensson’s extension adds a second hump term $\beta_3$ with its own $\tau_2$.

**Example 1.9 (The ECB’s AAA curve).**

On 22 September 2026 the ECB’s AAA Svensson parameters were $\beta_0=1.6306$, $\beta_1=0.6958$, $\beta_2=2.5849$, $\beta_3=6.6622$ (per cent), $\tau_1=1.0632$, $\tau_2=14.4456$ years. They give a ten-year zero rate of $3.4527\%$, which is the ECB’s published ten-year spot rate, and the one-, five- and thirty-year published rates to six decimals; the instantaneous forward rises from $2.33\%$ at the short end to a peak of $4.08\%$ near fourteen years ([Figure 1.3](#fig-rc-curve-construction-svensson)).

![The euro-area AAA government curve of 22 September 2026, from the six Svensson parameters the ECB publishes; the dots are the spot rates the ECB publishes for one, five, ten and thirty years, which the formula reproduces. Source: ECB statistics (ECB Data Portal, series YC.B.U2.EUR.4F.G_N_A.SV_C_YM).](https://one-course.com/images/onecourse/chapters/quant-6/rc-curve-construction/fig-6652bdb4f7a3.svg)

***Figure 1.3.** The euro-area AAA government curve of 22 September 2026, from the six Svensson parameters the ECB publishes; the dots are the spot rates the ECB publishes for one, five, ten and thirty years, which the formula reproduces. Source: ECB statistics (ECB Data Portal, series YC.B.U2.EUR.4F.G_N_A.SV_C_YM).*

## 1.4 The front end: futures, turns and meeting dates

The first two years of a dollar curve are built from instruments that price forward periods, not rates from spot. A future on an IMM quarter fixes one quarter’s forward rate, after its convexity adjustment; four of them fix four consecutive discrete forwards, and the interpolation only decides the shape inside each quarter. Two features of the short end are not smooth and should not be interpolated as if they were. The turn of One Quant Book 2, chapter 2, is a jump in the overnight rate over a year-end or quarter-end: a curve builder that knows it adds an extra [pillar](#def-rc-curve-construction-pillar) around the turn date, or a separate spread over those days, so that the one expensive night is not smeared over a quarter. The implied policy path is a step function: the overnight rate moves at central-bank meetings and not between them, so front-end curves are often built with [flat-forward interpolation](#def-rc-curve-construction-flatfwd) between meeting dates, one [pillar](#def-rc-curve-construction-pillar) per meeting (Book 2’s build `firm.meetings`). Smooth interpolation is right where the market has no calendar, from two or three years on.

**Remark 1.10 (Which curve for which job).**

Flat forwards between meeting dates at the front, a smooth rule such as monotone convex beyond, and a parametric curve for relative value in government bonds (a bond rich or cheap to the fitted curve) are complementary, not competing, choices. Any of them fails if an instrument is included twice for one period or a quote is stale.

## 1.5 Hedging consequences of an interpolation

**Definition 1.11 (Interpolation locality).**

An interpolation scheme has *interpolation locality* if a change in one input quote changes the curve only near that input’s maturity. Locality decides what a bucketed hedge looks like: under a local scheme an [off-pillar](#def-rc-curve-construction-pillar) swap is hedged with the [pillars](#def-rc-curve-construction-pillar) around it; under a non-local one it acquires risk, of either sign, on [pillars](#def-rc-curve-construction-pillar) far from its maturity.

![The response of the forward curve to a one-basis-point rise in the seven-year swap quote, with the curve recalibrated. Flat forwards move only between five and ten years (up before seven, down after, so that the ten-year swap still reprices); the monotone convex curve adds small ripples just outside that span; the cubic spline moves the forwards from three years to beyond twenty. Data: the chapter’s tutorial.](https://one-course.com/images/onecourse/chapters/quant-6/rc-curve-construction/fig-ec68a40f6856.svg)

***Figure 1.4.** The response of the forward curve to a one-basis-point rise in the seven-year swap quote, with the curve recalibrated. Flat forwards move only between five and ten years (up before seven, down after, so that the ten-year swap still reprices); the monotone convex curve adds small ripples just outside that span; the cubic spline moves the forwards from three years to beyond twenty. Data: the chapter’s tutorial.*

**Example 1.12 (An eight-year swap on four curves).**

A par payer swap of USD 100 million for eight years has a parallel DV01 of about USD 69 600 on all four curves: they agree on the level. They disagree on where it sits ([Figure 1.5](#fig-rc-curve-construction-buckets)). Flat forwards put USD 40 400 on the seven-year quote and USD 29 200 on the ten-year; the cubic spline puts USD 62 100 on seven years, $-22\,200$ on five, $+11\,000$ on four and $-9\,500$ on twelve; monotone convex lies in between. Each set of buckets sums to the parallel DV01, and each asks for a different hedge.

![Bucketed DV01 of an eight-year par payer swap of USD 100 million by input quote, for three interpolations (each quote bumped by a hundredth of a basis point, curve recalibrated, result scaled to one basis point). The eight-year date lies between the seven- and ten-year pillars; flat forwards load only those two, monotone convex adds small five- and twelve-year buckets, the cubic spline large ones of both signs from three to fifteen years. Data: the chapter’s tutorial.](https://one-course.com/images/onecourse/chapters/quant-6/rc-curve-construction/fig-af6f1bde2d82.svg)

***Figure 1.5.** Bucketed DV01 of an eight-year par payer swap of USD 100 million by input quote, for three interpolations (each quote bumped by a hundredth of a basis point, curve recalibrated, result scaled to one basis point). The eight-year date lies between the seven- and ten-year [pillars](#def-rc-curve-construction-pillar); flat forwards load only those two, monotone convex adds small five- and twelve-year buckets, the cubic spline large ones of both signs from three to fifteen years. Data: the chapter’s tutorial.*

**Remark 1.13 (Monotone convex is not linear in its inputs).**

Linear-zero, flat-forward and spline curves are linear functions of the [pillar](#def-rc-curve-construction-pillar) rates, so a bucketed DV01 does not depend on the size of the bump. The monotone convex curve is not: which of its four cases applies on an interval depends on the inputs, so a one-basis-point bump can switch a case and move the forward shape inside an interval by more than the bump itself. The value stays continuous, but the buckets change with the bump size. The chapter therefore bumps by a hundredth of a basis point and scales; exercise 7 measures the difference.

## 1.6 Tutorial: one set of quotes, four curves

**Goal.** Calibrate one dollar curve from deposits, futures and swaps under four interpolations, and compare forwards, locality and hedges. **End state:** Figures [1.2](#fig-rc-curve-construction-forwards), [1.4](#fig-rc-curve-construction-locality) and [1.5](#fig-rc-curve-construction-buckets) and the numbers of [Example 1.12](#ex-rc-curve-construction-eight).

1. **Instruments.** Two deposits, four futures from the third Wednesday of December 2026, eleven swaps; no one-year swap. `def instruments (): out = [Deposit(SPOT, dt.date(2026 , 10 , 29 ), 0.0362 , " 1M " ), Deposit(SPOT, dt.date(2026 , 12 , 29 ), 0.0358 , " 3M " )] starts = [imm_date(y, m) for y, m in FUT] + [imm_date(2027 , 12 )] for k, (p, c) in enumerate (zip (FUT_PRICES, FUT_CONVEXITY, strict=True )): out.append(Future(starts[k], starts[k + 1 ], p, c, f " F { k + 1 } " )) out += [Swap(SPOT, n, r, f " { n} Y " ) for n, r in zip (SWAP_YEARS, SWAP_RATES, strict=True )] return out` **Listing 1.3.** The instrument set of the chapter’s curve. code/rates-credit-risk/01-curve-construction/python/rc_curves.py
2. **Calibrate** with `calibrate(SPOT, instruments(), kind)` for each of the four kinds; check that the maximum residual is below $10^{-12}$ and the number of iterations is three.
3. **Forwards.** Tabulate `curve.fwd_t(t)` every 0.05 years; you should see the sawtooth of linear zeros at the two-year [pillar](#def-rc-curve-construction-pillar) (2.964% then 3.331%).
4. **Locality and buckets.** Run `locality` for the [pillar](#def-rc-curve-construction-pillar) `7Y` and `off_pillar_buckets(8)` ; `fig_rc_curves.py` writes the charts.

**What to change next.** Put the one-year swap back two basis points away from the futures and look at the forward curve in September 2027; bump by a full basis point under monotone convex and compare the buckets with [Figure 1.5](#fig-rc-curve-construction-buckets).

## 1.7 Build: a multi-instrument curve builder

**Purpose.** The first curve of Book 6’s library: every rates instrument, exposure simulation and risk run of the book reads a curve built here, and the pricing library of One Quant Book 5, chapter 28, accepts it as a discount curve.

**Interface.** `Deposit`, `Future`, `Swap` with `quote()` and `model(curve)`; `calibrate(spot, instruments, kind)` returning the curve, the Jacobian and diagnostics; `ZeroCurve` with `df`, `zero_t`, `fwd_t` and `bumped(pillar, size)`; `bucket_sensitivities`; kinds `linear_zero`, `flat_forward`, `cubic_zero`, `monotone_convex`.

**Rules.** [Pillars](#def-rc-curve-construction-pillar) at instrument maturities, strictly increasing (an overlap is an error); ACT/365 times, ACT/360 accruals; flat forward beyond the last [pillar](#def-rc-curve-construction-pillar); Book 2’s `firm_curve` imported, not edited.

**Acceptance tests.** `code/firm/curvebuild/tests/`: every instrument reprices under every kind; flat-forward on swaps equals Book 2’s bootstrap; flat par quotes give flat forwards; the monotone convex forward is continuous at [pillars](#def-rc-curve-construction-pillar); local kinds have a lower-triangular Jacobian and the spline does not; a seven-year bump spreads beyond fifteen years only under the spline; `bumped` shifts one [pillar](#def-rc-curve-construction-pillar) or all.

**Stretch.** Turn and meeting-date [pillars](#def-rc-curve-construction-pillar); a least-squares mode with more instruments than [pillars](#def-rc-curve-construction-pillar); the positivity amendment of the monotone convex method; an analytic Jacobian.

Sources and further reading

- P. S. Hagan and G. West, “Interpolation methods for curve construction”, *Applied Mathematical Finance* 13(2), 2006.
- C. R. Nelson and A. F. Siegel, “Parsimonious modeling of yield curves”, *Journal of Business* 60(4), 1987; L. E. O. Svensson, “Estimating and interpreting forward interest rates: Sweden 1992–1994”, NBER Working Paper 4871, 1994.
- US Department of the Treasury, *Treasury Yield Curve Methodology* ; ECB, *Euro area yield curves* (ECB Data Portal).
- L. Andersen and V. Piterbarg, *Interest Rate Modeling* , volume 1, Atlantic Financial Press, 2010, chapter 6.

## 1.8 Exercises

**Exercise 1.1 ★.**

The continuously compounded zero rates at two and three years are $3.25\%$ and $3.30\%$. Under [flat-forward interpolation](#def-rc-curve-construction-flatfwd), what is the [instantaneous forward rate](#def-rc-curve-construction-pillar) at $2.5$ years?

**Solution of Exercise 1.1.**

Flat forwards equal the discrete forward on the interval: $(3.30\times3 -
3.25\times2)/(3-2) = 3.40\%$, at 2.5 years as everywhere between the [pillars](#def-rc-curve-construction-pillar).

**Exercise 1.2 ★.**

A SOFR future on the quarter from June to September 2027 trades at $96.72$ and its convexity adjustment is $0.6$ basis points. What forward rate must the curve reproduce for that quarter?

**Solution of Exercise 1.2.**

The futures rate is $100-96.72 = 3.28\%$; less the convexity adjustment, $3.28-0.006 = 3.274\%$, simple ACT/360 over the quarter.

**Exercise 1.3 ★.**

Why does the chapter’s curve leave out the one-year swap, and what would happen to the calibration if it were put back with a quote two basis points away from what the futures imply?

**Solution of Exercise 1.3.**

Its period is already priced by the deposits and the first futures: two instruments would price one period. The curve implies a one-year swap rate of $3.4639\%$; put back at $3.4839\%$, the system is still square (its [pillar](#def-rc-curve-construction-pillar) falls between the third and fourth futures) and calibrates exactly, but the only freedom left is the two weeks between 15 and 29 September 2027: under flat forwards the forward there jumps from $3.242\%$ to $3.753\%$, and falls to $3.150\%$ for the rest of the fourth future’s quarter. Exactness is bought with a 51-basis-point spike that every instrument over that fortnight inherits.

**Exercise 1.4 ★★.**

On the chapter’s linear-zero curve the [pillars](#def-rc-curve-construction-pillar) around two years are at $(1.2110, 3.4165\%)$, $(2.0027, 3.2883\%)$ and $(3.0027, 3.3095\%)$ (years, zero rate). Compute the instantaneous forward just before and just after the two-year [pillar](#def-rc-curve-construction-pillar).

**Solution of Exercise 1.4.**

$f = z + Tz'$. Left slope $(3.2883-3.4165)/(2.0027-1.2110) = -0.1619\%$ a year: $f^- = 3.2883 + 2.0027\times(-0.1619) = 2.964\%$. Right slope $(3.3095-3.2883)/1 = 0.0212\%$: $f^+ = 3.2883+2.0027\times0.0212 = 3.331\%$. A 37-basis-point jump made by the rule.

**Exercise 1.5 ★★.**

From the ECB parameters of [Example 1.9](#ex-rc-curve-construction-ecb), compute the ten-year [instantaneous forward rate](#def-rc-curve-construction-pillar) and the limit of the zero rate as $T\to 0$.

**Solution of Exercise 1.5.**

$f(0,10) = \beta_0 + \beta_1e^{-10/\tau_1} + \beta_2(10/\tau_1)e^{-10/\tau_1} +
\beta_3(10/\tau_2)e^{-10/\tau_2} = 3.9407\%$. As $T\to0$ each loading $(1-e^{-x})/x\to1$ and the hump terms vanish: $z(0)=\beta_0+\beta_1 =
2.3264\%$.

**Exercise 1.6 ★★.**

Read [Figure 1.5](#fig-rc-curve-construction-buckets). A trader hedges the eight-year swap with the spline’s buckets, then the desk moves to flat forwards. Which hedges become unnecessary, and why did the spline ask for them?

**Solution of Exercise 1.6.**

The four-, five- and twelve-year hedges (and the small three- and fifteen-year ones): under flat forwards the eight-year date depends only on the seven- and ten-year [pillars](#def-rc-curve-construction-pillar). The spline is a global fit: moving a [pillar](#def-rc-curve-construction-pillar) bends the whole zero curve, so the eight-year discount factor responds to [pillars](#def-rc-curve-construction-pillar) far away, with alternating signs; those hedges hedged the interpolation, not the market.

**Exercise 1.7 ★★★.**

*Coding.* With `off_pillar_buckets(8, bump=1e-4)`, compute the monotone convex buckets of the eight-year swap with a full-basis-point bump and their sum; compare with the sum for a hundredth-of-a-basis-point bump and with the parallel DV01, and explain.

**Solution of Exercise 1.7.**

With one-basis-point bumps the monotone convex buckets are $-5\,663$ (five years), $+50\,916$ (seven), $+33\,188$ (ten) and $-7\,232$ (twelve), summing to USD 71 216; with a hundredth of a basis point, scaled, they sum to 69 610, and a parallel one-basis-point bump gives 69 579. The scheme’s case depends on the inputs, so a full-basis-point bump of one [pillar](#def-rc-curve-construction-pillar) switches cases on its intervals and the finite difference picks up more than the local slope; the small bump measures the derivative, and its buckets add up.

**Exercise 1.8 ★★★.**

*Find the flaw.* “Our new curve reprices every input to $10^{-12}$, so its prices for every other instrument are right.” Correct it.

**Solution of Exercise 1.8.**

Repricing the inputs is necessary, not sufficient: every interpolation of the chapter does it, and they disagree on every instrument between the [pillars](#def-rc-curve-construction-pillar) (forwards by tens of basis points, [off-pillar](#def-rc-curve-construction-pillar) swaps by thousands of dollars). The curve must also be judged on its forwards (no sawtooth, no overshoot), its locality and the hedges it implies, and on out-of-sample instruments such as [off-pillar](#def-rc-curve-construction-pillar) swaps traded in the market.

## 1.9 Problem: The Monday Loss

**Problem 1.1.**

Weekend problem — an interpolation changed over a weekend

A desk’s book holds seven par swaps traded on the chapter’s curve under linear-zero interpolation: payers of 6, 9, 13 and 22 years (USD 0.9, 0.6, 0.5 and 0.8 billion) and receivers of 8, 11 and 17 years (USD 0.7, 0.8 and 0.7 billion), USD 5.0 billion in all. Over the weekend the curve is rebuilt from the same quotes with [monotone convex interpolation](#def-rc-curve-construction-monotone).

**Part I — The change.**

1. Why is each swap worth exactly zero on Friday?
2. Does any input instrument change value on Monday? Why not?
3. The 17-year par rate moves from $3.9975\%$ to $4.0074\%$ . What does that say about the forwards between 15 and 20 years?
4. Which swaps of the book are exposed to the change, and which are not?
5. Give the six-year par rate before and after, and explain why it barely moves.

**Part II — The P&L.**

6. Give the book’s value on Monday.
7. Is it a profit or a loss, and which swaps produce most of it?
8. Should the desk book it as trading P&L? Who should decide?
9. How would you present it to the head of desk in one sentence?
10. Would a book of pillar-maturity swaps have shown anything?

**Part III — The hedges.**

11. The fifteen-year bucket was $-\text{USD}~346\,584$ per basis point and is now $-583\,281$ . The fifteen-year par swap has a DV01 of USD 1 149 075 per billion. Give the hedge notional before and after.
12. Do the same for the twenty-year bucket ( $345\,841$ then $465\,177$ ; USD 1 388 775 per billion).
13. The sum of the buckets is USD 555 270 before and 557 510 after. Why so close, when single buckets moved by a third or more?
14. Why were the buckets computed with a hundredth-of-a-basis-point bump?
15. A new twelve-year bucket appears ( $-77\,741$ ). Where did it come from?

**Part IV — Judgement.**

16. Give two arguments for the new interpolation and one against.
17. How should a change of curve methodology be governed?
18. What reserve might a controller hold for curve-methodology uncertainty?
19. State the *named result* : the P&L of the switch and the change in the fifteen-year hedge.
20. In one sentence: what does a curve’s interpolation decide?

**Solution of Problem 1.1.**

**1.** Each was traded at the par rate of the Friday curve. **2.** No: every input still reprices exactly under the new rule, since calibration forces it. **3.** The new curve puts higher forwards between 15 and 20 years (and so lower ones elsewhere in that span of [pillars](#def-rc-curve-construction-pillar)): the 17-year par rate rises by about one basis point, $3.9975\%$ to $4.0074\%$. **4.** Every [off-pillar](#def-rc-curve-construction-pillar) swap, here all seven; a swap maturing on a [pillar](#def-rc-curve-construction-pillar) would be unaffected in value. **5.** $3.5005\%$ then $3.5007\%$: six years sits in the five-to-seven-year interval, where both rules give nearly the same average forward. **6.** $-\text{USD}~90\,062$. **7.** A loss. The 17-year receiver loses USD 863 596 and the 22-year payer gains 678 267; the 13-year payer gains 234 745; the 11-year receiver, 9-year payer and 8-year receiver roughly offset. **8.** It is a valuation change, not a trading result: product control and the valuation committee decide how a methodology change is reported, often as a separate line, and the change is approved before it goes live. **9.** “The new interpolation, which the Treasury also uses, values our [off-pillar](#def-rc-curve-construction-pillar) swaps USD 90 thousand lower; no market moved.” **10.** No: pillar-maturity swaps are priced by their own quotes whatever the interpolation. **11.** Pay fixed on USD 0.3016 billion of the fifteen-year before, 0.5076 billion after: $346\,584/1\,149\,075$ and $583\,281/1\,149\,075$ billion. **12.** Receive fixed on USD 0.2490 billion before, 0.3350 billion after. **13.** The sum is the book’s parallel DV01, fixed by the level of the curve, on which both rules agree; the rules disagree only on how the risk is spread between [pillars](#def-rc-curve-construction-pillar). **14.** Under monotone convex a full-basis-point bump can switch the case on an interval and add a spurious piece; a small bump, scaled, measures the derivative (exercise 7). **15.** The forward shape between ten and fifteen years now depends on the twelve-year [pillar](#def-rc-curve-construction-pillar) through the [pillar](#def-rc-curve-construction-pillar) forwards the method estimates; the 11- and 13-year swaps read that shape. **16.** For: continuous, non-overshooting forwards, and the method of the official Treasury curve, so marks align with a public reference. Against: its buckets depend on the bump size and it is harder to explain. **17.** As a model change: documented, independently validated, its P&L impact measured in parallel runs before the switch, approved, and reported separately. **18.** A reserve for the spread of values across acceptable interpolations (here at least USD 90 thousand on this book), released as the book’s [off-pillar](#def-rc-curve-construction-pillar) positions run off. **19.** Named result: *the interpolation switch* costs $-\text{USD}~90\,062$ with no market move, and the fifteen-year hedge grows by 68%, from USD 0.30 to 0.51 billion. **20.** Everything between the quotes: the forwards, the value of every [off-pillar](#def-rc-curve-construction-pillar) instrument, and where its hedges sit.

## 1.10 Interview questions

**Interview question 1.1 ★ researcher, bank.**

What is the difference between curve bootstrapping and a global curve fit, and when do you need the second?

**Solution of Interview question 1.1.**

Curve bootstrapping solves one [pillar](#def-rc-curve-construction-pillar) at a time, which works when each instrument depends only on [pillars](#def-rc-curve-construction-pillar) up to its own maturity, as with linear or [flat-forward interpolation](#def-rc-curve-construction-flatfwd). A global fit solves all [pillars](#def-rc-curve-construction-pillar) together (Newton on the full system); it is needed for non-local interpolations (splines, tension, monotone convex with its [pillar](#def-rc-curve-construction-pillar) forwards), for instruments that depend on later [pillars](#def-rc-curve-construction-pillar), or for least-squares fits with more instruments than [pillars](#def-rc-curve-construction-pillar).

*What the interviewer is looking for: the lower-triangular structure as the condition, and when it fails.*

**Interview question 1.2 ★ trader, researcher.**

Why does linear interpolation of zero rates give a bad forward curve?

**Solution of Interview question 1.2.**

The forward is $z+Tz'$: the slope of the zero curve jumps at each [pillar](#def-rc-curve-construction-pillar), and the jump is multiplied by maturity, so the forward curve is a sawtooth with steps of tens of basis points at long [pillars](#def-rc-curve-construction-pillar), which then price forward-starting instruments and caps badly.

*What the interviewer is looking for: the formula $f = z + Tz'$.*

**Interview question 1.3 ★★ researcher, developer.**

List the properties you would want from a curve interpolation, and say which ones conflict.

**Solution of Interview question 1.3.**

Exact fit of inputs; positive, continuous and smooth forwards; no overshoot; locality of a bump; stability (small input change, small curve change); linearity in the inputs (additive buckets); speed; simple explanation. Smoothness conflicts with locality (a spline is smooth and global); no overshoot conflicts with linearity (monotone convex is nonlinear).

*What the interviewer is looking for: a list and at least one real trade-off.*

**Interview question 1.4 ★★ trader.**

Your eight-year swap shows risk on the four-year and twelve-year buckets. What do you suspect?

**Solution of Interview question 1.4.**

A non-local interpolation such as a spline on zero rates: the risk on distant [pillars](#def-rc-curve-construction-pillar) comes from the curve rule, not from the swap’s cash flows. Check the curve’s settings, then its locality by bumping one input and plotting the forward change.

*What the interviewer is looking for: diagnosing the interpolation, not the trade.*

**Interview question 1.5 ★★ developer, risk.**

How do you handle the year-end turn and central-bank meeting dates in a curve builder?

**Solution of Interview question 1.5.**

A turn: an extra [pillar](#def-rc-curve-construction-pillar) (or an additive spread) over the few days around the date, fitted to the futures or deposits that straddle it, so its cost is not spread over a quarter. Meeting dates: one [pillar](#def-rc-curve-construction-pillar) per meeting with flat forwards between them at the front, fitted to overnight-index swaps or futures, then a smooth rule beyond two or three years.

*What the interviewer is looking for: step structures handled explicitly, not smoothed.*

**Interview question 1.6 ★★★ researcher, risk.**

Your bucketed deltas change when you change the bump size from one basis point to a tenth. Is the code wrong?

**Solution of Interview question 1.6.**

Not necessarily. For a curve linear in its inputs the bucket is independent of the bump; for a nonlinear rule such as monotone convex, or with a loose solver tolerance, it is not. Check the solver tolerance first (a bump of a tenth of a basis point must be well above it), then compare with a small bump scaled up; if the curve is nonlinear, report the small-bump derivative and state it.

*What the interviewer is looking for: nonlinearity versus numerical noise, and how to tell them apart.*
