# RQuantLib, Hoadley and Bloomberg YAS: fixed rate bond pricing differences?

I'm trying to price a fixed rate bond one year from now on.

The bond is the PEUGOT 7 ⅜ 03/06/18, whose ISIN code is FR0011439975. I'm using such a specific example because in this way everyone can try to reproduce results.

I am using these instruments:

• Bloomberg YAS function
• RQuantLib package FixedRateBondPriceByYield() function
• Hoadley Excel add-in HoadleyBond() function

and getting different results.

Then there must be something wrong with me, because fixed rate bond pricing is an easy task.

Bond's features (RQuantLib / Hoadley fields name):

• faceAmount / principal $= 100$
• effectiveDate / Valuation_date = 10 May 2014
• maturityDate / Maturity = 6 March 2018
• rates / Coupon_rate $= 0.07375$
• period / Coupon_freq $= 1$ (Annual)
• yield / Term_struc $= 0.06535$ (flat curve due to pricing with YTM)
• redemption $= 100$

Other arguments, such as settlement days, calendar rules and so on, can be ignored because I don't need such an accuracy.

Results:

• Bloomberg YAS function clean price $= 102.72$
• RQuantLib package FixedRateBondPriceByYield() function clean price $= 96.67$
• Hoadley Excel add-in HoadleyBond() function clean price $= 103.31$

Where's my mistake? What am I not taking into consideration?

-
You probably won't get any answers unless you post complete source code and data on dropbox or something. Even then, it's a roll of the dice. –  Brian B May 10 '13 at 17:23
Hi Brian B. I've included all data which are needed to price that bond, I do not understand what else could make my question more comprehensible. I could attach R code but in fact it is sufficient one to copy each field value in FixedRateBondPriceByYield() to get the same result... unless I've made some mistakes, that is quite likely according to the difference with Bloomberg YAS. –  Lisa Ann May 10 '13 at 18:46

in RQuantLib you need to set the evaluation date using setEvaluationDate() This is the date used by all QuantLib valuation functions in your case 10 May 2014.

-

Let's approximate the time to maturity to be 3 years and 10 months. Assume that coupon is paid on March 6 each year. Let face value $F=100$ and coupon $c=0.07375F$. Let the discount factor be $d(0,T)=e^{−r T}$ where $r=0.06535$. The price of the bond is $$ce^{−10/12 \bullet r}+ce^{−22/12 \bullet r}+ce^{−34/12 \bullet r}+(F+c)e^{−46/12 \bullet r}=103.24 \; .$$ Since the discount rate $r$ < coupon rate, I don't see how the price of the bond can be less than 100.

-

This is wrong: effectiveDate / Valuation_date = 10 May 2014

Good that you included the ISIN, which states that the effective date (as contrasted with the issue date) was a few days after 03 May 2013.

-
Then, if I understand my mistake, you're telling me I switched effectiveDate field with the issueDate one: if I wanted to calculate the price of this bond with RQuantLib on 10 May 2014 I would have to set issueDate <- '2014-05-10' and effectiveDate <- '2013-05-03'. Correct? –  Lisa Ann May 10 '13 at 23:36
rather, make issueDate <- effectiveDate <- as.Date('2013-05-03') –  Veeken May 10 '13 at 23:38
effectiveDate means the date the bond begins to accrue interest, the date it functionally goes 'live'; issueDate is the date investors first get the chance to buy-in. For your purposes just set them equal to each other. –  Veeken May 10 '13 at 23:40
But if issueDate <- effectiveDate <- as.Date('2013-05-03') how can I evaluate this bond on 10 May 2014? Doesn't issueDate <- effectiveDate <- as.Date('2013-05-03') make the pricing on 03 May 2013 instead of 10 May 2014? –  Lisa Ann May 10 '13 at 23:41
set settlement days to 365. effectiveDate has a very precise meaning in this context and simply can't be used interchangeably as a valuation date. regards... –  Veeken May 11 '13 at 15:14