Re: Yield, Macaulay duration and Convexity calculation for Notes/Bonds

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: Yield, Macaulay duration and Convexity calculation for Notes/Bonds

Senevi J Kankanamge Don

Hi,

 

I am sorry I need to specify the coupon rate (0.25%) for my example.

 

Please add the following to the code snippet.

double ql_coupon = 0.0025;

 

Thanks

-Senevi

 

From: Senevi J Kankanamge Don
Sent: Monday, November 04, 2013 3:25 PM
To: '[hidden email]'
Subject: Yield, Macaulay duration and Convexity calculation for Notes/Bonds

 

Hi,

 

I am attempting to use QuantLib library in order to calculate yield, Macaulay duration and convexity for US Treasury Notes and Bonds.

 

This is how the values compare in Bloomberg and QuantLib for one example where the price is 99.8984375.

 

Bloomberg                          QuantLib

Yield                                      0.302775                              0.3027679582

Macaulay Duration          1.928                                     1.9129221698

Convexity                            0.047                                     0.0460608896

 

Can you please let me know what I need to change in my code in order to get the results matching with Bloomberg?

 

This is a snippet of my code.

 

 

        double ql_price = 99.8984375;

 

        Date settlementDate = Date(25, Oct, 2013);

        Date firstCouponDate = Date(31, Mar, 2014);

        Date datedDate = Date(30, Sep, 2013);

        Date maturityDate = Date(30, Sep, 2015);

 

        //

        // Parameters required to define the bond

        //

        Natural settlementDays = 0;

        Real faceAmount = 100;

        DayCounter bondDayCount = ActualActual(ActualActual::Bond);

        BusinessDayConvention paymentConvention = ModifiedFollowing;

        Real redemption = 100.0;

        Compounding compoundingMethod = SimpleThenCompounded;

        DateGeneration::Rule dateGeneration = DateGeneration::Forward;

        Frequency frequency = Semiannual;

        Real accuracy = 1.0e-11;

        Size maxEvaluations = 100;

 

 

        //

        // Create the Schedule

        //

        Schedule fixedBondSchedule(

                                    datedDate,                                  // Dated Date

                                    maturityDate,                               // Maturity Date

                                    Period(Semiannual),                         // Period

                                    UnitedStates(UnitedStates::GovernmentBond), // Calendar

                                    Unadjusted,                                 // BusinessDayConvention - convention

                                    Unadjusted,                                 // BusinessDayConvention - terminationDateConvention

                                    dateGeneration,                             // DateGeneration::Rule rule

                                    false,                                      // endOfMonth

                                    firstCouponDate);                           // First Date

 

 

        //

        // Create the Fixed Rate Bond

        //

        FixedRateBond bond(

                            settlementDays,                        // Settlement Days

                            faceAmount,                            // Face Amount

                            fixedBondSchedule,                     // Schedule

                            std::vector<Rate>(1, ql_coupon),       // Coupons

                            bondDayCount,                          // DayCounter

                            paymentConvention,                     // BusinessDayConvention

                            redemption);                           // Redemption

 

 

        Real ql_yield       = BondFunctions::yield( bond, ql_price, bondDayCount, compoundingMethod, frequency, settlementDate, accuracy, maxEvaluations);

 

        InterestRate interestRate(ql_yield, bondDayCount, compoundingMethod, frequency );

        Real ql_convexity = BondFunctions::convexity( bond, interestRate, settlementDate );

 

        Compounding compoundingMethod4Duration = Compounded;

        Time ql_duration = BondFunctions::duration( bond, ql_yield, bondDayCount, compoundingMethod4Duration, frequency, Duration::Macaulay, settlementDate );

 

 

Thanks

-Senevi


------------------------------------------------------------------------------
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951&iu=/4140/ostg.clktrk
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users