Skip to content
Sarthak Bagaria
All notes

Chapter 6 Numeraires

In these notes we change the unit of account, which is the most useful single manoeuvre in derivative pricing and the least intuitive. Girsanov’s theorem says a measure change moves drifts and cannot touch volatilities, and that asymmetry is what makes the technique work: choosing a numeraire chooses which quantity is a martingale, and the right choice makes a hard expectation trivial. We derive the forward and annuity measures that chapter 7 and chapter 15 need, and find that no-arbitrage assigns one price to each source of risk — the same projection that reappears as a hedge in chapter 23.

6.1 Change of Measure

Definition 6.1 (Radon-Nikodym Derivative).

Consider two equivalent probability measures and ^ on a measurable space (Ω,Σ). The Radon-Nikodym derivate d^/d:Ω is defined such that for any subset A,ΩAΣ,

A𝑑^=A(d^/d)𝑑. (6.1)

Suppose (Ω,,t) is a filtered probability space, then note from the above definition we have

(d^/d)|t=𝔼[(d^/d)|t] (6.2)

(d^/d)|t is also written as (d^/d)t and is thus a martingale stochastic process (by iterated conditioning) in .

Example 6.1.

Let’s consider a simple example to better understand the Radon Nikodym derivative. Consider a die roll. We can assign multiple probability distributions to the outcomes.

ω ^ d^/d
1 1/6 1/2 3
2 1/6 1/4 3/2
3 1/6 1/8 3/4
4 1/6 1/16 3/8
5 1/6 1/32 3/16
6 1/6 1/32 3/16

The probability in ^ of getting an odd number is ω{1,3,5}𝑑^=1/2+1/8+1/32=21/32=31/6+3/41/6+3/161/6=ω{1,3,5}(d^/d)𝑑

Theorem 6.2 (Abstract Bayes’ Theorem).

Let and ^ be two measures on measurable space (Ω,). Let 𝒢 be another sigma algebra on Ω. Then for any A𝒢 and random variable X

𝔼^[X|𝒢]=𝔼[(d^/d)X|𝒢]𝔼[(d^/d)|𝒢]. (6.3)
Proof.

We show that for any A𝒢

𝔼^[X|𝒢]𝔼[(d^/d)|𝒢]=𝔼[(d^/d)X|𝒢]

Since the random variables involved are constant over A, we can check equality on integrals over A.

A𝔼^[X|𝒢]𝔼[(d^/d)|𝒢]𝑑 =A𝔼[(d^/d)𝔼^[X|𝒢]|𝒢]𝑑 (𝔼^[X|𝒢] is 𝒢 measurable)
=A(d^/d)𝔼^[X|𝒢]𝑑 (conditional expectation)
=A𝔼^[X|𝒢]𝑑^ (Radon-Nikodym)
=AX𝑑^ (conditional expectation)
=A(d^/d)X𝑑 (Radon-Nikodym)
=A𝔼[(d^/d)X|𝒢]𝑑.

The last step is the definition of conditional expectation. ∎

Remark.

Taking X=VT where Vs is s adapted and G=t for t<T in the above theorem, we get the very useful formula for measure change for conditional expectations on filtered spaces,

𝔼^[VT|t]=𝔼[(d^/d)T(d^/d)tVT|t] (6.4)
Proof.
𝔼^[VT|t] =𝔼[(d^/d)VT|t]𝔼[(d^/d)|t] (abstract Bayes’ theorem)
=𝔼[𝔼[(d^/d)VT|T]|t]𝔼[(d^/d)|t] (iterated conditioning)
=𝔼[𝔼[(d^/d)|T]VT|t]𝔼[(d^/d)|t] (VT is T measureable)
=𝔼[(d^/d)TVT|t](d^/d)t (martigale property of Radon Nikodym derivative)
=𝔼[(d^/d)T(d^/d)tVT|t] ((d^/d)t is t measurable).

We consider processes until terminal time S i.e. =S and (d^/)=(d^/)S. We take a strictly positive martingale process to be the Radon-Nikodym derivative:

dft=ftσ(t)dWt;ft=e0t12σ2(s)𝑑s+0tσ(s)𝑑Ws. (6.5)
Structure (A measure change moves the drift and cannot touch the volatility).

Before the theorem, the shape of what it says. Girsanov changes the drift of a process and leaves its diffusion coefficient exactly where it was.

That asymmetry explains several things at once, and stating it precisely matters, because the loose version is misleading in a way that bites later.

Quadratic variation is computed pathwise: Mt is a limit of sums of squared increments of the trajectory that actually occurred, so it is a random variable and not an expectation. Different paths have different quadratic variations — in a stochastic volatility model St=0tvsSs2𝑑s, and a path that spent its life in a high-variance regime has a larger one than a path that did not. What is measure-invariant is therefore not a number but a function of the path: the map from trajectory to accumulated variance mentions no measure anywhere, so two equivalent measures assign the same quadratic variation to the same path. They disagree about which paths are likely, not about what each path’s variance is. Equivalence is doing exactly one job in that sentence: the limit converges in probability, so M is defined only up to null sets, and equivalent measures are precisely those that agree on which sets those are.

That is why volatility can be estimated from one realisation and drift cannot. An observer sees a single trajectory; the sums of squared increments of that trajectory converge without reference to any measure, so no averaging over paths that did not happen is required. A statement about drift is the opposite kind of statement — it is a claim about the average over the paths one did not see — so it needs either many independent histories, of which there is one, or a long span of time. Chapter 21 measures the consequence: over a fixed window, sampling faster drives the volatility error to zero and leaves the drift error exactly where it was. It is also why chapter 22 can measure realised volatility and must argue about expected returns, and why every model in these notes is calibrated on volatilities and never on drifts.

It is also why the risk neutral measure exists at all. Pricing requires the drift to be one particular thing, the measure change is free to set it, and nothing about the observable roughness of the path has to be disturbed to do so.

One consequence deserves drawing out now, because collapsing it is the commonest way to misread the paragraph above. The quadratic variation of a given path is measure-free; the distribution of quadratic variation across paths is not. So

𝔼[ST]𝔼[ST]

is perfectly consistent with everything just said, and it is the variance risk premium that chapter 21 measures — the reason implied volatility exceeds realised on average. Girsanov leaves σ alone as a coefficient and does not leave the law of accumulated variance alone at all, because in a stochastic volatility model it changes the drift of v itself. The two statements to keep apart are that the realised variance of the path one saw is a fact, and that the variance one expects is a choice of measure.

Theorem 6.3 (Girsanov Theorem).

If W1,t and W2,t are (possibly correlated) Brownian motions in and the Radon-Nikodym derivative (d^/d)t=ft is given by ft=e0t12σ2(s)𝑑s+0tσ(s)𝑑W2,s then W1,t0tσ(s)𝑑W1,s𝑑W2,s is a Brownian motion in ^, where dW1,sdW2,s is the covariation rate of W1 and W2 (zero if they are independent, ρds if correlated at ρ, and ds in the case W1=W2).

Proof.

We show that Xt=W1,t0tσ(s)𝑑W1,s𝑑W2,s follows normal distribution with mean 0 and variance t in ^. Other required properties can be verified easily. We show that the moment generating function of Xt is same as that of normal distribution with mean 0 and variance t.

𝔼^[eyXt] =𝔼[(d^/d)teyXt]
=𝔼[e0t12σ2(s)𝑑s+0tσ(s)𝑑W2,seyXt]
=e0t12σ2(s)𝑑s𝔼[e0tσ(s)𝑑W2,syXt]
=e0t12σ2(s)𝑑s𝔼[e0tσ(s)𝑑W2,sy(W1,t0tσ(s)𝑑W1,s𝑑W2,s)]
=e0t12σ2(s)𝑑s𝔼[e0t(σ(s)dW2,sydW1,s+yσ(s)dW1,sdW2,s)].

Define the martingale Zy,t=0t(σ(s)dW2,sydW1,s). Then eZy,t120t𝑑Zy,s𝑑Zy,s is a martingale as well, with

dZy,sdZy,s=(σ2(s)+y2)ds2yσdW1,sdW2,s.

We then have

𝔼^[eyXt] =e0t12σ2(s)𝑑s𝔼[eZy,t120t𝑑Zy,s𝑑Zy,s+120t(σ2(s)+y2)𝑑s]
=e12y2t𝔼[eZy,t120t𝑑Zy,s𝑑Zy,s]
=e12y2t(eZy,t120t𝑑Zy,s𝑑Zy,s)|t=0
=e12y2t.

Remark (What a change of measure does, and what it does not do).

The algebra above is dense enough to lose the idea in, and the idea is simple. A change of measure does not move anything. Every path the world could take is still available afterwards, ending where it always would have. What changes is how much each one counts.

The die in the example at the start of this chapter is the honest picture of it: the same six faces, reweighted. Girsanov is that operation performed on a continuum of paths rather than six outcomes, and the Radon-Nikodym derivative is the column of weights.

For the geometric Brownian motion of chapter 5 the weights can be written down. If the asset drifts at μ in the real world and at r under the risk neutral measure, the change of measure is governed by

θ=μrσ, (6.6)

the excess return per unit of risk, called the market price of risk. A path ending at ST carries the weight

dd=eθWT12θ2T, (6.7)

which decreases in WT and therefore in ST: the risk neutral measure counts the good outcomes for less. That is the whole content of the phrase “removing the risk premium”, and (6.6) says exactly how much removing costs.

InfinityInfinityPrice in one yearProbability density

The dotted sample is drawn under the real-world measure and then multiplied by dQ/dP. It lands on the risk-neutral curve, which the sampling never saw. Drag μ down onto the interest rate and the weight flattens onto one, the two densities merge and the sample follows: with no risk premium there is nothing to reweight. At these settings the premium is 9.0% and the market price of risk is 0.36.

Figure 6.1: A change of measure, performed rather than described. The dotted sample is drawn under the real world measure at μ=12% and never redrawn; each draw is then multiplied by the weight (6.7). It lands on the risk neutral density at r=3%, which the sampling never saw. The second panel is the weight itself, tilting down across the outcomes. Drag μ onto the interest rate and the weight flattens onto one, the two densities merge, and the sample follows them — with no risk premium there is nothing to reweight, and the two measures coincide.
Show the model behind this figure (2 functions)
/// The Radon-Nikodym derivative `dQ/dP`, as a function of the terminal price.
///
/// Every path ending at `x` carries this weight. It is a decreasing function of
/// `x` whenever the asset earns a risk premium: the risk-neutral measure counts
/// the good outcomes for less, which is the whole of what "removing the risk
/// premium" means once it is written down.
pub fn radon_nikodym(x: f64, spot: f64, mu: f64, r: f64, sigma: f64, t: f64) -> f64 {
    if x <= 0.0 || sigma <= 0.0 || t <= 0.0 {
        return 1.0;
    }
    let theta = market_price_of_risk(mu, r, sigma);
    // The standard normal draw that produced this terminal price under P.
    let z = ((x / spot).ln() - (mu - 0.5 * sigma * sigma) * t) / (sigma * t.sqrt());
    (-theta * t.sqrt() * z - 0.5 * theta * theta * t).exp()
}
reweighted_histogramquant/src/measure.rs
/// The reweighted histogram of a sample drawn under the real-world measure.
///
/// `grid` supplies the bin centres. Returns a density: the total weight landing
/// in each bin, divided by the bin width and by the total weight of the sample.
///
/// Nothing here knows the risk-neutral density. The sample is drawn once under
/// `mu`, and the only risk-neutral quantity used is the weight. The numeraires
/// chapter's claim is that this reproduces the risk-neutral density anyway, and
/// [`tests::reweighting_a_real_world_sample_gives_the_risk_neutral_density`]
/// checks it.
pub fn reweighted_histogram(
    grid: &[f64],
    spot: f64,
    mu: f64,
    r: f64,
    sigma: f64,
    t: f64,
    paths: usize,
    seed: u64,
) -> Vec<f64> {
    let n = grid.len();
    if n < 2 {
        return vec![0.0; n];
    }
    let width = (grid[n - 1] - grid[0]) / (n - 1) as f64;
    let (lo, hi) = (grid[0] - 0.5 * width, grid[n - 1] + 0.5 * width);

    let mut bins = vec![0.0; n];
    let mut total = 0.0;
    let mut rng = Rng::new(seed);

    for _ in 0..paths {
        // One draw under the real-world measure. This is the sample, and it is
        // never redrawn: the risk-neutral column below comes from reweighting
        // these same numbers.
        let z = rng.next_normal();
        let x = spot * ((mu - 0.5 * sigma * sigma) * t + sigma * t.sqrt() * z).exp();
        let weight = radon_nikodym(x, spot, mu, r, sigma, t);
        total += weight;
        if x >= lo && x < hi {
            let bin = (((x - lo) / width) as usize).min(n - 1);
            bins[bin] += weight;
        }
    }

    if total <= 0.0 {
        return bins;
    }
    for b in &mut bins {
        *b /= total * width;
    }
    bins
}
Structure (One price per risk, and no-arbitrage is what sets it).

The scalar θ=(μr)/σ above is a ratio that is easy to read as bookkeeping. With more than one asset it stops being bookkeeping and becomes the fundamental theorem in coordinates.

Take n assets driven by d Brownian motions, with σ the matrix of loadings and μr𝟏 the vector of excess returns. Girsanov shifts each Brownian motion by some θj, and asset i’s drift falls by its own exposure to those shifts. Demanding that every asset end up drifting at r under one measure is therefore the linear system

μr𝟏=σθ. (6.8)

Read the indices. There is one θj per Brownian motion and not one per asset: a price of risk belongs to the risk, and each asset’s excess return is forced to be its own loadings against those common prices. Two assets exposed to the same factor must reward that exposure at the same rate, whatever else differs between them.

Which is a statement no-arbitrage can enforce, and does. If two assets on one Brownian motion offered different Sharpe ratios, sell the one paying less per unit of risk, buy the one paying more, in the ratio that cancels the exposure — the position has no randomness left and a positive drift. Solvability of (6.8) is exactly the absence of that trade, which is chapter 4’s fundamental theorem written with matrices instead of measures:

Statement about (6.8) Statement about measures
solvable a risk neutral measure exists, so no arbitrage
uniquely solvable it is unique, so the market is complete
unsolvable an arbitrage, and the residual is the portfolio

The last row is constructive rather than merely a diagnosis. Solving (6.8) in the least squares sense leaves a residual orthogonal to every column of σ — so a portfolio holding those weights carries no exposure to any factor at all — while its excess return is the residual’s own squared length, and therefore positive precisely when no set of prices fits. The failure hands over the trade. factor_risk_prices builds it and checks both halves.

This is also where chapter 8’s term structure models get their λ. Every bond on the curve is driven by the same short rate, so every bond must reward that one risk at one rate, and forming a riskless combination of two maturities is the argument above with n=2. The market price of interest rate risk is not an extra modelling assumption. It is (6.8) with one column.

6.2 Numeraire Measures

Definition 6.4 (Numeraire).

A Numeraire is a strictly positive price process of a tradable relative to which prices of all other tradables are expressed.

A savings account which earns interest at the instantaneous interest rate can be taken as a numeraire. The value of the savings account at any point is given by

At=e0tr(t)𝑑t=1/D(t) (6.9)

where D(t) is the discount factor.

The fact that discounted trade prices are martingales in risk-neutral measure can then also be stated as: tradable prices in savings account (or money market) numeraire are martingales.

Consider another numeraire Nt. Since the numeraire is itself a price process, DtNt is a martingale and we can take it as a Radon-Nikodym derivative, with a suitable normalization so that 𝔼[(d/d)]=1, giving

𝔼[XTNT|t]=𝔼[(d/d)T(d/d)tXTNT|t]=𝔼[DTNTDtNtXTNT|t]=1DtNt𝔼[DTXT|t]=XtNt (6.10)

where is the risk neutral measure and is the measure corresponding to the numeraire Nt.

Remark (Prices in a numeraire are martingales in its measure).

The above equation shows that tradable prices with respect to a numeraire are martingales in the measure corresponding to the numeraire.

Risk neutral measure corresponds to the savings account (or money market) numeraire.

Definition 6.5 (T-forward measure).

If we take Nt to be the price of a riskless bond maturing at time T, the corresponding measure is the T-forward measure.

Xt/B(t,T)=𝔼T[XT/B(T,T)]=𝔼T[XT] (6.11)

We see that the expectation of XT in the T-forward measure gives the forward price Xt/B(t,T) of the trade with expiration date T, hence the name T-forward measure. From the above equation we also notice that expiration T forward price process on an asset is martingale in T-forward measure.

Everything so far says which quantities are martingales under which measure, which is a statement about drifts being zero. The working question is usually the neighbouring one: given a process’s drift under one numeraire, what is it under another. The answer follows from Girsanov and the density identified above, and it is short enough to record once and use thereafter — chapter 13 in particular does almost nothing else.

Theorem 6.6 (Change of numeraire, in drifts).

Let A and B be numeraires, with A and B the corresponding measures, and let X be an Itô process. Then

driftB(X)=driftA(X)+ddtX,lnBAt. (6.12)

In particular, for a strictly positive S the drift of lnS picks up dlnS,ln(B/A), and so does the relative drift in dSt/St.

Proof.

B is the price of a tradable and A is the numeraire, so B/A is a price expressed in units of A and is a A martingale by the remark above. Normalising it,

Zt=Bt/AtB0/A0,

gives a strictly positive A martingale starting at one, and it is exactly the density (dB/dA)t identified earlier in this section.

Being positive it can be written dZt=ZtνtdWtA, and Girsanov then says WB=WAν𝑑s is a Brownian motion under B. So for any dXt=μtAdt+σtdWtA, substituting dWA=dWB+νdt gives

dXt=(μtA+σtνt)dt+σtdWtB.

It remains to recognise σν. By Itô, dlnZ=νdWA12ν2dt, so dX,lnZ=σνdt; and lnZ differs from ln(B/A) by a constant, which no covariation sees. That is (6.12).

For the last claim take X=lnS. The relative drift follows because dS/S=dlnS+12dlnS, and the quadratic variation term is pathwise and so the same under both measures. ∎

Remark (Reading the formula).

Three things stand out, since the formula gets used more often than it gets derived.

It depends on B/A alone. Neither numeraire matters on its own, only their ratio, which is why changing from A to B and back leaves every drift where it started.

A process uncorrelated with that ratio does not move at all. The adjustment is a covariation, so it vanishes exactly when the process and the numeraire ratio share no randomness, however volatile either happens to be.

And what it adjusts is a drift, never a volatility — the structure block at the head of this chapter, arriving as a formula.

Example 6.2 (Option Pricing).

To see how measure changes can be used in pricing, let’s take the example of Black Scholes option pricing. For an option on stock with expiry at T and strike K, we have the valuation forumula

Vt=1Dt𝔼[DTmax(STK,0)|t]

where is the risk neutral probability measure, Dt is the discount factor and St is the stock price which follows the Black Scholes diffusion

dStSt=rdt+σdWt

where r is the riskfree interest rate and Wt is a Brownian motion in .

Denote by 𝕀ST>K the indicator variable which takes value 1 is ST>K and 0 otherwise. We then have

Vt =1Dt𝔼[DT𝕀ST>K(STK)|t]
=1Dt𝔼[DT𝕀ST>KST|t]1Dt𝔼[DT𝕀ST>KK|t]

Taking 𝕊 to be the measure corresponding to stock price as numeraire, and taking 𝕋 to be the measure corresponding to T-expiry bond as numeraire, we have

Vt =1Dt𝔼𝕊[DT(d/d𝕊)T(d/d𝕊)t𝕀ST>KST|t]1Dt𝔼𝕋[DT(d/d𝕋)T(d/d𝕋)t𝕀ST>KK|t]
=1Dt𝔼𝕊[DT(d𝕊/d)t(d𝕊/d)T𝕀ST>KST|t]1Dt𝔼𝕋[DT(d𝕋/d)t(d𝕋/d)T𝕀ST>KK|t]
=1Dt𝔼𝕊[DTDtStDTST𝕀ST>KST|t]1Dt𝔼𝕋[DTDt(B(t,T))DTB(T,T)𝕀ST>KK|t]
=St𝔼𝕊[𝕀ST>K|t]KB(t,T)𝔼𝕋[𝕀ST>K|t]

where B(t,T) is the bond price with the diffusion

dB(t,T)/B(t,T)=rdt+σ2dW2,t

where W2,t is another Brownian motion in such that dWtdW2,t=ρdt.

Using Girsanov’s theorem, we have

dWt𝕊 =dWtσdWtdWt =dWtσdt
dWt𝕋 =dWtσ2dWtdW2,t =dWtσ2ρdt

as Brownian motions in the measures corresponding to S, and B(t,T) numeraires respectively.

dStSt=rdt+σ(dWt𝕊+σdt)=rdt+σ(dWt𝕋+σ2ρdt) (6.13)

where dWt𝕊=dWtσdt is a Brownian motion in 𝕊 and dWt𝕋=dWt𝕊σ2ρdt is a Brownian motion in 𝕋. Rearranging,

dStSt=(r+σ2)dt+σdWt𝕊=(r+σσ2ρ)dt+σdWt𝕋 (6.14)
ST=Ste(r+12σ2)τ+σWτ𝕊=Ste(r+σ(σ2ρ12σ))τ+σWτ𝕋 (6.15)

where τ=Tt.

𝔼𝕊[𝕀ST>K|t] =𝔼𝕊[𝕀Ste(r+12σ2)τ+σWτ𝕊>K|t]
=𝔼𝕊[𝕀(r+12σ2)τ+σWτ𝕊>log(K/St)|t]
=𝔼𝕊[𝕀σWτ𝕊>log(K/St)(r+12σ2)τ|t]
=𝔼𝕊[𝕀1τWτ𝕊>1στ(log(K/St)(r+12σ2)τ)|t]
=N(1στ(log(K/St)(r+12σ2)τ))
=N(d1)

where N is the cumulative normal distribution, and d1=1στ(log(St/K)+(r+12σ2)τ).

Similarly we have,

𝔼𝕋[𝕀ST>K|t] =𝔼𝕋[𝕀Ste(r+σ(σ2ρ12σ))τ+σWτ𝕋>K|t]
=𝔼𝕋[𝕀(r+σ(σ2ρ12σ))τ+σWτ𝕋>log(K/St)|t]
=𝔼𝕋[𝕀σWτ𝕋>log(K/St)(r+σ(σ2ρ12σ))τ|t]
=𝔼𝕋[𝕀1τWτ𝕋>1στ(log(K/St)(r+σ(σ2ρ12σ))τ)|t]
=N(1στ(log(K/St)(r+σ(σ2ρ12σ))τ))
=N(d2)

where N is the cumulative normal distribution, and d2=1στ(log(St/K)+(r+σσ2ρ12σ2)τ).

And finally we have,

Vt =StN(d1)KB(t,T)N(d2)
=StN(d+στ)KB(t,T)N(d+σ2ρτ)

where d=1στ(log(St/K)+(r12σ2)τ).

Note that σdt and σ2ρdt are the drift correction terms we get to stock price Brownian motion using Girsanov’s theorem to change measure to stock and bond numeraires respectively.

Remark (The two terms are one event counted twice).

The derivation above deserves one more sentence: it explains something about the Black formula that is usually left as a curiosity.

N(d1) and N(d2) are both the probability of {ST>K} — the same event, the option finishing in the money. They are different numbers because they are computed under different measures: N(d1) under the measure in which the stock is the numeraire, N(d2) under the T-forward measure. Neither is “the” probability of exercise, and asking which one is misses that the question has no answer until a numeraire is named.

The gap between them is the measure change, and it is στ worth of shift in the argument of N. It is therefore largest for long dated and volatile options and vanishes as στ0, where there is no randomness for the reweighting to act on and the two measures agree.

40608010012014016018020000.20.40.60.81StrikeProbability of finishing above the strike
  • Share measure, N(d₁)
  • T-forward measure, N(d₂)
Figure 6.2: The probability that a one year option finishes in the money, at a 25% volatility, under the two measures the Black formula is assembled from. The share measure weights each path by the terminal price itself, so it counts the paths finishing high for more — and those are exactly the paths on which the option is exercised. It therefore assigns the higher probability at every strike. Both curves describe the same event; the market has not been consulted twice.
Show the model behind this figure (1 function)
exercise_probabilitiesquant/src/measure.rs
/// The probability of finishing above `strike`, under two different measures.
///
/// Returns `(N(d1), N(d2))`. These are the two terms of the Black formula, and
/// the numeraires chapter derives them as the probability of the *same event*
/// under the share measure and under the `T`-forward measure. They are
/// different numbers because the measures are different, not because the event
/// is.
pub fn exercise_probabilities(forward: f64, strike: f64, sigma: f64, t: f64) -> (f64, f64) {
    if strike <= 0.0 {
        return (1.0, 1.0);
    }
    if sigma <= 0.0 || t <= 0.0 {
        let exercised = if forward > strike { 1.0 } else { 0.0 };
        return (exercised, exercised);
    }
    let vol = sigma * t.sqrt();
    let d1 = ((forward / strike).ln() + 0.5 * vol * vol) / vol;
    (norm_cdf(d1), norm_cdf(d1 - vol))
}

References

  • -

    Girsanov, I. V. (1960). On transforming a certain class of stochastic processes by absolutely continuous substitution of measures. Theory of Probability and its Applications, 5(3), 285–301.

  • -

    Geman, H., El Karoui, N., & Rochet, J.-C. (1995). Changes of numeraire, changes of probability measure and option pricing. Journal of Applied Probability, 32(2), 443–458.

  • -

    Jamshidian, F. (1997). LIBOR and swap market models and measures. Finance and Stochastics, 1(4), 293–330.