Example of convexityAdjustment

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Example of convexityAdjustment

suhasg

Hello ,

 

I am trying to use the convexityAdjustment for ED futures quotes we receive from our vendor while building the curve.

I am still learning my way around Quantlib and wrote code based on swapvaluation.cpp as follows

But getting compilation issues as:

 

see reference to function template instantiation 'boost::shared_ptr<T>::shared_ptr<QuantLib::FuturesRateHelper,QuantLib::Handle<QuantLib::Quote>>(Y *,D)' being compiled

1>          with

1>          [

1>              T=QuantLib::RateHelper,

1>              Y=QuantLib::FuturesRateHelper,

1>              D=QuantLib::Handle<QuantLib::Quote>

1>              ]

 

Here is the code I used, can someone please give me an example of how to correctly use convexityAdjustment?

Thanks a lot.

 

==========================================================================================================

 

#include <boost/format.hpp>

 

#include <ql/quantlib.hpp>

 

using namespace QuantLib;

 

 

/// A structure to hold all the market quotes for a single curve

/// together

struct CurveData {

 

    boost::shared_ptr<SimpleQuote>  d1wRate;

    boost::shared_ptr<SimpleQuote>  d1mRate;

    boost::shared_ptr<SimpleQuote>  d3mRate;

    boost::shared_ptr<SimpleQuote>  d6mRate;

    boost::shared_ptr<SimpleQuote>  d9mRate;

    boost::shared_ptr<SimpleQuote>  d1yRate;

 

    boost::shared_ptr<SimpleQuote>  fra3x6Rate;

    boost::shared_ptr<SimpleQuote>  fra6x9Rate;

    boost::shared_ptr<SimpleQuote>  fra6x12Rate;

 

    boost::shared_ptr<SimpleQuote>  fut1Price;

    boost::shared_ptr<SimpleQuote>  fut2Price;

    boost::shared_ptr<SimpleQuote>  fut3Price;

    boost::shared_ptr<SimpleQuote>  fut4Price;

    boost::shared_ptr<SimpleQuote>  fut5Price;

    boost::shared_ptr<SimpleQuote>  fut6Price;

    boost::shared_ptr<SimpleQuote>  fut7Price;

    boost::shared_ptr<SimpleQuote>  fut8Price;

 

       boost::shared_ptr<SimpleQuote>  fut1Convx;

    boost::shared_ptr<SimpleQuote>  fut2Convx;

    boost::shared_ptr<SimpleQuote>  fut3Convx;

    boost::shared_ptr<SimpleQuote>  fut4Convx;

    boost::shared_ptr<SimpleQuote>  fut5Convx;

    boost::shared_ptr<SimpleQuote>  fut6Convx;

    boost::shared_ptr<SimpleQuote>  fut7Convx;

    boost::shared_ptr<SimpleQuote>  fut8Convx;

 

    boost::shared_ptr<SimpleQuote>  s2yRate;

    boost::shared_ptr<SimpleQuote>  s3yRate;

    boost::shared_ptr<SimpleQuote>  s5yRate;

    boost::shared_ptr<SimpleQuote>  s10yRate;

    boost::shared_ptr<SimpleQuote>  s15yRate;

 

    CurveData():

        d1wRate(new SimpleQuote()),

        d1mRate(new SimpleQuote()),

        d3mRate(new SimpleQuote()),

        d6mRate(new SimpleQuote()),

        d9mRate(new SimpleQuote()),

        d1yRate(new SimpleQuote()),

 

        fra3x6Rate(new SimpleQuote()),

        fra6x9Rate(new SimpleQuote()),

        fra6x12Rate(new SimpleQuote()),

 

        fut1Price(new SimpleQuote()),

        fut2Price(new SimpleQuote()),

        fut3Price(new SimpleQuote()),

        fut4Price(new SimpleQuote()),

        fut5Price(new SimpleQuote()),

        fut6Price(new SimpleQuote()),

        fut7Price(new SimpleQuote()),

        fut8Price(new SimpleQuote()),

 

              fut1Convx(new SimpleQuote()),

        fut2Convx(new SimpleQuote()),

        fut3Convx(new SimpleQuote()),

        fut4Convx(new SimpleQuote()),

        fut5Convx(new SimpleQuote()),

        fut6Convx(new SimpleQuote()),

        fut7Convx(new SimpleQuote()),

        fut8Convx(new SimpleQuote()),

 

        s2yRate(new SimpleQuote()),

        s3yRate(new SimpleQuote()),

        s5yRate(new SimpleQuote()),

        s10yRate(new SimpleQuote()),

        s15yRate(new SimpleQuote())

    {

    }

};

 

// Fill out the curve with sample market data (from more optimistic

// times!)

void sampleMktData(CurveData &cd)

{

    (*cd.d1wRate)=0.0382;

 

    (*cd.d1mRate)=0.0372;

    (*cd.d3mRate)=0.0363;

    (*cd.d6mRate)=0.0353;

    (*cd.d9mRate)=0.0348;

    (*cd.d1yRate)=0.0345;

 

    (*cd.fra3x6Rate)=0.037125;

    (*cd.fra6x9Rate)=0.037125;

    (*cd.fra6x12Rate)=0.037125;

 

    (*cd.fut1Price)=96.2875;

    (*cd.fut2Price)=96.7875;

    (*cd.fut3Price)=96.9875;

    (*cd.fut4Price)=96.6875;

    (*cd.fut5Price)=96.4875;

    (*cd.fut6Price)=96.3875;

    (*cd.fut7Price)=96.2875;

    (*cd.fut8Price)=96.0875;

 

       (*cd.fut1Convx)=0.0;

    (*cd.fut2Convx)=0.0;

    (*cd.fut3Convx)=0.0;

    (*cd.fut4Convx)=0.0001;

    (*cd.fut5Convx)=0.0006;

    (*cd.fut6Convx)=0.0021;

    (*cd.fut7Convx)=0.0065;

    (*cd.fut8Convx)=0.0143;

 

    // swaps

    (*cd.s2yRate)=0.037125;

    (*cd.s3yRate)=0.0398;

    (*cd.s5yRate)=0.0443;

    (*cd.s10yRate)=0.05165;

    (*cd.s15yRate)=0.055175;

}

 

/// Build a yield curve. Note that the resulting curve is linked to

/// the supplied data and will change with it

boost::shared_ptr<YieldTermStructure> buildCurve(const CurveData &cd)

{

        Calendar calendar = TARGET();

        Date settlementDate(1, September, 2010);

        // must be a business day

        settlementDate = calendar.adjust(settlementDate);

 

        Integer fixingDays = 2;

        Date todaysDate = calendar.advance(settlementDate, -fixingDays, Days);

        // nothing to do with Date::todaysDate

        Settings::instance().evaluationDate() = todaysDate;

 

 

        todaysDate = Settings::instance().evaluationDate();

 

        DayCounter depositDayCounter = Actual360();

 

        boost::shared_ptr<RateHelper> d1w(new DepositRateHelper(

            Handle<Quote>(cd.d1wRate),

            1*Weeks, fixingDays,

            calendar, ModifiedFollowing,

            true, depositDayCounter));

        boost::shared_ptr<RateHelper> d1m(new DepositRateHelper(

            Handle<Quote>(cd.d1mRate),

            1*Months, fixingDays,

            calendar, ModifiedFollowing,

            true, depositDayCounter));

        boost::shared_ptr<RateHelper> d3m(new DepositRateHelper(

            Handle<Quote>(cd.d3mRate),

            3*Months, fixingDays,

            calendar, ModifiedFollowing,

            true, depositDayCounter));

        boost::shared_ptr<RateHelper> d6m(new DepositRateHelper(

            Handle<Quote>(cd.d6mRate),

            6*Months, fixingDays,

            calendar, ModifiedFollowing,

            true, depositDayCounter));

        boost::shared_ptr<RateHelper> d9m(new DepositRateHelper(

            Handle<Quote>(cd.d9mRate),

            9*Months, fixingDays,

            calendar, ModifiedFollowing,

            true, depositDayCounter));

        boost::shared_ptr<RateHelper> d1y(new DepositRateHelper(

            Handle<Quote>(cd.d1yRate),

            1*Years, fixingDays,

            calendar, ModifiedFollowing,

            true, depositDayCounter));

 

 

        // setup FRAs

        boost::shared_ptr<RateHelper> fra3x6(new FraRateHelper(

            Handle<Quote>(cd.fra3x6Rate),

            3, 6, fixingDays, calendar, ModifiedFollowing,

            true, depositDayCounter));

        boost::shared_ptr<RateHelper> fra6x9(new FraRateHelper(

            Handle<Quote>(cd.fra6x9Rate),

            6, 9, fixingDays, calendar, ModifiedFollowing,

            true, depositDayCounter));

        boost::shared_ptr<RateHelper> fra6x12(new FraRateHelper(

            Handle<Quote>(cd.fra6x12Rate),

            6, 12, fixingDays, calendar, ModifiedFollowing,

            true, depositDayCounter));

 

 

        // setup futures

        // This is the part I need help with -

        Integer futMonths = 3;

        Date imm = IMM::nextDate(settlementDate);

        boost::shared_ptr<RateHelper> fut1(new FuturesRateHelper(

            Handle<Quote>(cd.fut1Price),

            imm,

            futMonths, calendar, ModifiedFollowing,

            true, depositDayCounter),Handle<Quote>(cd.fut1Convx)); -- this is incorrect

        imm = IMM::nextDate(imm+1);

        boost::shared_ptr<RateHelper> fut2(new FuturesRateHelper(

            Handle<Quote>(cd.fut2Price),

            imm,

            futMonths, calendar, ModifiedFollowing,

            true, depositDayCounter),Handle<Quote>(cd.fut2Convx));

        imm = IMM::nextDate(imm+1);

        boost::shared_ptr<RateHelper> fut3(new FuturesRateHelper(

            Handle<Quote>(cd.fut3Price),

            imm,

            futMonths, calendar, ModifiedFollowing,

            true, depositDayCounter),Handle<Quote>(cd.fut3Convx));

        imm = IMM::nextDate(imm+1);

        boost::shared_ptr<RateHelper> fut4(new FuturesRateHelper(

            Handle<Quote>(cd.fut4Price),

            imm,

            futMonths, calendar, ModifiedFollowing,

            true, depositDayCounter),Handle<Quote>(cd.fut4Convx));

        imm = IMM::nextDate(imm+1);

        boost::shared_ptr<RateHelper> fut5(new FuturesRateHelper(

            Handle<Quote>(cd.fut5Price),

            imm,

            futMonths, calendar, ModifiedFollowing,

            true, depositDayCounter),Handle<Quote>(cd.fut5Convx));

        imm = IMM::nextDate(imm+1);

        boost::shared_ptr<RateHelper> fut6(new FuturesRateHelper(

            Handle<Quote>(cd.fut6Price),

            imm,

            futMonths, calendar, ModifiedFollowing,

            true, depositDayCounter),Handle<Quote>(cd.fut6Convx));

        imm = IMM::nextDate(imm+1);

        boost::shared_ptr<RateHelper> fut7(new FuturesRateHelper(

            Handle<Quote>(cd.fut7Price),

            imm,

            futMonths, calendar, ModifiedFollowing,

            true, depositDayCounter),Handle<Quote>(cd.fut7Convx));

        imm = IMM::nextDate(imm+1);

        boost::shared_ptr<RateHelper> fut8(new FuturesRateHelper(

            Handle<Quote>(cd.fut8Price),

            imm,

            futMonths, calendar, ModifiedFollowing,

            true, depositDayCounter),Handle<Quote>(cd.fut8Convx));

 

 

        // setup swaps

        Frequency swFixedLegFrequency = Annual;

        BusinessDayConvention swFixedLegConvention = Unadjusted;

        DayCounter swFixedLegDayCounter = Thirty360(Thirty360::European);

        boost::shared_ptr<IborIndex> swFloatingLegIndex(new Euribor6M);

 

        boost::shared_ptr<RateHelper> s2y(new SwapRateHelper(

            Handle<Quote>(cd.s2yRate), 2*Years,

            calendar, swFixedLegFrequency,

            swFixedLegConvention, swFixedLegDayCounter,

            swFloatingLegIndex));

        boost::shared_ptr<RateHelper> s3y(new SwapRateHelper(

            Handle<Quote>(cd.s3yRate), 3*Years,

            calendar, swFixedLegFrequency,

            swFixedLegConvention, swFixedLegDayCounter,

            swFloatingLegIndex));

        boost::shared_ptr<RateHelper> s5y(new SwapRateHelper(

            Handle<Quote>(cd.s5yRate), 5*Years,

            calendar, swFixedLegFrequency,

            swFixedLegConvention, swFixedLegDayCounter,

            swFloatingLegIndex));

        boost::shared_ptr<RateHelper> s10y(new SwapRateHelper(

            Handle<Quote>(cd.s10yRate), 10*Years,

            calendar, swFixedLegFrequency,

            swFixedLegConvention, swFixedLegDayCounter,

            swFloatingLegIndex));

        boost::shared_ptr<RateHelper> s15y(new SwapRateHelper(

            Handle<Quote>(cd.s15yRate), 15*Years,

            calendar, swFixedLegFrequency,

            swFixedLegConvention, swFixedLegDayCounter,

            swFloatingLegIndex));

 

 

        /*********************

         **  CURVE BUILDING **

         *********************/

 

        // Any DayCounter would be fine.

        // ActualActual::ISDA ensures that 30 years is 30.0

        DayCounter termStructureDayCounter =

            ActualActual(ActualActual::ISDA);

 

 

        double tolerance = 1.0e-15;

 

        // A depo-swap curve

        std::vector<boost::shared_ptr<RateHelper> > depoSwapInstruments;

        depoSwapInstruments.push_back(d1w);

        depoSwapInstruments.push_back(d1m);

        depoSwapInstruments.push_back(d3m);

        depoSwapInstruments.push_back(d6m);

        depoSwapInstruments.push_back(d9m);

        depoSwapInstruments.push_back(d1y);

        depoSwapInstruments.push_back(s2y);

        depoSwapInstruments.push_back(s3y);

        depoSwapInstruments.push_back(s5y);

        depoSwapInstruments.push_back(s10y);

        depoSwapInstruments.push_back(s15y);

        boost::shared_ptr<YieldTermStructure> depoSwapTermStructure(

            new PiecewiseYieldCurve<Discount,LogLinear>(

                                          settlementDate, depoSwapInstruments,

                                          termStructureDayCounter,

                                          tolerance));

 

 

        // A depo-futures-swap curve

        std::vector<boost::shared_ptr<RateHelper> > depoFutSwapInstruments;

        depoFutSwapInstruments.push_back(d1w);

        depoFutSwapInstruments.push_back(d1m);

        depoFutSwapInstruments.push_back(fut1);

        depoFutSwapInstruments.push_back(fut2);

        depoFutSwapInstruments.push_back(fut3);

        depoFutSwapInstruments.push_back(fut4);

        depoFutSwapInstruments.push_back(fut5);

        depoFutSwapInstruments.push_back(fut6);

        depoFutSwapInstruments.push_back(fut7);

        depoFutSwapInstruments.push_back(fut8);

        depoFutSwapInstruments.push_back(s3y);

        depoFutSwapInstruments.push_back(s5y);

        depoFutSwapInstruments.push_back(s10y);

        depoFutSwapInstruments.push_back(s15y);

        boost::shared_ptr<YieldTermStructure> depoFutSwapTermStructure(

            new PiecewiseYieldCurve<Discount,LogLinear>(

                                       settlementDate, depoFutSwapInstruments,

                                       termStructureDayCounter,

                                       tolerance));

 

 

        // A depo-FRA-swap curve

        std::vector<boost::shared_ptr<RateHelper> > depoFRASwapInstruments;

        depoFRASwapInstruments.push_back(d1w);

        depoFRASwapInstruments.push_back(d1m);

        depoFRASwapInstruments.push_back(d3m);

        depoFRASwapInstruments.push_back(fra3x6);

        depoFRASwapInstruments.push_back(fra6x9);

        depoFRASwapInstruments.push_back(fra6x12);

        depoFRASwapInstruments.push_back(s2y);

        depoFRASwapInstruments.push_back(s3y);

        depoFRASwapInstruments.push_back(s5y);

        depoFRASwapInstruments.push_back(s10y);

        depoFRASwapInstruments.push_back(s15y);

        boost::shared_ptr<YieldTermStructure> depoFRASwapTermStructure(

            new PiecewiseYieldCurve<Discount,LogLinear>(

                                       settlementDate, depoFRASwapInstruments,

                                       termStructureDayCounter,

                                       tolerance));

    return depoFRASwapTermStructure;

}

 

int main(void)

{

    CurveData cd;

 

    // Fill out with some sample market data

    sampleMktData(cd);

 

    // Build a curve linked to this market data

    boost::shared_ptr<YieldTermStructure> ocurve=buildCurve(cd);

 

    // Print month headings

    for (size_t i=0; i<24; ++i)

        std::cout << boost::format("Month %i , ") %i;

    std::cout<<std::endl;

 

    // Print original curve

    for (size_t i=0; i<24; ++i)

        std::cout << boost::format("%g , ") % ocurve->zeroRate( i / 12.0,   Compounded ).rate();

    std::cout<<std::endl;

 

    // Shock the 3month depo

    (*cd.d3mRate)=cd.d3mRate->value()+0.01;

 

    // Print the bumped, rebuilt curve

    for (size_t i=0; i<24; ++i)

        std::cout << boost::format("%g ,") % ocurve->zeroRate( i / 12.0,   Compounded ).rate();

    std::cout<<std::endl;

 

}

............................................................................

For further important information about AllianceBernstein please click here
http://www.alliancebernstein.com/disclaimer/email/disclaimer.html


------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.  Get
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

Re: Example of convexityAdjustment

Luigi Ballabio
Hello,
    you're passing the Handle with the convexity adjustment as the
second argument to the shared_ptr constructor, not as the last
argument to the FuturesRateHelper constructor. Once you move it inside
the constructor call, your code should work.

Luigi

P.S. I'd change the way you setup the quotes, though. If you write, as
in your sample,

(*cd.d1wRate)=0.0382;

you're overwriting the SimpleQuote instance with a new one, which (in
a larger program) might break any link already formed between the
quote and its observers. The idiomatic way to set the quote value
would be

cd.d1wRate->setValue(0.0382);




On Thu, Apr 24, 2014 at 6:33 PM, Ghorpadkar, Suhas
<[hidden email]> wrote:

>
> Hello ,
>
>
>
> I am trying to use the convexityAdjustment for ED futures quotes we receive from our vendor while building the curve.
>
> I am still learning my way around Quantlib and wrote code based on swapvaluation.cpp as follows
>
> But getting compilation issues as:
>
>
>
> see reference to function template instantiation 'boost::shared_ptr<T>::shared_ptr<QuantLib::FuturesRateHelper,QuantLib::Handle<QuantLib::Quote>>(Y *,D)' being compiled
>
> 1>          with
>
> 1>          [
>
> 1>              T=QuantLib::RateHelper,
>
> 1>              Y=QuantLib::FuturesRateHelper,
>
> 1>              D=QuantLib::Handle<QuantLib::Quote>
>
> 1>              ]
>
>
>
> Here is the code I used, can someone please give me an example of how to correctly use convexityAdjustment?
>
> Thanks a lot.
>
>
>
> ==========================================================================================================
>
>
>
> #include <boost/format.hpp>
>
>
>
> #include <ql/quantlib.hpp>
>
>
>
> using namespace QuantLib;
>
>
>
>
>
> /// A structure to hold all the market quotes for a single curve
>
> /// together
>
> struct CurveData {
>
>
>
>     boost::shared_ptr<SimpleQuote>  d1wRate;
>
>     boost::shared_ptr<SimpleQuote>  d1mRate;
>
>     boost::shared_ptr<SimpleQuote>  d3mRate;
>
>     boost::shared_ptr<SimpleQuote>  d6mRate;
>
>     boost::shared_ptr<SimpleQuote>  d9mRate;
>
>     boost::shared_ptr<SimpleQuote>  d1yRate;
>
>
>
>     boost::shared_ptr<SimpleQuote>  fra3x6Rate;
>
>     boost::shared_ptr<SimpleQuote>  fra6x9Rate;
>
>     boost::shared_ptr<SimpleQuote>  fra6x12Rate;
>
>
>
>     boost::shared_ptr<SimpleQuote>  fut1Price;
>
>     boost::shared_ptr<SimpleQuote>  fut2Price;
>
>     boost::shared_ptr<SimpleQuote>  fut3Price;
>
>     boost::shared_ptr<SimpleQuote>  fut4Price;
>
>     boost::shared_ptr<SimpleQuote>  fut5Price;
>
>     boost::shared_ptr<SimpleQuote>  fut6Price;
>
>     boost::shared_ptr<SimpleQuote>  fut7Price;
>
>     boost::shared_ptr<SimpleQuote>  fut8Price;
>
>
>
>        boost::shared_ptr<SimpleQuote>  fut1Convx;
>
>     boost::shared_ptr<SimpleQuote>  fut2Convx;
>
>     boost::shared_ptr<SimpleQuote>  fut3Convx;
>
>     boost::shared_ptr<SimpleQuote>  fut4Convx;
>
>     boost::shared_ptr<SimpleQuote>  fut5Convx;
>
>     boost::shared_ptr<SimpleQuote>  fut6Convx;
>
>     boost::shared_ptr<SimpleQuote>  fut7Convx;
>
>     boost::shared_ptr<SimpleQuote>  fut8Convx;
>
>
>
>     boost::shared_ptr<SimpleQuote>  s2yRate;
>
>     boost::shared_ptr<SimpleQuote>  s3yRate;
>
>     boost::shared_ptr<SimpleQuote>  s5yRate;
>
>     boost::shared_ptr<SimpleQuote>  s10yRate;
>
>     boost::shared_ptr<SimpleQuote>  s15yRate;
>
>
>
>     CurveData():
>
>         d1wRate(new SimpleQuote()),
>
>         d1mRate(new SimpleQuote()),
>
>         d3mRate(new SimpleQuote()),
>
>         d6mRate(new SimpleQuote()),
>
>         d9mRate(new SimpleQuote()),
>
>         d1yRate(new SimpleQuote()),
>
>
>
>         fra3x6Rate(new SimpleQuote()),
>
>         fra6x9Rate(new SimpleQuote()),
>
>         fra6x12Rate(new SimpleQuote()),
>
>
>
>         fut1Price(new SimpleQuote()),
>
>         fut2Price(new SimpleQuote()),
>
>         fut3Price(new SimpleQuote()),
>
>         fut4Price(new SimpleQuote()),
>
>         fut5Price(new SimpleQuote()),
>
>         fut6Price(new SimpleQuote()),
>
>         fut7Price(new SimpleQuote()),
>
>         fut8Price(new SimpleQuote()),
>
>
>
>               fut1Convx(new SimpleQuote()),
>
>         fut2Convx(new SimpleQuote()),
>
>         fut3Convx(new SimpleQuote()),
>
>         fut4Convx(new SimpleQuote()),
>
>         fut5Convx(new SimpleQuote()),
>
>         fut6Convx(new SimpleQuote()),
>
>         fut7Convx(new SimpleQuote()),
>
>         fut8Convx(new SimpleQuote()),
>
>
>
>         s2yRate(new SimpleQuote()),
>
>         s3yRate(new SimpleQuote()),
>
>         s5yRate(new SimpleQuote()),
>
>         s10yRate(new SimpleQuote()),
>
>         s15yRate(new SimpleQuote())
>
>     {
>
>     }
>
> };
>
>
>
> // Fill out the curve with sample market data (from more optimistic
>
> // times!)
>
> void sampleMktData(CurveData &cd)
>
> {
>
>     (*cd.d1wRate)=0.0382;
>
>
>
>     (*cd.d1mRate)=0.0372;
>
>     (*cd.d3mRate)=0.0363;
>
>     (*cd.d6mRate)=0.0353;
>
>     (*cd.d9mRate)=0.0348;
>
>     (*cd.d1yRate)=0.0345;
>
>
>
>     (*cd.fra3x6Rate)=0.037125;
>
>     (*cd.fra6x9Rate)=0.037125;
>
>     (*cd.fra6x12Rate)=0.037125;
>
>
>
>     (*cd.fut1Price)=96.2875;
>
>     (*cd.fut2Price)=96.7875;
>
>     (*cd.fut3Price)=96.9875;
>
>     (*cd.fut4Price)=96.6875;
>
>     (*cd.fut5Price)=96.4875;
>
>     (*cd.fut6Price)=96.3875;
>
>     (*cd.fut7Price)=96.2875;
>
>     (*cd.fut8Price)=96.0875;
>
>
>
>        (*cd.fut1Convx)=0.0;
>
>     (*cd.fut2Convx)=0.0;
>
>     (*cd.fut3Convx)=0.0;
>
>     (*cd.fut4Convx)=0.0001;
>
>     (*cd.fut5Convx)=0.0006;
>
>     (*cd.fut6Convx)=0.0021;
>
>     (*cd.fut7Convx)=0.0065;
>
>     (*cd.fut8Convx)=0.0143;
>
>
>
>     // swaps
>
>     (*cd.s2yRate)=0.037125;
>
>     (*cd.s3yRate)=0.0398;
>
>     (*cd.s5yRate)=0.0443;
>
>     (*cd.s10yRate)=0.05165;
>
>     (*cd.s15yRate)=0.055175;
>
> }
>
>
>
> /// Build a yield curve. Note that the resulting curve is linked to
>
> /// the supplied data and will change with it
>
> boost::shared_ptr<YieldTermStructure> buildCurve(const CurveData &cd)
>
> {
>
>         Calendar calendar = TARGET();
>
>         Date settlementDate(1, September, 2010);
>
>         // must be a business day
>
>         settlementDate = calendar.adjust(settlementDate);
>
>
>
>         Integer fixingDays = 2;
>
>         Date todaysDate = calendar.advance(settlementDate, -fixingDays, Days);
>
>         // nothing to do with Date::todaysDate
>
>         Settings::instance().evaluationDate() = todaysDate;
>
>
>
>
>
>         todaysDate = Settings::instance().evaluationDate();
>
>
>
>         DayCounter depositDayCounter = Actual360();
>
>
>
>         boost::shared_ptr<RateHelper> d1w(new DepositRateHelper(
>
>             Handle<Quote>(cd.d1wRate),
>
>             1*Weeks, fixingDays,
>
>             calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>         boost::shared_ptr<RateHelper> d1m(new DepositRateHelper(
>
>             Handle<Quote>(cd.d1mRate),
>
>             1*Months, fixingDays,
>
>             calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>         boost::shared_ptr<RateHelper> d3m(new DepositRateHelper(
>
>             Handle<Quote>(cd.d3mRate),
>
>             3*Months, fixingDays,
>
>             calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>         boost::shared_ptr<RateHelper> d6m(new DepositRateHelper(
>
>             Handle<Quote>(cd.d6mRate),
>
>             6*Months, fixingDays,
>
>             calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>         boost::shared_ptr<RateHelper> d9m(new DepositRateHelper(
>
>             Handle<Quote>(cd.d9mRate),
>
>             9*Months, fixingDays,
>
>             calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>         boost::shared_ptr<RateHelper> d1y(new DepositRateHelper(
>
>             Handle<Quote>(cd.d1yRate),
>
>             1*Years, fixingDays,
>
>             calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>
>
>
>
>         // setup FRAs
>
>         boost::shared_ptr<RateHelper> fra3x6(new FraRateHelper(
>
>             Handle<Quote>(cd.fra3x6Rate),
>
>             3, 6, fixingDays, calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>         boost::shared_ptr<RateHelper> fra6x9(new FraRateHelper(
>
>             Handle<Quote>(cd.fra6x9Rate),
>
>             6, 9, fixingDays, calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>         boost::shared_ptr<RateHelper> fra6x12(new FraRateHelper(
>
>             Handle<Quote>(cd.fra6x12Rate),
>
>             6, 12, fixingDays, calendar, ModifiedFollowing,
>
>             true, depositDayCounter));
>
>
>
>
>
>         // setup futures
>
>         // This is the part I need help with -
>
>         Integer futMonths = 3;
>
>         Date imm = IMM::nextDate(settlementDate);
>
>         boost::shared_ptr<RateHelper> fut1(new FuturesRateHelper(
>
>             Handle<Quote>(cd.fut1Price),
>
>             imm,
>
>             futMonths, calendar, ModifiedFollowing,
>
>             true, depositDayCounter),Handle<Quote>(cd.fut1Convx)); -- this is incorrect
>
>         imm = IMM::nextDate(imm+1);
>
>         boost::shared_ptr<RateHelper> fut2(new FuturesRateHelper(
>
>             Handle<Quote>(cd.fut2Price),
>
>             imm,
>
>             futMonths, calendar, ModifiedFollowing,
>
>             true, depositDayCounter),Handle<Quote>(cd.fut2Convx));
>
>         imm = IMM::nextDate(imm+1);
>
>         boost::shared_ptr<RateHelper> fut3(new FuturesRateHelper(
>
>             Handle<Quote>(cd.fut3Price),
>
>             imm,
>
>             futMonths, calendar, ModifiedFollowing,
>
>             true, depositDayCounter),Handle<Quote>(cd.fut3Convx));
>
>         imm = IMM::nextDate(imm+1);
>
>         boost::shared_ptr<RateHelper> fut4(new FuturesRateHelper(
>
>             Handle<Quote>(cd.fut4Price),
>
>             imm,
>
>             futMonths, calendar, ModifiedFollowing,
>
>             true, depositDayCounter),Handle<Quote>(cd.fut4Convx));
>
>         imm = IMM::nextDate(imm+1);
>
>         boost::shared_ptr<RateHelper> fut5(new FuturesRateHelper(
>
>             Handle<Quote>(cd.fut5Price),
>
>             imm,
>
>             futMonths, calendar, ModifiedFollowing,
>
>             true, depositDayCounter),Handle<Quote>(cd.fut5Convx));
>
>         imm = IMM::nextDate(imm+1);
>
>         boost::shared_ptr<RateHelper> fut6(new FuturesRateHelper(
>
>             Handle<Quote>(cd.fut6Price),
>
>             imm,
>
>             futMonths, calendar, ModifiedFollowing,
>
>             true, depositDayCounter),Handle<Quote>(cd.fut6Convx));
>
>         imm = IMM::nextDate(imm+1);
>
>         boost::shared_ptr<RateHelper> fut7(new FuturesRateHelper(
>
>             Handle<Quote>(cd.fut7Price),
>
>             imm,
>
>             futMonths, calendar, ModifiedFollowing,
>
>             true, depositDayCounter),Handle<Quote>(cd.fut7Convx));
>
>         imm = IMM::nextDate(imm+1);
>
>         boost::shared_ptr<RateHelper> fut8(new FuturesRateHelper(
>
>             Handle<Quote>(cd.fut8Price),
>
>             imm,
>
>             futMonths, calendar, ModifiedFollowing,
>
>             true, depositDayCounter),Handle<Quote>(cd.fut8Convx));
>
>
>
>
>
>         // setup swaps
>
>         Frequency swFixedLegFrequency = Annual;
>
>         BusinessDayConvention swFixedLegConvention = Unadjusted;
>
>         DayCounter swFixedLegDayCounter = Thirty360(Thirty360::European);
>
>         boost::shared_ptr<IborIndex> swFloatingLegIndex(new Euribor6M);
>
>
>
>         boost::shared_ptr<RateHelper> s2y(new SwapRateHelper(
>
>             Handle<Quote>(cd.s2yRate), 2*Years,
>
>             calendar, swFixedLegFrequency,
>
>             swFixedLegConvention, swFixedLegDayCounter,
>
>             swFloatingLegIndex));
>
>         boost::shared_ptr<RateHelper> s3y(new SwapRateHelper(
>
>             Handle<Quote>(cd.s3yRate), 3*Years,
>
>             calendar, swFixedLegFrequency,
>
>             swFixedLegConvention, swFixedLegDayCounter,
>
>             swFloatingLegIndex));
>
>         boost::shared_ptr<RateHelper> s5y(new SwapRateHelper(
>
>             Handle<Quote>(cd.s5yRate), 5*Years,
>
>             calendar, swFixedLegFrequency,
>
>             swFixedLegConvention, swFixedLegDayCounter,
>
>             swFloatingLegIndex));
>
>         boost::shared_ptr<RateHelper> s10y(new SwapRateHelper(
>
>             Handle<Quote>(cd.s10yRate), 10*Years,
>
>             calendar, swFixedLegFrequency,
>
>             swFixedLegConvention, swFixedLegDayCounter,
>
>             swFloatingLegIndex));
>
>         boost::shared_ptr<RateHelper> s15y(new SwapRateHelper(
>
>             Handle<Quote>(cd.s15yRate), 15*Years,
>
>             calendar, swFixedLegFrequency,
>
>             swFixedLegConvention, swFixedLegDayCounter,
>
>             swFloatingLegIndex));
>
>
>
>
>
>         /*********************
>
>          **  CURVE BUILDING **
>
>          *********************/
>
>
>
>         // Any DayCounter would be fine.
>
>         // ActualActual::ISDA ensures that 30 years is 30.0
>
>         DayCounter termStructureDayCounter =
>
>             ActualActual(ActualActual::ISDA);
>
>
>
>
>
>         double tolerance = 1.0e-15;
>
>
>
>         // A depo-swap curve
>
>         std::vector<boost::shared_ptr<RateHelper> > depoSwapInstruments;
>
>         depoSwapInstruments.push_back(d1w);
>
>         depoSwapInstruments.push_back(d1m);
>
>         depoSwapInstruments.push_back(d3m);
>
>         depoSwapInstruments.push_back(d6m);
>
>         depoSwapInstruments.push_back(d9m);
>
>         depoSwapInstruments.push_back(d1y);
>
>         depoSwapInstruments.push_back(s2y);
>
>         depoSwapInstruments.push_back(s3y);
>
>         depoSwapInstruments.push_back(s5y);
>
>         depoSwapInstruments.push_back(s10y);
>
>         depoSwapInstruments.push_back(s15y);
>
>         boost::shared_ptr<YieldTermStructure> depoSwapTermStructure(
>
>             new PiecewiseYieldCurve<Discount,LogLinear>(
>
>                                           settlementDate, depoSwapInstruments,
>
>                                           termStructureDayCounter,
>
>                                           tolerance));
>
>
>
>
>
>         // A depo-futures-swap curve
>
>         std::vector<boost::shared_ptr<RateHelper> > depoFutSwapInstruments;
>
>         depoFutSwapInstruments.push_back(d1w);
>
>         depoFutSwapInstruments.push_back(d1m);
>
>         depoFutSwapInstruments.push_back(fut1);
>
>         depoFutSwapInstruments.push_back(fut2);
>
>         depoFutSwapInstruments.push_back(fut3);
>
>         depoFutSwapInstruments.push_back(fut4);
>
>         depoFutSwapInstruments.push_back(fut5);
>
>         depoFutSwapInstruments.push_back(fut6);
>
>         depoFutSwapInstruments.push_back(fut7);
>
>         depoFutSwapInstruments.push_back(fut8);
>
>         depoFutSwapInstruments.push_back(s3y);
>
>         depoFutSwapInstruments.push_back(s5y);
>
>         depoFutSwapInstruments.push_back(s10y);
>
>         depoFutSwapInstruments.push_back(s15y);
>
>         boost::shared_ptr<YieldTermStructure> depoFutSwapTermStructure(
>
>             new PiecewiseYieldCurve<Discount,LogLinear>(
>
>                                        settlementDate, depoFutSwapInstruments,
>
>                                        termStructureDayCounter,
>
>                                        tolerance));
>
>
>
>
>
>         // A depo-FRA-swap curve
>
>         std::vector<boost::shared_ptr<RateHelper> > depoFRASwapInstruments;
>
>         depoFRASwapInstruments.push_back(d1w);
>
>         depoFRASwapInstruments.push_back(d1m);
>
>         depoFRASwapInstruments.push_back(d3m);
>
>         depoFRASwapInstruments.push_back(fra3x6);
>
>         depoFRASwapInstruments.push_back(fra6x9);
>
>         depoFRASwapInstruments.push_back(fra6x12);
>
>         depoFRASwapInstruments.push_back(s2y);
>
>         depoFRASwapInstruments.push_back(s3y);
>
>         depoFRASwapInstruments.push_back(s5y);
>
>         depoFRASwapInstruments.push_back(s10y);
>
>         depoFRASwapInstruments.push_back(s15y);
>
>         boost::shared_ptr<YieldTermStructure> depoFRASwapTermStructure(
>
>             new PiecewiseYieldCurve<Discount,LogLinear>(
>
>                                        settlementDate, depoFRASwapInstruments,
>
>                                        termStructureDayCounter,
>
>                                        tolerance));
>
>     return depoFRASwapTermStructure;
>
> }
>
>
>
> int main(void)
>
> {
>
>     CurveData cd;
>
>
>
>     // Fill out with some sample market data
>
>     sampleMktData(cd);
>
>
>
>     // Build a curve linked to this market data
>
>     boost::shared_ptr<YieldTermStructure> ocurve=buildCurve(cd);
>
>
>
>     // Print month headings
>
>     for (size_t i=0; i<24; ++i)
>
>         std::cout << boost::format("Month %i , ") %i;
>
>     std::cout<<std::endl;
>
>
>
>     // Print original curve
>
>     for (size_t i=0; i<24; ++i)
>
>         std::cout << boost::format("%g , ") % ocurve->zeroRate( i / 12.0,   Compounded ).rate();
>
>     std::cout<<std::endl;
>
>
>
>     // Shock the 3month depo
>
>     (*cd.d3mRate)=cd.d3mRate->value()+0.01;
>
>
>
>     // Print the bumped, rebuilt curve
>
>     for (size_t i=0; i<24; ++i)
>
>         std::cout << boost::format("%g ,") % ocurve->zeroRate( i / 12.0,   Compounded ).rate();
>
>     std::cout<<std::endl;
>
>
>
> }
>
> ............................................................................
>
> For further important information about AllianceBernstein please click here
> http://www.alliancebernstein.com/disclaimer/email/disclaimer.html
>
>
> ------------------------------------------------------------------------------
> "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
> Instantly run your Selenium tests across 300+ browser/OS combos.  Get
> unparalleled scalability from the best Selenium testing platform available.
> Simple to use. Nothing to install. Get started now for free."
> http://p.sf.net/sfu/SauceLabs
> _______________________________________________
> QuantLib-users mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-users
>



--
<https://implementingquantlib.blogspot.com>
<https://twitter.com/lballabio>

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.  Get
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users