Skip to content
Sarthak Bagaria
All notes

Chapter 17 Foreign Exchange, Quantos and Inflation

Three markets that look unrelated on a trading floor are one piece of mathematics. An exchange rate is the price of one numeraire in units of another; a quanto is a payoff settled in the wrong numeraire; and inflation is foreign exchange with the real economy as the foreign country, the consumer price index as the exchange rate and index-linked bonds as the foreign bonds. One adjustment, −ρ⁢σ1⁢σ2, does the work in all three, and we derive it once and then spend the chapter recognising it. It ends by explaining a correction on year-on-year inflation swaps that is worth a dozen basis points at the long end and is invisible to anyone who has not made the identification.

17.1 An Exchange Rate Is a Ratio of Numeraires

Chapter 6 defined a numeraire as a strictly positive tradable that other prices are quoted against, and showed that each numeraire carries its own measure in which prices divided by it are martingales. Foreign exchange is what happens when there are two of them and they belong to different countries.

Let Xt be the spot exchange rate, quoted as units of domestic currency per unit of foreign. Let Btd and Btf be the two savings accounts, growing at the domestic and foreign short rates rd and rf.

Calculation 17.1 (The forward exchange rate).

A domestic investor can hold the foreign savings account, but only by first converting into it. What they hold, valued in their own currency, is Xt⁢Btf — and this is a domestic tradable, so it must have drift rd under the domestic risk neutral measure. Since Bf grows deterministically at rf,

d⁢(Xt⁢Btf)Xt⁢Btf=d⁢XtXt+rf⁢d⁢t⁢=!⁢rd⁢d⁢t+σX⁢d⁢Wtd, (17.1)

which forces

d⁢XtXt=(rd−rf)⁢d⁢t+σX⁢d⁢Wtd. (17.2)

The exchange rate drifts at the interest rate differential. The forward rate does not need the dynamics at all. A foreign zero coupon bond, converted at spot, costs X0⁢Pf⁢(0,T) domestic units today and is worth XT domestic units at T: it is a domestic tradable that delivers the exchange rate. The forward strike is the price of receiving XT, expressed in domestic units at T, so dividing by the price Pd⁢(0,T) of one domestic unit at T gives

FX⁢(0,T)=X0⁢Pf⁢(0,T)Pd⁢(0,T). (17.3)

In the language of chapter 6, the forward is the expectation of XT in the domestic T-forward measure, the one whose numeraire is Pd⁢(t,T). The domestic tradable Xt⁢Pf⁢(t,T) divided by that numeraire is a martingale in it, and at t=T it equals XT, so 𝔼T⁢[XT]=X0⁢Pf⁢(0,T)/Pd⁢(0,T). The volatility does not appear, because no distribution for XT was used: the forward is fixed by two prices, and it holds whatever the rates do.

Remark (What this says in words).

If foreign interest rates are higher than domestic, the forward exchange rate is below the spot: the currency you earn more interest in is expected — under the pricing measure — to weaken by exactly the extra interest. It has to be, or borrowing domestically, converting, lending abroad and selling the proceeds forward would be a riskless profit. This is covered interest parity, and it is not an economic prediction. It is a no-arbitrage statement, enforced by anyone with access to both money markets.

That this is not an economic prediction deserves emphasis, because the historical record disagrees with it loudly: high-yielding currencies have not on average weakened by their interest differential, which is the entire basis of the carry trade. Chapter 6’s distinction applies exactly here. (17.3) is a statement about ℚ; the carry trade is a bet about ℙ; and the gap between them is a risk premium, not an arbitrage.

Remark (The symmetry, and what breaks it).

Nothing above singled out the domestic currency. The foreign investor sees the exchange rate 1/Xt and, by the same argument in reverse, finds it drifts at rf−rd under their risk neutral measure. Both are right. The two measures differ, and 1/X under the foreign measure is not the reciprocal of X under the domestic one in any naive sense — by Itô’s lemma the reciprocal of a lognormal picks up a +σX2 in its drift, and that term is exactly the difference between the two measures.

This is Siegel’s paradox, and it is the first sign that being careless about which currency one is standing in is expensive. The rest of the chapter is about the cases where it is expensive by an amount someone quotes.

Calculation 17.2 (Options on the exchange rate).

Since (17.2) is a geometric Brownian motion with drift rd−rf, everything in chapter 5 applies with rf playing the part of a dividend yield: the foreign currency pays interest to whoever holds it, exactly as a stock pays dividends. The price of a call on the exchange rate is

C=Pd⁢(0,T)⁢[FX⁢N⁢(d1)−K⁢N⁢(d2)],d1,2=ln⁡(FX/K)±12⁢σX2⁢TσX⁢T, (17.4)

which is Black-76 on the forward (17.3). Under its own name this is the Garman-Kohlhagen formula; it is not a new formula, so that everything already established about the Black world — the smile of chapter 9, the dynamics of chapter 10 — transfers without rederivation.

17.2 The Quanto Adjustment

Now the case where the two currencies genuinely interfere.

Definition 17.3 (Quanto).

A quanto is a derivative whose payoff is computed from a foreign asset but paid in domestic currency at a fixed exchange rate.

A typical example: a note paying the return on a foreign equity index, in dollars, with no currency exposure. The buyer wants the index and not the currency, and the quanto gives them exactly that. Someone has to price the separation.

Theorem 17.4 (The quanto drift adjustment).

Let St be a foreign asset with volatility σS, let Xt be the exchange rate (domestic per foreign) with volatility σX, and let ρ be their correlation. Then under the domestic risk neutral measure,

d⁢StSt=(rf−ρ⁢σS⁢σX)⁢d⁢t+σS⁢d⁢Wt, (17.5)

and the quanto forward of S to time T is the ordinary forward multiplied by e−ρ⁢σS⁢σX⁢T.

Proof.

S is a foreign tradable, so under the foreign risk neutral measure ℚf it drifts at rf. To value a payoff settled at home we need its drift under ℚd, so we need the change of measure between them, and the Radon-Nikodym derivative is fixed by the requirement that the converted asset Xt⁢St be a domestic tradable. The quanto contract itself, paying ST domestic units at T, is also a domestic tradable and drifts at rd, but that gives nothing here: its price Pd⁢(t,T)⁢𝔼td⁢[ST] is defined through the law of S under ℚd, so it holds for any drift S might have. The constraint comes from X⁢S, which a domestic investor can buy today at an observed price, and which is a tradable whatever the drift of S turns out to be.

Apply Itô’s product rule to X⁢S and impose drift rd under ℚd. Writing μS for the unknown drift of S under ℚd,

d⁢(X⁢S)X⁢S=d⁢XX+d⁢SS+d⁢XX⁢d⁢SS=(rd−rf)⁢d⁢t+μS⁢d⁢t+ρ⁢σS⁢σX⁢d⁢t+(⋯)⁢d⁢W,

using (17.2) for the first term. Setting the total drift to rd gives μS=rf−ρ⁢σS⁢σX, which is (17.5). Integrating a drift over [0,T] multiplies the forward by its exponential. ∎

Remark (Why the cross term is the whole story).

The proof is three lines and every one of them is the Itô cross term d⁢XX⁢d⁢SS.

Converting a foreign asset into domestic currency means multiplying two random quantities. If they tend to move together, the product moves more than either — you get more foreign currency exactly when each unit of it is worth more — and that extra covariance is worth something. A domestic investor holding the unhedged foreign asset receives it. A quanto buyer has been given the asset with the currency stripped out, so they do not receive it, and the price has to be lower by exactly that amount. Equation (17.5) is that statement with the accounting done.

Example 17.1 (The size of it).

A foreign index with 25% volatility, a currency with 10% volatility, correlation 0.5. The adjustment is

−ρ⁢σS⁢σX=−0.5×0.25×0.10=−1.25%⁢ per year,

so the one year quanto forward is 98.76 where the plain forward is 100.

A hundred and twenty five basis points a year is easy to dismiss on a short trade and impossible to dismiss on a long one, because it is a drift and compounds. At five years the forward is six percent below the plain one. This is the reason the adjustment is quoted as a drift rather than as a price: the number that matters is the rate, and the maturity does the rest.

-1-0.500.519095100105110115Correlation of asset with exchange rateQuanto forward, % of plain
  • 1 year
  • 3 year
  • 5 year
Figure 17.1: The quanto forward as a fraction of the plain forward, at a 25% asset volatility and a 10% currency volatility. It is monotone through zero and almost linear in the correlation, since the adjustment enters as an exponent and the exponent is small; and it fans out with maturity, because the adjustment is a drift. Nothing is wrong at ρ=0: a payoff settled in a currency that does not move with it costs nothing to redenominate.
Show the model behind this figure (1 function)
/// The forward of an asset that pays in a currency it does not live in.
///
/// A payoff on a foreign asset, settled in domestic currency at a fixed rate,
/// has to be valued in the domestic measure, and Girsanov charges for the move:
/// the asset's drift picks up `-rho * sigma_asset * sigma_fx`, so its forward is
/// scaled by the exponential of that over the life of the trade.
///
/// `rho` is the correlation between the asset and the exchange rate quoted as
/// domestic per unit of foreign. A positive correlation means the asset tends to
/// rise when the foreign currency does, and the quanto forward is *below* the
/// ordinary one: the payoff has been stripped of a currency exposure that was
/// worth having.
pub fn quanto_forward(forward: f64, rho: f64, sigma_asset: f64, sigma_fx: f64, t: f64) -> f64 {
    forward * (-rho * sigma_asset * sigma_fx * t).exp()
}
Exercise.

A quanto option, rather than a forward, on the same asset. Show that its price is the ordinary Black formula with the forward replaced by the quanto forward, and that the volatility is unchanged. (Hint: (17.5) changed the drift and not the diffusion coefficient.) Then explain why this means a quanto option’s implied volatility is the same as the plain option’s, even though its price is different — and why that makes the adjustment easy to hide in a trading system that only stores implied volatilities.

17.3 Inflation Is Foreign Exchange

An economy has two ways of measuring value. Nominal terms count currency. Real terms count goods — a basket, whose currency price is the consumer price index It. Then:

Foreign exchange Inflation
domestic currency nominal economy
foreign currency real economy
exchange rate Xt price index It
foreign short rate rf real short rate r
foreign bond Pf⁢(t,T) index-linked bond Pr⁢(t,T)
domestic short rate rd nominal short rate n

The index It is the price of one unit of the real good in nominal currency, which is precisely what an exchange rate is. And an index-linked bond, which pays a principal scaled by realised inflation, is a bond denominated in goods: it pays one basket at maturity, converted at whatever the index then is. It is the foreign bond.

This identification is the Jarrow-Yildirim model. Everything in the first two sections now transfers with no new work.

Calculation 17.5 (The zero coupon inflation swap).

A zero coupon inflation swap pays IT/I0−(1+b)T at T, and b is quoted as the breakeven inflation rate. Valuing it is (17.3) under a different name: It⁢Pr⁢(t,T) is a nominal tradable, so the forward index is

𝔼T⁢[IT]=I0⁢Pr⁢(0,T)Pn⁢(0,T), (17.6)

and the breakeven follows,

(1+b)T=Pr⁢(0,T)Pn⁢(0,T). (17.7)
Remark (There is no model in this).

Equation (17.7) contains no volatility, no correlation and no model. The breakeven is a ratio of two observable discount curves, and the trade that enforces it is static: buy the index-linked bond, sell the nominal bond, and hold both to maturity. It is the Fisher equation.

This matters because the breakeven is routinely described as “the market’s inflation expectation”, and it is not one. It is the expectation under the nominal T-forward measure, which differs from the real-world expectation by the covariance of inflation with the pricing kernel of chapter 6,

𝔼T⁢[IT]=𝔼ℙ⁢[IT]+Covℙ⁡(MT,IT)𝔼ℙ⁢[MT].

The kernel is the discount factor times the density that reweights the paths, so this covariance contains both how inflation lines up with the states investors want compensated and how it lines up with nominal rates. It has no fixed sign. If inflation tends to arrive in bad times, investors pay for protection and the breakeven sits above what they expect; if it arrives in good times, it sits below. Which one holds is an empirical question and not a consequence of (17.7). The mechanism is the one behind the quanto adjustment, an expectation moved between measures by a covariance with the density that moves it, and the difference is what the covariance is made of: there it is ρ⁢σS⁢σX, which traded options pin down, and here it is not tied to any traded price. Chapter 6’s ℙ against ℚ distinction, for the third time.

Example 17.2 (A breakeven).

Ten year nominal rates at 3.0% and ten year real rates at 0.5%. The breakeven is

Pr⁢(0,10)Pn⁢(0,10)=e(0.030−0.005)×10=e0.25,

so (1+b)10=e0.25 and b=e0.025−1=2.53%. The difference of the two continuously compounded rates is 2.5%; expressed as an annually compounded rate it is 2.53%. The three basis point gap is a compounding convention.

17.4 Where the Model Comes Back: Year-on-Year Swaps

The zero coupon swap needed no model. The year-on-year swap, which pays ITi/ITi−1−1 on each of a series of dates, needs one.

Calculation 17.6 (Why the naive answer is wrong).

The obvious guess is that a year-on-year payment is the ratio of two zero coupon forwards. It is not, and conditioning shows where it breaks. Writing S=Ti−1 and T=Ti, and taking the expectation under the nominal T-forward measure in which the payment is valued,

𝔼T⁢[ITIS] =𝔼T⁢[1IS⁢𝔼T⁢[IT∣ℱS]]
=𝔼T⁢[1IS⋅IS⁢Pr⁢(S,T)Pn⁢(S,T)]
=𝔼T⁢[Pr⁢(S,T)Pn⁢(S,T)], (17.8)

where the second line is (17.6) applied at time S instead of time 0, which is legitimate because It⁢Pr⁢(t,T)/Pn⁢(t,T) is a T-forward martingale.

The index has cancelled out entirely. What is left is the expectation of a future bond price ratio — and unlike a forward, that is not pinned by any static portfolio. Bond prices at S depend on where rates are at S, and (17.8) therefore depends on how they get there. A model is unavoidable.

Remark (The general shape of this).

The reader who has been through chapters 7 and 8 has met this twice already. A futures contract differs from a forward because it is settled under the risk neutral rather than the forward measure. A CMS payment differs from a swap rate because it is paid on the wrong date. Each time, an instrument that looks like a forward turns out to reference a rate under a measure in which that rate is not a martingale, and the gap is a convexity correction.

(17.8) is the same phenomenon and will produce the same kind of answer. What is new here is that part of the correction will turn out to be a quanto adjustment, which the other two cases have no analogue of, because they involve only one currency.

We now do the calculation. Take both short rates to be Hull-White as in chapter 8’s Hull-White Model section, with mean reversions an,ar and volatilities σn,σr, the index lognormal with volatility σI, and correlations ρn⁢r between the two rates and ρr⁢I between the real rate and the index.

Calculation 17.7 (The real rate under the nominal measure).

First, the piece that has no counterpart in an ordinary rates model. The real short rate is a foreign short rate, so its drift under the nominal measure is not the drift its own model was written with.

The argument is Theorem 17.4 again. It⁢Pr⁢(t,T) must be a nominal tradable, and expanding by Itô’s product rule as before,

d⁢(I⁢Pr)I⁢Pr=(n−r)⁢d⁢t⏟index+μPr⁢d⁢t+(⋯)⁢d⁢W⏟real bond+ρr⁢I⁢σI⁢(−Br⁢(t,T)⁢σr)⁢d⁢t⏟cross term⁢=!⁢n⁢d⁢t+(⋯)⁢d⁢W,

where −Br⁢(t,T)⁢σr is the real bond’s volatility in the Hull-White model, Br⁢(t,T)=(1−e−ar⁢(T−t))/ar. Solving gives μPr=r+ρr⁢I⁢σI⁢σr⁢Br, which is the real bond drifting faster than r under the nominal measure.

To translate that back to the short rate, let the real short rate’s drift under ℚn be its own drift plus an unknown shift δ, so that d⁢r=(θr−ar⁢r+δ)⁢d⁢t+σr⁢d⁢Wℚn. Then σr⁢d⁢Wr=σr⁢d⁢Wℚn+δ⁢d⁢t, where Wr is the Brownian motion of the real economy’s own measure, under which the real bond has d⁢Pr/Pr=r⁢d⁢t−Br⁢σr⁢d⁢Wr. Substituting,

d⁢PrPr=(r−Br⁢δ)⁢d⁢t−Br⁢σr⁢d⁢Wℚn,

and matching the drift to μPr gives δ=−ρr⁢I⁢σr⁢σI. The maturity has dropped out, since Br⁢(t,T) multiplies both sides, so a single shift of the short rate accounts for the bonds of every maturity at once, which is what allows the adjustment to be attributed to the short rate and not to any bond. The short rate is therefore

d⁢rt=(θr⁢(t)−ar⁢rt−ρr⁢I⁢σr⁢σI)⁢d⁢t+σr⁢d⁢Wtℚn. (17.9)

The extra term is exactly (17.5), with the real rate in the place of the foreign asset and the price index in the place of the exchange rate.

Calculation 17.8 (The convexity).

With both rates Gaussian, (17.8) is an expectation of an exponential of a normal and can be done in closed form. Writing yn,yr for each rate’s deviation from its own initial forward curve and Bn,Br for the two Hull-White factors over [S,T], the bond reconstitution formula of chapter 8’s Hull-White Model section gives

Pr⁢(S,T)Pn⁢(S,T)=Pr⁢(0,T)⁢Pn⁢(0,S)Pr⁢(0,S)⁢Pn⁢(0,T)⏟the naive answer⋅eDr−Dn⋅e−Br⁢ySr+Bn⁢ySn,

with Di the deterministic terms. Taking the expectation of the lognormal and using that Di=−12⁢Bi2⁢Vi exactly cancels half of each variance, the whole correction collapses to

C=exp⁡(−Br⁢mr+Bn⁢mn+Bn2⁢Vn−Br⁢Bn⁢Cov⁢(ySn,ySr)), (17.10)

where mr,mn are the two rates’ means at S under the nominal T-forward measure and Vn is the nominal variance. The year-on-year payment is the naive ratio of forwards multiplied by C.

Remark (Reading (17.10)).

The formula is opaque and the content is not. Every term is a mean or a covariance under the nominal T-forward measure, and the drifts that produce those means are three, listed in Inflation::real_mean:

  • -

    the Hull-White term each model carries to stay fitted to its own initial curve, which would be there in a single-currency world and contributes nothing interesting;

  • -

    −ρr⁢I⁢σr⁢σI, the quanto adjustment (17.9), present only because the real economy is a foreign one;

  • -

    −ρn⁢r⁢σn⁢σr⁢Bn⁢(u,T), from changing to the nominal forward measure, which is the ordinary convexity of chapters 7 and 8.

So the correction has two parents. Setting ρr⁢I=0 — or σI=0 — deletes the quanto term and leaves the rest untouched, and that is a sharp enough statement to check numerically, which quant/src/crosscurrency.rs does.

InfinityInfinityStart of the year-on-year period (years)Adjustment to the payment (bp)

Only the quanto curve responds to either slider. Set the correlation to zero, or the index volatility, and it collapses onto the axis while the forward-measure curve stays exactly where it was — the two corrections have different parents, and only one of them knows that inflation is a currency.

Figure 17.2: The correction a one year inflation payment needs, against the zero coupon curve, as a function of when the year starts. It grows with the start date because every term carries the accumulated effect of the measure changes up to that point, and the two components grow differently: the forward measure term is quadratic-ish in the start while the quanto term is closer to linear, so the quanto share falls from most of the correction at the front end to about a third of it at thirty years. Drag the correlation to zero and only one curve moves.
Show the model behind this figure (2 functions)
Inflation::yoy_convexityquant/src/crosscurrency.rs
/// The convexity multiplier on a year-on-year inflation swap payment.
///
/// A year-on-year swap pays `I(end)/I(start) - 1` at `end`. The naive
/// answer is the ratio of the zero-coupon forwards, and it is wrong. The
/// foreign exchange chapter derives why: conditioning on the start date
/// turns the payment into
///
/// ```text
///     E^end[ I(end)/I(start) ] = E^end[ P_real(start,end) / P_nominal(start,end) ]
/// ```
///
/// so what has to be valued is a *future* bond price ratio, and that needs a
/// model. Under this one both rates are Gaussian at the start date, the ratio
/// is lognormal in them, and the whole correction collapses to
///
/// ```text
///     C = exp( -B_r m_r + B_n m_n + B_n^2 V_n - B_r B_n Cov )
/// ```
///
/// where the deterministic halves of the two reconstitution formulas have
/// already cancelled against half the variances. The quanto adjustment sits
/// inside `m_r` and nowhere else, so setting `rho_real_index` to zero removes
/// it and leaves the ordinary forward-measure convexity behind.
///
/// Returns the factor the naive forward is multiplied by; 1.0 is no
/// adjustment.
pub fn yoy_convexity(&self, start: f64, end: f64) -> f64 {
    const STEPS: usize = 400;
    let b_r = hw_b(self.a_real, end - start);
    let b_n = hw_b(self.a_nominal, end - start);
    let m_r = self.real_mean(start, end, STEPS);
    let m_n = self.nominal_mean(start, end, STEPS);
    let v_n = self.variance(self.a_nominal, self.sigma_nominal, start);
    let cov = self.covariance(start);

    (-b_r * m_r + b_n * m_n + b_n * b_n * v_n - b_r * b_n * cov).exp()
}
Inflation::real_meanquant/src/crosscurrency.rs
/// The mean of the real rate's deviation from its initial forward curve, at
/// `start`, under the nominal `end`-forward measure.
///
/// Three drifts contribute and it is worth naming them separately, because
/// the chapter's argument is about which is which:
///
///   * the Hull-White term that keeps the model fitted to its own initial
///     curve, present in any one-factor Gaussian model;
///   * `-rho_real_index * sigma_real * sigma_index`, the quanto adjustment
///     of [`quanto_drift`], here because the real economy is a foreign
///     currency and the CPI index is the exchange rate;
///   * `-rho_nominal_real * sigma_nominal * sigma_real * B_n(u,end)`, from
///     changing to the nominal forward measure — the same correction that
///     produces the future-forward basis of the term structure chapter.
///
/// Integrated numerically against the mean-reversion kernel. The integrand is
/// smooth and one-dimensional, so this is exact to many more digits than the
/// model is worth, and it keeps the code readable where a closed form would
/// be four lines of unverifiable exponentials.
pub fn real_mean(&self, start: f64, end: f64, steps: usize) -> f64 {
    self.kernel_integral(start, steps, |u, this| {
        this.hw_fitting_drift(this.a_real, this.sigma_real, u)
            - this.rho_real_index * this.sigma_real * this.sigma_index
            - this.rho_nominal_real
                * this.sigma_nominal
                * this.sigma_real
                * hw_b(this.a_nominal, end - u)
    }, self.a_real)
}
Example 17.3 (Is it worth anything).

At the calibration in the figure — a 1.0% nominal volatility, 0.7% real, 1.2% index volatility, ρn⁢r=0.6, ρr⁢I=−0.3 — and against a flat 2.53% breakeven:

Period starts Total correction Quanto part
1y −0.3 bp −0.3 bp
5y −1.8 bp −1.1 bp
10y −4.2 bp −2.0 bp
20y −8.8 bp −3.2 bp
30y −12.4 bp −3.9 bp

A basis point is nothing at the front end and a dozen of them at thirty years is not: on a long dated year-on-year book it is the difference between a position that makes money and one that does not.

Remark (Trusting this).

Equation (17.10) is exactly the kind of result that is easy to get wrong and hard to notice being wrong: a sign error inside it changes a number by a few basis points and nothing visibly breaks. So the implementation carries a second, independent route to the same answer — a Monte Carlo that steps both rates forward under (17.9) and averages the bond price ratio it finds, sharing none of the algebra above. The two agree across a range of correlations and volatilities to well inside the simulation error.

17.5 What Carries Over

Two things carry over from this chapter beyond the formulas.

The first is that a change of numeraire is a change of country, and that the cost of moving between them is always the same object: the covariance between the thing being valued and the exchange rate connecting the two numeraires. Written as −ρ⁢σS⁢σX it looks like a quanto convention. It is not; it is the Itô cross term, and it appears wherever a quantity is valued in a measure other than the one it was defined in.

The second is that recognising two markets as the same market is worth more than any individual result derived here. The inflation desk and the foreign exchange desk sit on different floors and quote in different units, and (17.9) is invisible from inside either one. It becomes obvious — almost forced — the moment the index is seen as an exchange rate. Chapter 18 does the same thing again, for correlation.

References

  • -

    Garman, M. B., & Kohlhagen, S. W. (1983). Foreign currency option values. Journal of International Money and Finance, 2(3), 231–237.

  • -

    Jarrow, R., & Yildirim, Y. (2003). Pricing treasury inflation protected securities and related derivatives using an HJM model. Journal of Financial and Quantitative Analysis, 38(2), 337–358.

  • -

    Brigo, D., & Mercurio, F. (2006). Interest Rate Models — Theory and Practice, 2nd ed. Springer.