Skip to content
All library documents

Mapping Par Swap DV01s to Zero-Rate Sensitivities

Article Quant Q&A · Author: SI7

Summary

The document explains how to convert a portfolio’s sensitivities to par swap rates into sensitivities to zero rates. It presents the conversion as a Jacobian problem: first derive how each par rate changes when individual zero rates move, then apply that matrix to the portfolio’s par-rate sensitivities. An analytic expression is given for annual payment periods, using discount factors and the dependence of each par rate on discount factors across its maturity.

A second formulation uses the calibrated reference instruments: because their prices remain fixed, changes in par and zero rates must offset one another. This yields a matrix relationship between the two rate systems. A code example illustrates calculation of the Jacobian, while the simpler single-rate approximation is left without a numerical accuracy assessment. The formulas rely on stated curve and compounding assumptions, so practical use requires matching the model’s conventions, cashflow schedule, and calibration setup.

Key ideas

  • Par-rate and zero-rate sensitivities are linked through the Jacobian of par rates with respect to zero rates.
  • The par-rate formula depends on discount factors across the swap’s payment dates.
  • For calibrated reference instruments, rate changes must preserve instrument prices, giving an implicit Jacobian transformation.
  • A one-node approximation is presented, but the document does not quantify its accuracy against the full multi-rate calculation.

Tags

Full text
# Bounds for Par vs Zero DV01


# Bounds for Par vs Zero DV01












Let’s say I have a swap portfolio and a vector of Par sensitivities (DV01‘s) for N nodes of a curve. Let’s call the vector P = (P_1,…,P_N). To derive the sensitivities w.r.t zero rates, we could of course do this numerically via bump and reprice or some jacobian transformation. Let’s call this Z = (Z_1,…,Z_N). Without doing these calculations, is there any reliable (and ideally simple) estimate/formula on Z_i - P_i)?

## Answer by Attack68 (score 3, accepted)

https://quant.stackexchange.com/a/76952

This is a better answer than the last, although this works on exactly same principle, it considers multiple rates and differentiates the discount factors which is needed to get the answer right.

You can derive the Jacobian analytically

I will change the notation to make it easier to type than before. Suppose you have par rates, $S_j$, and zero coupon swap rates, $Z_j$ (these are not continuously compounded zero rates but I imagine its pretty close).

These are all dependent upon the discount factors, $v_j$. I will assume all annual periods so $d_i = 1.0$.

$$S_j = \frac{1-v_j}{\sum_{i=1}^j d_i v_i}, \quad 1+Z_j = \left ( \frac{1}{v_j} \right ) ^{1/j} $$

Equating the DF at maturity gives:

$$ 1- S_j \sum_1^j d_iv_i = (1+Z_j)^{-j} $$

Noting that, $$ \frac{\partial v_i}{\partial Z_k} = -i(1+Z_i)^{-i-1} \delta_k^i $$ One can derive the following formula with basic calculus:

$$ \frac{\partial S_j}{\partial Z_k} = \frac{1}{\sum_1^j d_i v_i} \left ( \delta_k^j j(1+Z_j)^{-j-1} + \alpha_k^j S_j d_k k(1+Z_k)^{-k-1} \right ) $$

where $a_k^j=1$ if $k<=j$ or 0 otherwise. This equation has a scalar, a first term and a second term. All of which are visible in the calculations shown below in Excel, all based off the know discount factors.

This is replicable numerically as follows:

```
from rateslib import *

defaults.convention="ACt365F"
par_curve = Curve(
    nodes={
        dt(2022, 1, 1): 1.0,
        dt(2023, 1, 1): 1.0,
        dt(2024, 1, 1): 1.0,
        dt(2025, 1, 1): 1.0,
        dt(2026, 1, 1): 1.0,
        dt(2027, 1, 1): 1.0,
    },
    id="curve"
)
zero_curve = Curve(
    nodes={
        dt(2022, 1, 1): 1.0,
        dt(2023, 1, 1): 1.0,
        dt(2024, 1, 1): 1.0,
        dt(2025, 1, 1): 1.0,
        dt(2026, 1, 1): 1.0,
        dt(2027, 1, 1): 1.0,
    },
    id="curve"
)
par_inst = [
    IRS(dt(2022, 1, 1), "1Y", "A", curves="curve"),
    IRS(dt(2022, 1, 1), "2Y", "A", curves="curve"),
    IRS(dt(2022, 1, 1), "3Y", "A", curves="curve"),
    IRS(dt(2022, 1, 1), "4Y", "A", curves="curve"),
    IRS(dt(2022, 1, 1), "5Y", "A", curves="curve"),
]
zero_inst = [
    ZCS(dt(2022, 1, 1), "1Y", "A", curves="curve"),
    ZCS(dt(2022, 1, 1), "2Y", "A", curves="curve"),
    ZCS(dt(2022, 1, 1), "3Y", "A", curves="curve"),
    ZCS(dt(2022, 1, 1), "4Y", "A", curves="curve"),
    ZCS(dt(2022, 1, 1), "5Y", "A", curves="curve"),
]
par_solver=Solver(
    curves=[par_curve],
    instruments=par_inst,
    s=[3.5, 3.25, 2.75, 2.9, 3.1],
    instrument_labels=["1Yp", "2Yp", "3Yp", "4Yp", "5Yp"],
    id="Par IRS",
)
zero_solver=Solver(
    curves=[zero_curve],
    instruments=zero_inst,
    s=[float(_.rate(solver=par_solver)) for _ in zero_inst],
    instrument_labels=["1Yz", "2Yz", "3Yz", "4Yz", "5Yz"],
    id="Zero IRS",
)
par_solver.jacobian(zero_solver).style.format(precision=3)
```

## Answer by Attack68 (score 1)

https://quant.stackexchange.com/a/76944

You could try this and see how closely it aligns with the numerical Jacobian.

The continuously compounded zero rate is defined by the formula:

$$v_n = e^{-D_nr_z} $$

where $v_n$ is the discount factor at maturity and $D_n$ is the DCF til maturity.

On the other hand in a self discounted curve a par swap rate is defined as,

$$r_p = \frac{1-v_n}{\sum_i^n d_iv_i} \implies v_n = 1 - r_p \sum_i^n d_i v_i$$.

Now the par rate sensitivities, and zero rate sensitivities, respectively of your portfolio are defined as,

$$ \frac{\partial P}{\partial r_p}, \quad \frac{\partial P}{\partial r_z} = \frac{\partial P}{\partial r_p} \frac{\partial r_p}{\partial r_z}$$

where,

$$-D_n e^{-D_nr_z} = - \frac{\partial r_p}{\partial r_z} \sum_i^n d_i v_i \quad \implies \quad \frac{\partial r_p}{\partial r_z} = \frac{D_n v_n}{\sum_i^n d_i v_i}$$

I would like to see how well this approximates by doing the numerical analysis myself but dont have the time right now.

## Answer by Kermittfrog (score 1)

https://quant.stackexchange.com/a/76961

Just an addendum to @Attack68's answer:

Mathematically, we have that for a vector of par rates $\mathbf{s}$, consisting of par rates $s_i, i=1\ldots N$ in above answer, the corresponding vector of zero rates of equal length, $\mathbf{z}$, $z_i,i=1\ldots N$ is set such that the vector of reference instruments prices $\mathbb{f_0}$ (conveniently of length $N$) is met with equality (curves have been calibrated).

$$\mathbf{f}(\mathbf{s},\mathbf{z})\stackrel{!}{=}\mathbf{f_0}$$

When our curves are calibrated, we have the relationship in Attack's answer regarding the Jacobian:

$$ \mathbf{df}=\frac{\partial \mathbf{f}}{\partial \mathbf{s}}\mathbf{ds} + \frac{\partial \mathbf{f}}{\partial \mathbf{z}}\mathbb{dz}\stackrel{!}{=}0 $$

And thence

$$ \mathbf{dz}=-\left(\frac{\partial \mathbf{f}}{\partial \mathbf{z}}\right)^{-1}\frac{\partial \mathbf{f}}{\partial \mathbf{s}}\mathbb{ds} $$

Where the derivatives are understood matrices with typical component

$$ \left(\frac{\partial \mathbf{f}}{\partial \mathbf{z}}\right)_{i,j}=\frac{\partial f_i}{\partial z_j} $$ i.e. the derivative of swap $i$ with resepct to zero rate $z_j$.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.