There are some questions and answers on this site which touch upon this topic, but none actually show step-by-step on how to bootstrap a coupon OIS Swap curve to construct a zero-curve for discounting.

Bootstrapping a bond curve is easy: say we have three bonds with annual coupons and maturities 1 year, 2 years and 3 years. These bonds trade at prices $PV_1$, $PV_2$ and $PV_3$, with face-values $N$ and annual percentage coupons $C_1$, $C_2$ & $C_3$.

The 1y tenor zero-rate "$x$" simply solves $PV_1=\frac{N+C_1}{1+x}$.

The 2y tenor zero-rate "$y$" then solves $PV_2=\frac{C_2}{1+x}+\frac{N+C_2}{(1+y)^2}$.

The 3y tenor zero-rate "$z$" then solves $PV_3=\frac{C_3}{1+x}+\frac{C_3}{(1+y)^2}+\frac{N+C_3}{(1+z)^3}$.

My question is this: if we have three OIS swap with maturities 1y, 2y and 3y, and their (annual) fixed rates are $r_1$, $r_2$ and $r_3$ respectively, how can we bootsrap these swaps? What would be the equivalent $PV_1$, $PV_2$ and $PV_3$ on these swaps?


1 Answer 1


From Pricing and Hedging Swaps by Paul Miron and Philip Swannell:

Here I will take the input rates: $r_{1y}$, $r_{2y}$, $r_{3y}$ and create the DF values for each tenor $df_{1y}$, $df_{2y}$, $df_{3y}$, and thus create the zero coupon swap curve rates $z_{1y}$, $z_{2y}$, $z_{3y}$.

The book demonstrates how this formula represents both the fixed and floating cashflow of the swap (assuming fixed principle):

$PV(\text{swap_1y}) = -Pdf_0 + Pr_{1y}\alpha_{0,1y}df_{1y} + Pdf_{1y}$

$P = \text{principle}$

$df_x = \text{discount factor at some tenor } x$

$\alpha_{a, b} = \text{year fraction (using the day count basis of the fixed leg of the swap) between tenors } a \text{ and } b$

$r_x = \text{quote for the fixed leg of an annual swap for some tenor } x$

So since we know that for a swap $PV(\text{swap_1y}) = 0$ we can then see that:

$df_{1y} = \frac{df_0}{1+r_{1y}\alpha{0,1y}}$

Therefore we can extend this to the case of 2Y and 3Y:

$PV(\text{swap_2y}) = -Pdf_0 + Pr_{2y}\alpha_{0,1y}df_{1y} + Pr_{2y}\alpha_{1y,2y}df_{2y} + Pdf_{2y}$

$PV(\text{swap_3y}) = -Pdf_0 + Pr_{3y}\alpha_{0,1y}df_{1y} + Pr_{3y}\alpha_{1y,2y}df_{2y} + Pr_{3y}\alpha_{2y,3y}df_{3y} + Pdf_{3y}$

Again setting $PV(\text{swap_2y}) = 0$ and $PV(\text{swap_3y}) = 0$ we have:

$df_{2y} = \frac{df_0-r_{2y}\alpha_{0,1y}df_{1y}}{1+r_{2y}\alpha_{1y,2y}}$

$df_{3y} = \frac{df_0-r_{3y}(\alpha_{0,1y}df_{1y} + \alpha_{1y,2y}df_{2y})}{1+r_{3y}\alpha_{2y,3y}}$

At this point we have bootstrapped the curve to 3Y. In order to then create the zero curve values I can perform for any tenor $x$:

$z_{x} = \frac{1}{df_x}^\frac{1}{t_{0,x}} - 1$

$t_{a, b} = \text{Year fraction of your choice, suppose ACT/ACT, from } a \text{ to } b$

  • $\begingroup$ Thank you. Just to confirm: I suppose that $df_0=1$ by definition? $\endgroup$ Commented Nov 11, 2020 at 7:20
  • 1
    $\begingroup$ Yep that's right. I like to leave it written like that since when you want to do forward swap calculations you will replace it with the df at the tenor that the swap begins $\endgroup$
    – Dillon
    Commented Nov 11, 2020 at 21:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.