Try ResolutionPro today

ResolutionPro is an analytical toolkit for Excel for derivatives valuation and risk management.


    • derivative pricing calculators 
    • full function documentation
    • scenario analysis
    • examples

Free demo version is available.

Free TrialNo obligation download

Subscribe by Email

Your email:

Follow Me Blog

Current Articles | RSS Feed RSS Feed

Interest Rate Swap Tutorial, Part 5 of 5, building your swap curve


This is the fifth in a series of articles that will go from the basics about interest rate swaps, to how to value them and how to build a zero curve.

  1. Introduction to Interest Rate Swaps
  2. Fixed legs
  3. Floating legs
  4. Swap Curve building Part I
  5. Swap Curve building Part II

Swap Curve

In the final article in this series, we will continue to build out our discount factor curve using longer dated par swap rates. Par Swap rates are quoted rates that reflect the fixed coupon for a swap that would have a zero value at inception. 

Let look at our zero curve that we have built so far using LIBOR rates.

zero curve

We are now going to build out this curve out to 30 years using par swap rates. These rates are as of Nov 10, 2011, and reflect USD par swap rates for semi-annual LIBOR swaps. The daycount convention is 30/360 ISDA.

par swap rates

Also keep in mind that these rates reflect the settlement conventions, so the one year rate is for an effective date of Nov 14, 2011 and termination of Nov 14, 2012. If we were to price a one year swap from the curve we have built so far, we can derive the 6mo discount factor, but we are currently missing the 1year factor. Since we know the swap should be worth par if we receive the principal at maturity, then the formula for a one year swap is:

1 year par swap rate resized 600

Notice that the T's would be adjusted for holidays & weekends and are calculated using the appropriate discount factor. We can rearrange our formula to solve for df(1year).

swap bootstrapping

Using our example data:

discount factor par swap

We calculate the missing discount factor as: 0.99422634. But, this for a swap which settles on November 14th, and we are building our curve as of November 10th. So we need to multiple this by the discount factor for November 14th to present value the swap to November 10th. So the discount factor we use in our curve for Nov 14, 2012 is 0.9942107.

We continue by calculating discount factors for all the cashflow dates for our par swap rates. The next step is to calculate the discount factor for May 14, 2013. Our first step is to calculate a par swap rate for this date as it is not an input into our curve. We linear interpolate a rate between our 1 year and 2 year rates. 

1.5 year par swap rate = 1 year + (2 year - 1 year)/365 x days 

= .58% + (.60%-.58%)/365 x 181 = 0.589918%

We now can solve for the missing discount factor, continuing our bootstrapping through the curve.

zero curve construction

 You can download ResolutionPro for a free trial to use our curve building functions and for interest rate swap pricing. 

describe the image



Thanks for such a nice article. 
I was able to follow the steps till the Part-4. 
But I got confused at the Part-5. How we got the discount factor 0.9942107 for Nov 14, 2012
Also, how can I calculate the 8 year par swap rate? 
Please help me to understand this.
Posted @ Tuesday, May 29, 2012 7:12 AM by Vimal Raj Selvam
Hi Vimal, 
Please find the calculation below: 
[1 – (0.58%*0.996689*0.5)] / [1 + (0.58%*0.5)]  
0.99710960219 / 1.0029 = 0.994226345787217 
This value multiplied by the DF for Nov 14 2011 (0.999984) will give you the Zero rate DF that needs to be used in our curve 
So that means 0.994226 * 0.999984 = 0.99421 
Posted @ Tuesday, June 05, 2012 4:26 AM by Sandip Raj
Thanks for the wonderful article. COuld you please explain how the zero coupon rates are derived from Euro dollar future rates.
Posted @ Tuesday, June 05, 2012 4:27 AM by sandip raj
To add futures to a curve, its basically the same process as the cash rates. First you'd need the DF for the settlement date of the future.  
If this cannot be interpolated, then you'll need to make an assumption about the rate between the last known DF and the settle of that future.  
From there on, it's an exercise first calculating the DF between settle & expiry for each future, then multiplying by the DF for the settle date.  
Now, you may also want to do a convexity adjustment prior to this but that would be a separate topic. Hull's "Options Futures and other Derivatives" has a good description of how to do a convexity adjustment.  
Also, thanks for helping out Vimal above.
Posted @ Tuesday, June 05, 2012 11:54 AM by Resolution
Thanks for this short introduction and explanation of the basic mechanics of an interest rate swap. A large number of these swaps and other derivatives such as caps and collars have been mis-sold in the UK and your article highlights complexities which an ordinary man running a small business would not understand. 
LEXLAW Solicitors & Barristers
Posted @ Sunday, June 10, 2012 12:28 PM by LEXLAW Solicitors & Barristers
can u explain the reason for the formula to DF(1yr) i.e the section that states "Since we know the swap should be worth par if we receive the principal at maturity, then the formula for a one year swap is:" 
Posted @ Tuesday, July 10, 2012 11:31 PM by gabriel
That is basically the pricing formula for a 1 year swap with a $1 notional.  
Price = (coupon*t*df1) + (coupon*t*df2) + df2
Posted @ Wednesday, July 11, 2012 12:41 AM by Admin
Can you show formula to bootstrap > 1 year am struggling to replicate your figures. Thanks.
Posted @ Friday, July 20, 2012 11:01 AM by MARIA
Thanks for this great article. Could you detail your calculations for May-13 DF? Also when you use 0,5 time are you using a simple 6M/12M calculation or do you use the exact number of days between dates? If the later, could you detail your calculations? Best regards
Posted @ Saturday, August 04, 2012 8:43 AM by Fco
Thank you very much for this article. Could you detail your calculation for May-13 DF?
Posted @ Saturday, August 04, 2012 8:54 AM by Fco
I read this page and had the same question about taking the formula to the generic level. Here is the explanation, both for May 13 and then beyond. 
For May 13 the same formula is used but the numerator is extended one more period. It becomes  
1 – [ (R(1.5y)*df(6mo)*T1) + (R(1.5y) * df(1y) * T2) ] / [ (R(1.5y) * T3) + 1 ] 
In this case all the T’s are 0.5, representing a half year.  
R(1.5y) is 0.589918% as interpolated above. 
df(1y) is .99422634 as calculated above (Note that this is the df back to Nov 14, 2011, not the df which gets us back to Nov 10) 
The result is 0.991204. Multiply this value by the Nov 14 df of .99998433 to get 0.991188 as shown in the table as the 14-May-2013 discount factor taking us back to Nov 10, 2011. 
Here is the generic formula for the rest of the df’s. It uses the summation symbol which I will try to write out in plain text. I hope it is clear enough: 
df(n) = ( 1 – [ “summation where i=1 to n of” ( R(n) * df(i) * T(i) ) ] ) / ( 1 + R(n) * T(n) ) 
Posted @ Wednesday, August 15, 2012 12:39 PM by Dan Dasaro
This a great article and all makes sense. What does not seem right is the actual values. From your article, 11month libor cash deposits are at 0.91% yet implied 1 year ZC rates from the swap curve and using 6m libor have a discount rate of 0.994421077 which is close to 0.58%. This is miles away from 11m libor so there is a massive kink in the curve. Indeed irespective of which market you look at on bloomberg, the 1 year libor cash rate is significantly higher than the 1 year ZC rate implied from the swap curve and 6m libor rate. The logic of your article is spot on but the numbers dont seem right which makes me think I am missing something. 
Posted @ Tuesday, August 28, 2012 7:27 AM by toby hayes
Hi thanks for the great article. I brought it up to spreadsheet level (as it should be;) but the numbers are different. I think it should be some Excel rounding glitch but it's quite annoying anyway! Feels there's something wrong i it... 
ex. Until 21-nov all Dfs are fine but my 28.nov.11 DF = 0,99986593; and from there on it all goes different, of course. Just as so df(1y) is 0,99424461 and valuate to Nov 10 (PV) I get 0,994240713 
My 7Y DF is 0,5339 and not 0,8995 
Posted @ Thursday, August 30, 2012 2:42 PM by Antonio L
This was a very useful article and I was able to exactly replicate the zero curve which the trading system threw out in excel. 
The only part which I am unable to figure out is the pricing of 1$ notional 1 year IRS mentioned in your comments. 
Is it possible to explain more on this or give some reference article. 
Your help on this is much appreciated. 
Thanks & Regards, 
Posted @ Wednesday, December 12, 2012 12:43 PM by Aravind
Thanks for this article. This is the most informative article I found on build a zero curve. 
Posted @ Wednesday, December 12, 2012 1:54 PM by Aravind
Thankyou for a the practical step by step guide.... but still have problem with the last part  
This one is ok 
1 – [ (R(1.y)*df(6mo)*T1) / [ (R(1.y) * T2) + 1 ]  =0,994112 
And so is this one 
1 – [ (R(1.5y)*df(6mo)*T1) + (R(1.5y) * df(1y) * T2) ] / [ (R(1.5y) * T3) + 1 ]  =0,991189 
but when I put in the figures for this one i get a diffrent result  
1 – [(R(2y)*df(6mo)*T1)+ (R(2y)*df(1mo)*T2) + (R(2y) * df(1,5y) * T3) ] / [ (R(2y) * T4) + 1 ]  =0,9999662313 
(1-(0,6%*0,996689*0,5)+(0,6%*0,994211*0,5)+(0,6%*0,991188))/((0,6%*0,5)+1)==0,9999662313 but according to your figure it should be 0,988074 
Your help on this is much appreciated.  
Thanks & Regards, 
Posted @ Friday, December 14, 2012 11:12 PM by Egil
a) You were missing the 0.5 for the 1.5 year term 
Value as of 14-Nov-11= 
(1-((0.6%*0.996689*0.5)+(0.6%*0.994211*0.5)+(0.6%*0.991188*0.5)))/((0.6%*0.5)+1)= 0.988089467597209 
b) Now to get the PV as of 10-Nov-11, you have to multiply 0.988089467597209 by 0.999984 and you will get 0.988074
Posted @ Thursday, January 03, 2013 3:31 PM by Ravindran
Thanks for taking the time to post this article. Very useful to see your workings and explanation on conventions. 
I have one question which it would be great if you could help me with. 
When building the swap curve you calculate the swap maturity discount factor and then you say that as the swap settles on the 14th that you need to discount it back to the 10th. 
My confusion is that when calculating the swap maturity discount factor you are already using discount factors that have already been adjusted back to the 10th. 
e.g. for the 1yr swap you are using the 6m discount factor of 0.99668895 which was the discount factor for 6m to 14th of 0.9967045624, discounted back to 10th. 
Should this not therefore provide a discount factor for the swap maturity that is already back to the 10th? 
Many thanks in advance for you to take the time to review and reply to my question/confusion. 
p.s. here are my workings in case it helps: 
Cash Curve: 
Start Date: 2011-11-14 
End Date: 2012-05-14 
Annualized Rate %: 0.006540 
Days in Period: 182 
Direct discount factor to 2011-11-14: 0.99670456248158173027 
Direct discount factor to 2011-11-10: 0.99668894764220021318 
Start Date: 2011-11-14 
End Date: 2012-11-14 
Coupon Frequency: SEMIANNUAL 
Market Rate %: 0.0058 
Cashflows: [2012-05-14, 2012-11-14] 
Sum of Z0 ... Zn-1 Factors: 0.99668894764220021318 
Coupon per period %: 0.00290 
Start Date: 2011-11-14 
End Date: 2012-11-14 
Annualized Rate: 0.0058 
Days to maturity: 370 
Calculated discount factor: 0.99422634564945420220 (without additional discounting) 
Calculated discount factor: 0.99421076963497551278 (using discount factor 14th as suggested in your article)
Posted @ Tuesday, March 19, 2013 7:34 AM by Joe
Once again, thanks for the great article. 
I really have big issue to figure out the right formula for the numerator. 
For instance, 
why do we have to calculate this: 
1 – [(R(2y)*df(6mo)*T1)+ (R(2y)*df(1mo)*T2) + (R(2y) * df(1,5y) * T3) ] / [ (R(2y) * T4) + 1 ]  
for the 2Y DF ? I know it's related to the formula for 2year swap but I don't get why we should use df(1mo) and df (1,5y). 
Huge thanks in advance  
Posted @ Monday, March 25, 2013 8:56 AM by Mic
Thanks for the article. 
In all forum, article , swap rate are always obvious one but I dont get it.  
We use swap rate 2y and more in most of the swap curve. Yes they are quoted (you can use them directly, I get that). But how traders come with these number? How can they replicate (or hedge)? Thanks to explain swap rate. 
Posted @ Wednesday, April 03, 2013 9:47 AM by Wonderwhy
Hi, I'm getting exactly to the right same numbers until this date, 
14-May-2015, where I start to get slight decimal variations, for example for this particular date I get 0.9710242 instead of 0.971046 which makes a significant difference to the overall curve, has anybody get to this right number 0.971046 ? 
Posted @ Thursday, August 15, 2013 8:23 AM by JMD
Hi. Thank you for the article. I have a question. In the calculation of 1yr df for example, the first cash flow (=0.5*1yr Swap rate occurring on 5/14/2012) is discounted already back to 11/10/2011 by using 0.9966889 as a discount factor, not to 11/14/2011. By multiplying the resulting 1y df with the T/N df, that cash flow is discounted twice for the period of 5/10/2011~5/14/2011. I think that to be precise, the df for the first cash flow should be 0.996704562 instead of 0.99668895 if the T/N df is to be multiplied to the resulting 1y df. "0.996704562" is the discount factor for the period of 6 month from 11/14/2011. Am I missing something?
Posted @ Friday, September 12, 2014 11:32 AM by BDS
Post Comment
Website (optional)

Allowed tags: <a> link, <b> bold, <i> italics