Source Code for "Bootstrapping The Illiquidity" Paper

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

Source Code for "Bootstrapping The Illiquidity" Paper

Haonan Zhou
Hello Everybody,

I am very interested in multi-curve construction in the QuantLib
framework, and I came across the paper "Bootstrapping the Illiquidity"
on the QuantLib website. The paper mentions that the source code used
for the multi-curve fitting study is available open source, but I have
been unable to find it in the QuantLib repo and elsewhere on the
internet. Would it be possible for somebody to help out and point me to
the exact location of the source code?

Alternatively, is there any other open-source QuantLib code that does
multi-curve fitting available?

Thanks,
Haonan

------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

Re: Source Code for "Bootstrapping The Illiquidity" Paper

jeffrey


Le Mercredi 27 août 2014 11h42, Mbongo Nkounga Jeffrey Ted Johnattan <[hidden email]> a écrit :


Hello Zhou,
Below is my Eonia yield curve code (using the same paper) . I was in your situation few months ago, I got help from quantlib especially from luigi. Also you can consider the book C# for Financial markets Daniel and andrea (very nice book in curve).

#include <ql/quantlib.hpp>
#include <iostream>
 
#include <boost/assign/std/vector.hpp>

#include <boost/make_shared.hpp>

#include <iomanip>

using namespace QuantLib;
 
using namespace boost::assign;
 
int main(int, char **) {
 
try {

    std::cout << "EONIA curve test ... " << std::endl;
    
    // set evalulation date
    
    //Date evalDate = Date(4, February, 2014); // for the 1st set of data

    Date evalDate = Date(11, December, 2012);  // for the 2nd set of data
    Date settlDate = TARGET().advance(evalDate, 2 * Days);
    Settings::instance().evaluationDate() = evalDate;

    DayCounter dayCounterOIS = Actual360();

    double tolerance = 1.0e-15;
 
    // set up the interest rate curve
   
    // 1st set of data

    /*Real eoniaquotes[] = {
    0.0013, 0.00156, 0.00163, 0.0016, 0.00163, 0.00147, 0.00139, 0.00131,
    0.00125, 0.0012, 0.00117, 0.00114, 0.00112, 0.0011, 0.00111, 0.0011,
    0.00111, 0.00117, 0.00127, 0.00143, 0.00264, 0.0045, 0.00656, 0.00866,
    0.01065, 0.01247, 0.01411, 0.01558, 0.01687, 0.01799, 0.02051, 0.02238,
    0.02302, 0.02322 , 0.02322, 0.02322
    };*/
 
    //2nd set of data   

    Real eoniaquotes[] ={
        0.00040, 0.00070, 0.00069, 0.00078, 0.00074, 0.00061, 0.00047, 0.00033,
        0.00024, 0.00018, 0.00013, 0.00009, 0.00005, 0.00003, 0.00001, 0.00000,
        0.00002, 0.00008, 0.00021, 0.00036, 0.00127, 0.00274, 0.00456, 0.00647,
        0.00827, 0.00996, 0.01147, 0.01280, 0.01404, 0.01516, 0.01764, 0.01939,
        0.02003, 0.02038, 0.00046, 0.00016, -0.00007, -0.00013, -0.00014,-0.00016};

    boost::shared_ptr<RateHelper> rhon = boost::make_shared<DepositRateHelper>(
    eoniaquotes[0], 1 * Days, 0, TARGET(), Following, false, Actual360());

    boost::shared_ptr<OvernightIndex> eoniaBt = boost::make_shared<Eonia>();
 
    boost::shared_ptr<RateHelper> rhe1w = boost::make_shared<OISRateHelper>(
        2, 1 * Weeks,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[1])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe2w = boost::make_shared<OISRateHelper>(
        2, 2 * Weeks,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[2])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe3w = boost::make_shared<OISRateHelper>(
        2, 3 * Weeks,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[3])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe1m = boost::make_shared<OISRateHelper>(
        2, 1 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[4])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe2m = boost::make_shared<OISRateHelper>(
        2, 2 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[5])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe3m = boost::make_shared<OISRateHelper>(
        2, 3 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[6])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe4m = boost::make_shared<OISRateHelper>(
        2, 4 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[7])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe5m = boost::make_shared<OISRateHelper>(
        2, 5 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[8])),
        eoniaBt);
     boost::shared_ptr<RateHelper> rhe6m = boost::make_shared<OISRateHelper>(
        2, 6 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[9])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe7m = boost::make_shared<OISRateHelper>(
        2, 7 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[10])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe8m = boost::make_shared<OISRateHelper>(
        2, 8 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[11])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe9m = boost::make_shared<OISRateHelper>(
        2, 9 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[12])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe10m = boost::make_shared<OISRateHelper>(
        2, 10 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[13])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe11m = boost::make_shared<OISRateHelper>(
        2, 11 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[14])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe1y = boost::make_shared<OISRateHelper>(
        2, 1 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[15])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe15m = boost::make_shared<OISRateHelper>(
        2, 15 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[16])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe18m = boost::make_shared<OISRateHelper>(
        2, 18 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[17])),
        eoniaBt);

    boost::shared_ptr<RateHelper> rhe21m = boost::make_shared<OISRateHelper>(
        2, 21 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[18])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe2y = boost::make_shared<OISRateHelper>(
        2, 2 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[19])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe3y = boost::make_shared<OISRateHelper>(
        2, 3 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[20])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe4y = boost::make_shared<OISRateHelper>(
        2, 4 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[21])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe5y = boost::make_shared<OISRateHelper>(
        2, 5 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[22])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe6y = boost::make_shared<OISRateHelper>(
        2, 6 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[23])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe7y = boost::make_shared<OISRateHelper>(
        2, 7 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[24])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe8y = boost::make_shared<OISRateHelper>(
        2, 8 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[25])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe9y = boost::make_shared<OISRateHelper>(
        2, 9 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[26])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe10y = boost::make_shared<OISRateHelper>(
        2, 10 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[27])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe11y = boost::make_shared<OISRateHelper>(
        2, 11 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[28])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe12y = boost::make_shared<OISRateHelper>(
        2, 12 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[29])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe15y = boost::make_shared<OISRateHelper>(
        2, 15 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[30])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe20y = boost::make_shared<OISRateHelper>(
        2, 20 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[31])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe25y = boost::make_shared<OISRateHelper>(
        2, 25 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[32])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe30y = boost::make_shared<OISRateHelper>(
        2, 30 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[33])),
        eoniaBt);

    boost::shared_ptr<RateHelper> rhefeb13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(16, January, 2013), Date(13, February, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[34])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rhemar13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(13, February, 2013), Date(13, March, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[35])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rheapr13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(13, March, 2013), Date(10, April, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[36])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rhemay13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(10, April, 2013), Date(8, May, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[37])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rhejun13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(8, May, 2013), Date(12, June, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[38])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rhejul13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(12, June, 2013), Date(10, July, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[39])),
            eoniaBt);

    std::vector<boost::shared_ptr<RateHelper> > eoniaratehelpers;
    eoniaratehelpers += rhon, rhe1w, rhe2w, rhe3w, rhe1m,
        rhefeb13, rhemar13, rheapr13, rhemay13, rhejun13, rhejul13,
        /*rhe2m, rhe3m, rhe4m, rhe5m, rhe6m, rhe7m,*/ // replaced by forwards
        rhe8m, rhe9m, rhe10m, rhe11m, rhe1y, rhe15m,
        rhe18m, rhe21m, rhe2y, rhe3y, rhe4y, rhe5y, rhe6y, rhe7y, rhe8y, rhe9y,
        rhe10y, rhe11y, rhe12y, rhe15y, rhe20y, rhe30y;

    PiecewiseYieldCurve<Discount, LogLinear> curve(0, TARGET(), eoniaratehelpers, Actual365Fixed(), tolerance);

    curve.recalculate();
    std::vector<Rate> spotRates, discountFactors, forwardRates;
    Period forwardTenor(3, Months);                 // 3 month forward

       
    // Construct spot curve, forward curve and discount curve
    for(Size i=0;i<eoniaratehelpers.size();i++) {
        Rate rate;
        Date d = eoniaratehelpers[i]->latestDate();
        // spot rate

        rate = curve.zeroRate(d, Actual365Fixed(), Continuous, Annual, true);
        spotRates.push_back(rate);

        // forward rate
        rate = curve.forwardRate(d, TARGET().advance(d, forwardTenor),dayCounterOIS, Simple, Annual, true);
        forwardRates.push_back(rate);

        // discount rate
        rate = curve.discount(d, true);
        discountFactors.push_back(rate);
       
    }
    /////////////////////// Print out four sets of rates  //////////////////////////////////

    std::cout << std::setw(20) << std::left << "Spot Rate"<< std::setw(20)
              << std::left << "Forward Rate" << std::setw(20)
              << std::left << "Discount"<< std::endl;


 
    for (int i = 0; i < spotRates.size(); i++) {
        std::cout.precision(5);
        std::cout << std::setw(20) << std::left << spotRates[i]*100
                  << std::setw(20) << std::left << forwardRates[i]*100
                  << std::setw(20) << std::left << discountFactors[i]
                  << std::endl;
    }
   
    return 0;

} catch (std::exception& e) {
    std::cerr << e.what() << std::endl;
    return 1;
} catch (...) {
    std::cerr << "unknown error" << std::endl;
    return 1;
}
}

Jeffrey


Le Mardi 26 août 2014 19h54, Haonan Zhou <[hidden email]> a écrit :


Hello Everybody,

I am very interested in multi-curve construction in the QuantLib
framework, and I came across the paper "Bootstrapping the Illiquidity"
on the QuantLib website. The paper mentions that the source code used
for the multi-curve fitting study is available open source, but I have
been unable to find it in the QuantLib repo and elsewhere on the
internet. Would it be possible for somebody to help out and point me to
the exact location of the source code?

Alternatively, is there any other open-source QuantLib code that does
multi-curve fitting available?

Thanks,
Haonan

------------------------------------------------------------------------------
Slashdot TV. 
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users





------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

Tr : Source Code for "Bootstrapping The Illiquidity" Paper

jeffrey




Hello Zhou,
Below is my Eonia yield curve code (using the same paper) . I was in your situation few months ago, I got help from quantlib especially from luigi. Also you can consider the book C# for Financial markets Daniel and andrea (very nice book in curve).

#include <ql/quantlib.hpp>
#include <iostream>
 
#include <boost/assign/std/vector.hpp>

#include <boost/make_shared.hpp>

#include <iomanip>

using namespace QuantLib;
 
using namespace boost::assign;
 
int main(int, char **) {
 
try {

    std::cout << "EONIA curve test ... " << std::endl;
    
    // set evalulation date
    
    //Date evalDate = Date(4, February, 2014); // for the 1st set of data

    Date evalDate = Date(11, December, 2012);  // for the 2nd set of data
    Date settlDate = TARGET().advance(evalDate, 2 * Days);
    Settings::instance().evaluationDate() = evalDate;

    DayCounter dayCounterOIS = Actual360();

    double tolerance = 1.0e-15;
 
    // set up the interest rate curve
   
    // 1st set of data

    /*Real eoniaquotes[] = {
    0.0013, 0.00156, 0.00163, 0.0016, 0.00163, 0.00147, 0.00139, 0.00131,
    0.00125, 0.0012, 0.00117, 0.00114, 0.00112, 0.0011, 0.00111, 0.0011,
    0.00111, 0.00117, 0.00127, 0.00143, 0.00264, 0.0045, 0.00656, 0.00866,
    0.01065, 0.01247, 0.01411, 0.01558, 0.01687, 0.01799, 0.02051, 0.02238,
    0.02302, 0.02322 , 0.02322, 0.02322
    };*/
 
    //2nd set of data   

    Real eoniaquotes[] ={
        0.00040, 0.00070, 0.00069, 0.00078, 0.00074, 0.00061, 0.00047, 0.00033,
        0.00024, 0.00018, 0.00013, 0.00009, 0.00005, 0.00003, 0.00001, 0.00000,
        0.00002, 0.00008, 0.00021, 0.00036, 0.00127, 0.00274, 0.00456, 0.00647,
        0.00827, 0.00996, 0.01147, 0.01280, 0.01404, 0.01516, 0.01764, 0.01939,
        0.02003, 0.02038, 0.00046, 0.00016, -0.00007, -0.00013, -0.00014,-0.00016};

    boost::shared_ptr<RateHelper> rhon = boost::make_shared<DepositRateHelper>(
    eoniaquotes[0], 1 * Days, 0, TARGET(), Following, false, Actual360());

    boost::shared_ptr<OvernightIndex> eoniaBt = boost::make_shared<Eonia>();
 
    boost::shared_ptr<RateHelper> rhe1w = boost::make_shared<OISRateHelper>(
        2, 1 * Weeks,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[1])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe2w = boost::make_shared<OISRateHelper>(
        2, 2 * Weeks,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[2])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe3w = boost::make_shared<OISRateHelper>(
        2, 3 * Weeks,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[3])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe1m = boost::make_shared<OISRateHelper>(
        2, 1 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[4])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe2m = boost::make_shared<OISRateHelper>(
        2, 2 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[5])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe3m = boost::make_shared<OISRateHelper>(
        2, 3 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[6])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe4m = boost::make_shared<OISRateHelper>(
        2, 4 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[7])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe5m = boost::make_shared<OISRateHelper>(
        2, 5 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[8])),
        eoniaBt);
     boost::shared_ptr<RateHelper> rhe6m = boost::make_shared<OISRateHelper>(
        2, 6 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[9])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe7m = boost::make_shared<OISRateHelper>(
        2, 7 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[10])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe8m = boost::make_shared<OISRateHelper>(
        2, 8 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[11])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe9m = boost::make_shared<OISRateHelper>(
        2, 9 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[12])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe10m = boost::make_shared<OISRateHelper>(
        2, 10 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[13])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe11m = boost::make_shared<OISRateHelper>(
        2, 11 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[14])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe1y = boost::make_shared<OISRateHelper>(
        2, 1 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[15])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe15m = boost::make_shared<OISRateHelper>(
        2, 15 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[16])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe18m = boost::make_shared<OISRateHelper>(
        2, 18 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[17])),
        eoniaBt);

    boost::shared_ptr<RateHelper> rhe21m = boost::make_shared<OISRateHelper>(
        2, 21 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[18])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe2y = boost::make_shared<OISRateHelper>(
        2, 2 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[19])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe3y = boost::make_shared<OISRateHelper>(
        2, 3 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[20])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe4y = boost::make_shared<OISRateHelper>(
        2, 4 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[21])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe5y = boost::make_shared<OISRateHelper>(
        2, 5 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[22])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe6y = boost::make_shared<OISRateHelper>(
        2, 6 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[23])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe7y = boost::make_shared<OISRateHelper>(
        2, 7 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[24])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe8y = boost::make_shared<OISRateHelper>(
        2, 8 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[25])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe9y = boost::make_shared<OISRateHelper>(
        2, 9 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[26])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe10y = boost::make_shared<OISRateHelper>(
        2, 10 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[27])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe11y = boost::make_shared<OISRateHelper>(
        2, 11 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[28])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe12y = boost::make_shared<OISRateHelper>(
        2, 12 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[29])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe15y = boost::make_shared<OISRateHelper>(
        2, 15 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[30])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe20y = boost::make_shared<OISRateHelper>(
        2, 20 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[31])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe25y = boost::make_shared<OISRateHelper>(
        2, 25 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[32])),
        eoniaBt);
    boost::shared_ptr<RateHelper> rhe30y = boost::make_shared<OISRateHelper>(
        2, 30 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[33])),
        eoniaBt);

    boost::shared_ptr<RateHelper> rhefeb13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(16, January, 2013), Date(13, February, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[34])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rhemar13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(13, February, 2013), Date(13, March, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[35])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rheapr13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(13, March, 2013), Date(10, April, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[36])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rhemay13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(10, April, 2013), Date(8, May, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[37])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rhejun13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(8, May, 2013), Date(12, June, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[38])),
            eoniaBt);
    boost::shared_ptr<RateHelper> rhejul13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(12, June, 2013), Date(10, July, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[39])),
            eoniaBt);

    std::vector<boost::shared_ptr<RateHelper> > eoniaratehelpers;
    eoniaratehelpers += rhon, rhe1w, rhe2w, rhe3w, rhe1m,
        rhefeb13, rhemar13, rheapr13, rhemay13, rhejun13, rhejul13,
        /*rhe2m, rhe3m, rhe4m, rhe5m, rhe6m, rhe7m,*/ // replaced by forwards
        rhe8m, rhe9m, rhe10m, rhe11m, rhe1y, rhe15m,
        rhe18m, rhe21m, rhe2y, rhe3y, rhe4y, rhe5y, rhe6y, rhe7y, rhe8y, rhe9y,
        rhe10y, rhe11y, rhe12y, rhe15y, rhe20y, rhe30y;

    PiecewiseYieldCurve<Discount, LogLinear> curve(0, TARGET(), eoniaratehelpers, Actual365Fixed(), tolerance);

    curve.recalculate();
    std::vector<Rate> spotRates, discountFactors, forwardRates;
    Period forwardTenor(3, Months);                 // 3 month forward

       
    // Construct spot curve, forward curve and discount curve
    for(Size i=0;i<eoniaratehelpers.size();i++) {
        Rate rate;
        Date d = eoniaratehelpers[i]->latestDate();
        // spot rate

        rate = curve.zeroRate(d, Actual365Fixed(), Continuous, Annual, true);
        spotRates.push_back(rate);

        // forward rate
        rate = curve.forwardRate(d, TARGET().advance(d, forwardTenor),dayCounterOIS, Simple, Annual, true);
        forwardRates.push_back(rate);

        // discount rate
        rate = curve.discount(d, true);
        discountFactors.push_back(rate);
       
    }
    /////////////////////// Print out four sets of rates  //////////////////////////////////

    std::cout << std::setw(20) << std::left << "Spot Rate"<< std::setw(20)
              << std::left << "Forward Rate" << std::setw(20)
              << std::left << "Discount"<< std::endl;


 
    for (int i = 0; i < spotRates.size(); i++) {
        std::cout.precision(5);
        std::cout << std::setw(20) << std::left << spotRates[i]*100
                  << std::setw(20) << std::left << forwardRates[i]*100
                  << std::setw(20) << std::left << discountFactors[i]
                  << std::endl;
    }
   
    return 0;

} catch (std::exception& e) {
    std::cerr << e.what() << std::endl;
    return 1;
} catch (...) {
    std::cerr << "unknown error" << std::endl;
    return 1;
}
}

Jeffrey


Le Mardi 26 août 2014 19h54, Haonan Zhou <[hidden email]> a écrit :


Hello Everybody,

I am very interested in multi-curve construction in the QuantLib
framework, and I came across the paper "Bootstrapping the Illiquidity"
on the QuantLib website. The paper mentions that the source code used
for the multi-curve fitting study is available open source, but I have
been unable to find it in the QuantLib repo and elsewhere on the
internet. Would it be possible for somebody to help out and point me to
the exact location of the source code?

Alternatively, is there any other open-source QuantLib code that does
multi-curve fitting available?

Thanks,
Haonan

------------------------------------------------------------------------------
Slashdot TV. 
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users







------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

Re: Tr : Source Code for "Bootstrapping The Illiquidity" Paper

Haonan Zhou
Hi Jeffery,

The code that you included in your emails still seems to just fit a single EONIA curve to market data. I am interested in fitting multiple curves simultaneously as did the authors of the "Bootstrapping the Illiquidity" paper. Do you know where I can find the implementation of multi-curve fitting?

Thanks,
Haonan

On 08/27/2014 05:48 AM, Mbongo Nkounga Jeffrey Ted Johnattan wrote:

Hello Zhou,
Below is my Eonia yield curve code (using the same paper) . I was in your situation few months ago, I got help from quantlib especially from luigi. Also you can consider the book C# for Financial markets Daniel and andrea (very nice book in curve).


------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

R: Tr : Source Code for "Bootstrapping The Illiquidity" Paper

Ballabio Gerardo-4

You may ask the authors of the paper. At least one of them reads this mailing list.

 

Gerardo

 

 

 

Gerardo Ballabio

Risk Management

 

Banca Profilo S.p.A.

Via Cerva 28 - 20122 Milano

Tel. +39 02 58408.463

www.bancaprofilo.it

 

Descrizione: http://www.bancaprofilo.it/~/media/Images/B/Banca-Profilo/logo/logo.jpg

 

 

Da: Haonan Zhou [mailto:[hidden email]]
Inviato: mercoledì 27 agosto 2014 16.12
A: Mbongo Nkounga Jeffrey Ted Johnattan
Cc: [hidden email]; [hidden email]
Oggetto: Re: [Quantlib-users] Tr : Source Code for "Bootstrapping The Illiquidity" Paper

 

Hi Jeffery,

The code that you included in your emails still seems to just fit a single EONIA curve to market data. I am interested in fitting multiple curves simultaneously as did the authors of the "Bootstrapping the Illiquidity" paper. Do you know where I can find the implementation of multi-curve fitting?

Thanks,
Haonan

On 08/27/2014 05:48 AM, Mbongo Nkounga Jeffrey Ted Johnattan wrote:

 

Hello Zhou,

Below is my Eonia yield curve code (using the same paper) . I was in your situation few months ago, I got help from quantlib especially from luigi. Also you can consider the book C# for Financial markets Daniel and andrea (very nice book in curve).

 




Banca Profilo S.p.A. Via Cerva, 28 - 20122 Milano - Tel. 02 58408.1, Fax 02 5831 6057 Capitale Sociale Euro 136.848.321,00 i.v. Iscrizione al Registro Imprese di Milano, C.F. e P.IVA 09108700155 - [hidden email] Iscritta all’Albo delle Banche e dei Gruppi bancari Aderente al Fondo Interbancario di Tutela dei depositi Aderente al Conciliatore Bancario Finanziario e all’Arbitro Bancario Finanziario Appartenente al Gruppo bancario Banca Profilo e soggetta all’attività di direzione e coordinamento di Arepo BP S.p.A. DISCLAIMER: The information transmitted may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer.

------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

答复: Tr : Source Code for "Bootstrapping The Illiquidity" Paper

cheng li
In reply to this post by Haonan Zhou

Currently, QuantLib can’t fit multi �C curve simultaneously. It has to do it one by one.

 

If you need some clues on this topic you can consult to another open source project called Open Gamma and Marc Heared’s new book: Interest Rate Modelling in the Multi-Curve Framework.

 

Regards,

Cheng

 

发件人: Haonan Zhou [mailto:[hidden email]]
发送时间: 2014827 22:12
收件人: Mbongo Nkounga Jeffrey Ted Johnattan
抄送: [hidden email]; [hidden email]
主题: Re: [Quantlib-users] Tr : Source Code for "Bootstrapping The Illiquidity" Paper

 

Hi Jeffery,

The code that you included in your emails still seems to just fit a single EONIA curve to market data. I am interested in fitting multiple curves simultaneously as did the authors of the "Bootstrapping the Illiquidity" paper. Do you know where I can find the implementation of multi-curve fitting?

Thanks,
Haonan

On 08/27/2014 05:48 AM, Mbongo Nkounga Jeffrey Ted Johnattan wrote:

 

Hello Zhou,

Below is my Eonia yield curve code (using the same paper) . I was in your situation few months ago, I got help from quantlib especially from luigi. Also you can consider the book C# for Financial markets Daniel and andrea (very nice book in curve).

 


------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users
Reply | Threaded
Open this post in threaded view
|

Re: 答复: Tr : Source Code for "Bootstrapping The Illiquidity" Paper

jeffrey

Dear all and Zhou in particular,
Here is what I was trying to do, but I got confused. Using the same paper
building the Euribor3M yield curve
1-Build the EONIA using the single curve approach
2-Build the euribor3M with step 1 as for discounting.

I've tried, but, I'm a bit confused about relating the two curves properly ( step 2).
Below is my code.

#include <ql/quantlib.hpp>
#include <iostream>
 
#ifdef BOOST_MSVC

#endif

#include <boost/assign/std/vector.hpp>

#include <boost/make_shared.hpp>

#include <iomanip>

#define LENGTH(a) (sizeof(a)/sizeof(a[0]));

using namespace QuantLib;
 
using namespace boost::assign;

#if defined(QL_ENABLE_SESSIONS)

//using namespace std;

namespace QuantLib {

    Integer sessionId() { return 0; }

}
#endif

int main(int, char* []) {

    try {
 
        /*********************
         ***  MARKET DATA  ***
         *********************/

     Calendar calendar = TARGET();
         Date settlementDate = Date(11, December, 2012); 
         Date settlDate = TARGET().advance(settlementDate, 2 * Days);
     settlementDate = calendar.adjust(settlementDate);
     Integer fixingDays = 2;

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

         DayCounter dayCounterOIS = Actual360();

    DayCounter termStructureDayCounter =
            ActualActual(ActualActual::ISDA);
        double tolerance = 1.0e-15;
       
        // deposits
        Rate   dONDQuote=0.00040, dTNDQuote=0.00040, dSNDQuote=0.00040, d1wQuote=0.00070,
        d2wQuote=0.00080, d3wQuote=0.00110, d1mQuote=0.00110, d2mQuote=0.00140, d3mQuote=0.00180,
    d4mQuote=0.0020, d5mQuote=0.00270, d6mQuote=0.00320, d7mQuote=0.00350, d8mQuote=0.00390,
    d9mQuote=0.00420, d10mQuote=0.00460, d11mQuote=0.00500, d12mQuote=0.00540;
  
               
        // FRAs Underlying Euribor3M
        Rate Tod3MQuote=0.00181, Tom3MQuote=0.00179, fra1x4Quote=0.00165, fra2x5Quote=0.00141,
         fra3x6Quote=0.00129, fra4x7Quote=0.00126, fra5x8Quote=0.00124, fra6x9Quote=0.00121;
   
    // FRAs Underlying Euribor6M
   
     Rate Tod6MQuote=0.00316, Tom6MQuote=0.00312, fra1x7Quote=0.00293, fra2x8Quote=0.00272,
        fra3x9Quote=0.00260, fra4x10Quote=0.00256, fra5x11Quote=0.00252, fra6x12Quote=0.00248,
        fra7x13Quote=0.00254, fra8x14Quote=0.00261, fra9x15Quote=0.00267, fra10x16Quote=0.00279,
     fra11x17Quote=0.00291, fra12x18Quote=0.00303, fra13x19Quote=0.00318, fra14x20Quote=0.00335,
     fra15x21Quote=0.00352, fra16x22Quote=0.00371, fra17x23Quote=0.00389, fra18x24Quote=0.00409;
   
        // FRAs Underlying Euribor12M
   
    Rate fra12x24Quote=0.00507;
               
        // FRAs Underlying Euribor6M(IMM)
   
    Real IMMF3FRAQuote=99.7110, IMMG3FRAQuote=99.7310, IMMH3FRAQuote=99.7410,IMMJ3FRAQuote=99.7450;
              
        // futures Underlying Euribor3M
       
        Real FUT3MZ2Quote=99.8225, FUT3MF3Quote=99.8475, FUT3MG3Quote=99.8550, FUT3MH3Quote=99.8725,
             FUT3MM3Quote=99.8775, FUT3MU3Quote=99.8725, FUT3MZ3Quote=99.8425, FUT3MH4Quote=99.8025,
             FUT3MM4Quote=99.7425, FUT3MU4Quote=99.6875, FUT3MZ4Quote=99.6175, FUT3MH5Quote=99.5575,
             FUT3MM5Quote=99.4775, FUT3MU5Quote=99.3825, FUT3MZ5Quote=99.2775, FUT3MH6Quote=99.1675,
         FUT3MM6Quote=99.0375, FUT3MU6Quote=98.9100, FUT3MZ6Quote=98.7775, FUT3MH7Quote=98.6575,
             FUT3MM7Quote=98.5325, FUT3MU7Quote=98.4125;
            

        // EUR IRS on Euribor3M
     
        Rate AB3E1YQuote=0.00141, AB3E15MQuote=0.00144, AB3E18MQuote=0.00153, AB3E21MQuote=0.00168,
             AB3E2YQuote=0.00186, AB3E3YQuote=0.00285, AB3E4YQuote=0.00437, AB3E5YQuote=0.00623,
             AB3E6YQuote=0.00817, AB3E7YQuote=0.01, AB3E8YQuote=0.01171, AB3E9YQuote=0.01324,
             AB3E10YQuote=0.01459, AB3E11YQuote=0.01582, AB3E12YQuote=0.01692, AB3E15YQuote=0.01933,
             AB3E20YQuote=0.02099, AB3E25YQuote=0.02156, AB3E30YQuote=0.02186, AB3E40YQuote=0.02288,
             AB3E50YQuote=0.02367, AB3EZ2Quote=0.00138, AB3EH3Quote=0.00134, AB3EM3Quote=0.00151,
             AB3EU3Quote=0.00183, AB3EZ3Quote=0.00183, AB3EH4Quote=0.00208, AB3EZ4Quote=0.00283,
             AB3EBASIS35YQuote=0.02308, AB3EBASIS60YQuote=0.024126;
       

         /**********************************************************************
         *** OIS discount Curve to be used for bootstrapping forward curve   ***
         ***********************************************************************/
           
        Real eoniaquotes[] ={
        0.00040, 0.00070, 0.00069, 0.00078, 0.00074, 0.00061, 0.00047, 0.00033,
        0.00024, 0.00018, 0.00013, 0.00009, 0.00005, 0.00003, 0.00001, 0.00000,
        0.00002, 0.00008, 0.00021, 0.00036, 0.00127, 0.00274, 0.00456, 0.00647,
        0.00827, 0.00996, 0.01147, 0.01280, 0.01404, 0.01516, 0.01764, 0.01939,
        0.02003, 0.02038, 0.00046, 0.00016, -0.00007, -0.00013, -0.00014,-0.00016};

    
    boost::shared_ptr<RateHelper> rhon = boost::make_shared<DepositRateHelper>(
            eoniaquotes[0], 1 * Days, 0, TARGET(), Following, false, Actual360());

        boost::shared_ptr<OvernightIndex> eoniaBt = boost::make_shared<Eonia>();
 
        boost::shared_ptr<RateHelper> rhe1w = boost::make_shared<OISRateHelper>(
              2, 1 * Weeks,
           Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[1])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe2w = boost::make_shared<OISRateHelper>(
        2, 2 * Weeks,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[2])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe3w = boost::make_shared<OISRateHelper>(
        2, 3 * Weeks,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[3])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe1m = boost::make_shared<OISRateHelper>(
        2, 1 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[4])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe2m = boost::make_shared<OISRateHelper>(
        2, 2 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[5])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe3m = boost::make_shared<OISRateHelper>(
        2, 3 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[6])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe4m = boost::make_shared<OISRateHelper>(
        2, 4 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[7])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe5m = boost::make_shared<OISRateHelper>(
        2, 5 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[8])), eoniaBt);
         boost::shared_ptr<RateHelper> rhe6m = boost::make_shared<OISRateHelper>(
        2, 6 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[9])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe7m = boost::make_shared<OISRateHelper>(
        2, 7 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[10])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe8m = boost::make_shared<OISRateHelper>(
        2, 8 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[11])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe9m = boost::make_shared<OISRateHelper>(
        2, 9 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[12])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe10m = boost::make_shared<OISRateHelper>(
        2, 10 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[13])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe11m = boost::make_shared<OISRateHelper>(
        2, 11 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[14])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe1y = boost::make_shared<OISRateHelper>(
        2, 1 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[15])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe15m = boost::make_shared<OISRateHelper>(
        2, 15 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[16])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe18m = boost::make_shared<OISRateHelper>(
        2, 18 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[17])), eoniaBt);

        boost::shared_ptr<RateHelper> rhe21m = boost::make_shared<OISRateHelper>(
        2, 21 * Months,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[18])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe2y = boost::make_shared<OISRateHelper>(
        2, 2 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[19])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe3y = boost::make_shared<OISRateHelper>(
        2, 3 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[20])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe4y = boost::make_shared<OISRateHelper>(
        2, 4 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[21])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe5y = boost::make_shared<OISRateHelper>(
        2, 5 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[22])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe6y = boost::make_shared<OISRateHelper>(
        2, 6 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[23])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe7y = boost::make_shared<OISRateHelper>(
        2, 7 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[24])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe8y = boost::make_shared<OISRateHelper>(
        2, 8 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[25])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe9y = boost::make_shared<OISRateHelper>(
        2, 9 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[26])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe10y = boost::make_shared<OISRateHelper>(
        2, 10 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[27])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe11y = boost::make_shared<OISRateHelper>(
        2, 11 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[28])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe12y = boost::make_shared<OISRateHelper>(
        2, 12 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[29])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe15y = boost::make_shared<OISRateHelper>(
        2, 15 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[30])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe20y = boost::make_shared<OISRateHelper>(
        2, 20 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[31])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe25y = boost::make_shared<OISRateHelper>(
        2, 25 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[32])), eoniaBt);
        boost::shared_ptr<RateHelper> rhe30y = boost::make_shared<OISRateHelper>(
        2, 30 * Years,
        Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[33])),eoniaBt);

        boost::shared_ptr<RateHelper> rhefeb13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(16, January, 2013), Date(13, February, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[34])), eoniaBt);
        boost::shared_ptr<RateHelper> rhemar13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(13, February, 2013), Date(13, March, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[35])), eoniaBt);
        boost::shared_ptr<RateHelper> rheapr13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(13, March, 2013), Date(10, April, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[36])), eoniaBt);
        boost::shared_ptr<RateHelper> rhemay13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(10, April, 2013), Date(8, May, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[37])), eoniaBt);
        boost::shared_ptr<RateHelper> rhejun13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(8, May, 2013), Date(12, June, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[38])), eoniaBt);
        boost::shared_ptr<RateHelper> rhejul13 =
        boost::make_shared<DatedOISRateHelper>(
            Date(12, June, 2013), Date(10, July, 2013),
            Handle<Quote>(boost::make_shared<SimpleQuote>(eoniaquotes[39])), eoniaBt);

        std::vector<boost::shared_ptr<RateHelper> > eoniaratehelpers;
        eoniaratehelpers += rhon, rhe1w, rhe2w, rhe3w, rhe1m, rhefeb13, rhemar13,
             rheapr13, rhe4m, rhemay13, rhe5m, rhejun13, rhe6m, rhejul13, rhe7m, rhe8m,
             rhe9m, rhe10m, rhe11m, rhe1y, rhe15m,rhe18m, rhe21m, rhe2y, rhe3y,rhe4y, rhe5y,
             rhe6y, rhe7y, rhe8y, rhe9y,rhe10y, rhe11y, rhe12y, rhe15y, rhe20y, rhe30y;

        boost::shared_ptr<YieldTermStructure> oisDiscountCurve(
                    new PiecewiseYieldCurve<Discount,LogLinear>(
                                          settlementDate, eoniaratehelpers,
                                          termStructureDayCounter,
                                          tolerance));

        /********************
         ***    QUOTES    ***
         ********************/

        // SimpleQuote stores a value which can be manually changed;
        // other Quote subclasses could read the value from a database
        // or some kind of data feed.

        // deposits
       
        boost::shared_ptr<Quote> dONDRate(new SimpleQuote(dONDQuote));
        boost::shared_ptr<Quote> dTNDRate(new SimpleQuote(dTNDQuote));
        boost::shared_ptr<Quote> dSNDRate(new SimpleQuote(dSNDQuote));
        boost::shared_ptr<Quote> d1wRate(new SimpleQuote(d1wQuote));
        boost::shared_ptr<Quote> d2wRate(new SimpleQuote(d2wQuote));
        boost::shared_ptr<Quote> d3wRate(new SimpleQuote(d3wQuote));
        boost::shared_ptr<Quote> d1mRate(new SimpleQuote(d1mQuote));
        boost::shared_ptr<Quote> d2mRate(new SimpleQuote(d2mQuote));
        boost::shared_ptr<Quote> d3mRate(new SimpleQuote(d3mQuote));
        boost::shared_ptr<Quote> d4mRate(new SimpleQuote(d4mQuote));   
        boost::shared_ptr<Quote> d5mRate(new SimpleQuote(d5mQuote));
        boost::shared_ptr<Quote> d6mRate(new SimpleQuote(d6mQuote));
        boost::shared_ptr<Quote> d7mRate(new SimpleQuote(d7mQuote));
        boost::shared_ptr<Quote> d8mRate(new SimpleQuote(d8mQuote));
        boost::shared_ptr<Quote> d9mRate(new SimpleQuote(d9mQuote));
        boost::shared_ptr<Quote> d10mRate(new SimpleQuote(d10mQuote));
        boost::shared_ptr<Quote> d11mRate(new SimpleQuote(d11mQuote));
        boost::shared_ptr<Quote> d12mRate(new SimpleQuote(d12mQuote));

       
        // FRAs Underlying Euribor3M
       
        boost::shared_ptr<Quote> Tod3MRate(new SimpleQuote(Tod3MQuote));
        boost::shared_ptr<Quote> Tom3MRate(new SimpleQuote(Tom3MQuote));
        boost::shared_ptr<Quote> fra1x4Rate(new SimpleQuote(fra1x4Quote));
        boost::shared_ptr<Quote> fra2x5Rate(new SimpleQuote(fra2x5Quote));
        boost::shared_ptr<Quote> fra3x6Rate(new SimpleQuote(fra3x6Quote));
        boost::shared_ptr<Quote> fra4x7Rate(new SimpleQuote(fra4x7Quote));
        boost::shared_ptr<Quote> fra5x8Rate(new SimpleQuote(fra5x8Quote));
        boost::shared_ptr<Quote> fra6x9Rate(new SimpleQuote(fra6x9Quote));
       
        
        // FRAs Underlying Euribor6M
       
        boost::shared_ptr<Quote> Tod6MRate(new SimpleQuote(Tod6MQuote));
        boost::shared_ptr<Quote> Tom6MRate(new SimpleQuote(Tom6MQuote));
        boost::shared_ptr<Quote> fra1x7Rate(new SimpleQuote(fra1x7Quote));
        boost::shared_ptr<Quote> fra2x8Rate(new SimpleQuote(fra2x8Quote));
        boost::shared_ptr<Quote> fra3x9Rate(new SimpleQuote(fra3x9Quote));
        boost::shared_ptr<Quote> fra4x10Rate(new SimpleQuote(fra4x10Quote));
        boost::shared_ptr<Quote> fra5x11Rate(new SimpleQuote(fra5x11Quote));
        boost::shared_ptr<Quote> fra6x12Rate(new SimpleQuote(fra6x12Quote));
        boost::shared_ptr<Quote> fra7x13Rate(new SimpleQuote(fra7x13Quote));
        boost::shared_ptr<Quote> fra8x14Rate(new SimpleQuote(fra8x14Quote));
        boost::shared_ptr<Quote> fra9x15Rate(new SimpleQuote(fra9x15Quote));
        boost::shared_ptr<Quote> fra10x16Rate(new SimpleQuote(fra10x16Quote));
        boost::shared_ptr<Quote> fra11x17Rate(new SimpleQuote(fra11x17Quote));
        boost::shared_ptr<Quote> fra12x18Rate(new SimpleQuote(fra12x18Quote));
        boost::shared_ptr<Quote> fra13x19Rate(new SimpleQuote(fra13x19Quote));
        boost::shared_ptr<Quote> fra14x20Rate(new SimpleQuote(fra14x20Quote));
        boost::shared_ptr<Quote> fra15x21Rate(new SimpleQuote(fra15x21Quote));
        boost::shared_ptr<Quote> fra16x22Rate(new SimpleQuote(fra16x22Quote));
        boost::shared_ptr<Quote> fra17x23Rate(new SimpleQuote(fra17x23Quote));
        boost::shared_ptr<Quote> fra18x24Rate(new SimpleQuote(fra18x24Quote));
       
       
        // FRAs Underlying Euribor12M
   
    boost::shared_ptr<Quote> fra12x24Rate(new SimpleQuote(fra12x24Quote));    

       
        //  FRAs Underlying Euribor6M(IMM)
       
        boost::shared_ptr<Quote> IMMF3FRAPrice(new SimpleQuote(IMMF3FRAQuote));
        boost::shared_ptr<Quote> IMMG3FRAPrice(new SimpleQuote(IMMG3FRAQuote));
        boost::shared_ptr<Quote> IMMH3FRAPrice(new SimpleQuote(IMMH3FRAQuote));
        boost::shared_ptr<Quote> IMMJ3FRAPrice(new SimpleQuote(IMMJ3FRAQuote));    
  
              
        // futures
        boost::shared_ptr<Quote> FUT3MZ2Price(new SimpleQuote(FUT3MZ2Quote));
        boost::shared_ptr<Quote> FUT3MF3Price(new SimpleQuote(FUT3MF3Quote));
        boost::shared_ptr<Quote> FUT3MG3Price(new SimpleQuote(FUT3MG3Quote));
        boost::shared_ptr<Quote> FUT3MH3Price(new SimpleQuote(FUT3MH3Quote));
        boost::shared_ptr<Quote> FUT3MM3Price(new SimpleQuote(FUT3MM3Quote));
        boost::shared_ptr<Quote> FUT3MU3Price(new SimpleQuote(FUT3MU3Quote));
        boost::shared_ptr<Quote> FUT3MZ3Price(new SimpleQuote(FUT3MZ3Quote));
        boost::shared_ptr<Quote> FUT3MH4Price(new SimpleQuote(FUT3MH4Quote));
        boost::shared_ptr<Quote> FUT3MM4Price(new SimpleQuote(FUT3MM4Quote));
        boost::shared_ptr<Quote> FUT3MU4Price(new SimpleQuote(FUT3MU4Quote));
        boost::shared_ptr<Quote> FUT3MZ4Price(new SimpleQuote(FUT3MZ4Quote));
        boost::shared_ptr<Quote> FUT3MH5Price(new SimpleQuote(FUT3MH5Quote));
        boost::shared_ptr<Quote> FUT3MM5Price(new SimpleQuote(FUT3MM5Quote));
        boost::shared_ptr<Quote> FUT3MU5Price(new SimpleQuote(FUT3MU5Quote));
        boost::shared_ptr<Quote> FUT3MZ5Price(new SimpleQuote(FUT3MZ5Quote));
        boost::shared_ptr<Quote> FUT3MH6Price(new SimpleQuote(FUT3MH6Quote));
        boost::shared_ptr<Quote> FUT3MM6Price(new SimpleQuote(FUT3MM6Quote));
        boost::shared_ptr<Quote> FUT3MU6Price(new SimpleQuote(FUT3MU6Quote));
        boost::shared_ptr<Quote> FUT3MZ6Price(new SimpleQuote(FUT3MZ6Quote));
        boost::shared_ptr<Quote> FUT3MH7Price(new SimpleQuote(FUT3MH7Quote));
        boost::shared_ptr<Quote> FUT3MM7Price(new SimpleQuote(FUT3MM7Quote));
        boost::shared_ptr<Quote> FUT3MU7Price(new SimpleQuote(FUT3MU7Quote));
       
        // EUR IRS on Euribor3M
       
        boost::shared_ptr<Quote> AB3E1YRate(new SimpleQuote(AB3E1YQuote));
        boost::shared_ptr<Quote> AB3E15MRate(new SimpleQuote(AB3E15MQuote));
        boost::shared_ptr<Quote> AB3E18MRate(new SimpleQuote(AB3E18MQuote));
        boost::shared_ptr<Quote> AB3E21MRate(new SimpleQuote(AB3E21MQuote)); 
        boost::shared_ptr<Quote> AB3E2YRate(new SimpleQuote(AB3E2YQuote));
        boost::shared_ptr<Quote> AB3E3YRate(new SimpleQuote(AB3E3YQuote));
        boost::shared_ptr<Quote> AB3E4YRate(new SimpleQuote(AB3E4YQuote));
        boost::shared_ptr<Quote> AB3E5YRate(new SimpleQuote(AB3E5YQuote));
        boost::shared_ptr<Quote> AB3E6YRate(new SimpleQuote(AB3E6YQuote));
        boost::shared_ptr<Quote> AB3E7YRate(new SimpleQuote(AB3E7YQuote));
        boost::shared_ptr<Quote> AB3E8YRate(new SimpleQuote(AB3E8YQuote));
        boost::shared_ptr<Quote> AB3E9YRate(new SimpleQuote(AB3E9YQuote));
        boost::shared_ptr<Quote> AB3E10YRate(new SimpleQuote(AB3E10YQuote));
        boost::shared_ptr<Quote> AB3E11YRate(new SimpleQuote(AB3E11YQuote));
        boost::shared_ptr<Quote> AB3E12YRate(new SimpleQuote(AB3E12YQuote));
        boost::shared_ptr<Quote> AB3E15YRate(new SimpleQuote(AB3E15YQuote));
        boost::shared_ptr<Quote> AB3E20YRate(new SimpleQuote(AB3E20YQuote));
        boost::shared_ptr<Quote> AB3E25YRate(new SimpleQuote(AB3E25YQuote));
        boost::shared_ptr<Quote> AB3E30YRate(new SimpleQuote(AB3E30YQuote));
        boost::shared_ptr<Quote> AB3E40YRate(new SimpleQuote(AB3E40YQuote));
        boost::shared_ptr<Quote> AB3E50YRate(new SimpleQuote(AB3E50YQuote));

        boost::shared_ptr<Quote> AB3EZ2Rate(new SimpleQuote(AB3EZ2Quote));
        boost::shared_ptr<Quote> AB3EH3Rate(new SimpleQuote(AB3EH3Quote));
        boost::shared_ptr<Quote> AB3EM3Rate(new SimpleQuote(AB3EM3Quote));
        boost::shared_ptr<Quote> AB3EU3Rate(new SimpleQuote(AB3EU3Quote));
        boost::shared_ptr<Quote> AB3EZ3Rate(new SimpleQuote(AB3EZ3Quote));
        boost::shared_ptr<Quote> AB3EH4Rate(new SimpleQuote(AB3EH4Quote));
        boost::shared_ptr<Quote> AB3EZ4Rate(new SimpleQuote(AB3EZ4Quote));

    boost::shared_ptr<Quote> AB3EBASIS35YRate(new SimpleQuote(AB3EBASIS35YQuote));
    boost::shared_ptr<Quote> AB3EBASIS60YRate(new SimpleQuote(AB3EBASIS60YQuote));
       
        /*********************
         ***  RATE HELPERS ***
         *********************/


        // RateHelpers are built from the above quotes together with
        // other instrument dependant infos.  Quotes are passed in
        // relinkable handles which could be relinked to some other
        // data source later.

        // deposits
        DayCounter depositDayCounter = Actual360();

        boost::shared_ptr<RateHelper> dOND(new DepositRateHelper(
            Handle<Quote>(dONDRate), 1*Days, fixingDays,
            calendar, Following, false, depositDayCounter));
        boost::shared_ptr<RateHelper> dTND(new DepositRateHelper(
            Handle<Quote>(dTNDRate), 1*Days, fixingDays,
            calendar, Following, false, depositDayCounter));
        boost::shared_ptr<RateHelper> dSND(new DepositRateHelper(
            Handle<Quote>(dSNDRate), 1*Days, fixingDays,
            calendar, Following, false, depositDayCounter));
        boost::shared_ptr<RateHelper> d1w(new DepositRateHelper(
            Handle<Quote>(d1wRate), 1*Weeks, fixingDays,
            calendar, Following, false, depositDayCounter));
        boost::shared_ptr<RateHelper> d2w(new DepositRateHelper(
            Handle<Quote>(d2wRate), 2*Weeks, fixingDays,
            calendar, Following, false, depositDayCounter));
        boost::shared_ptr<RateHelper> d3w(new DepositRateHelper(
            Handle<Quote>(d3wRate), 3*Weeks, fixingDays,
            calendar, Following, false, depositDayCounter));
        boost::shared_ptr<RateHelper> d1m(new DepositRateHelper(
            Handle<Quote>(d1mRate), 1*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d2m(new DepositRateHelper(
            Handle<Quote>(d2mRate), 2*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d3m(new DepositRateHelper(
            Handle<Quote>(d3mRate), 3*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d4m(new DepositRateHelper(
            Handle<Quote>(d4mRate), 4*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d5m(new DepositRateHelper(
            Handle<Quote>(d5mRate), 5*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d6m(new DepositRateHelper(
            Handle<Quote>(d6mRate), 6*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d7m(new DepositRateHelper(
            Handle<Quote>(d7mRate), 7*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d8m(new DepositRateHelper(
            Handle<Quote>(d8mRate), 8*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d9m(new DepositRateHelper(
            Handle<Quote>(d9mRate), 9*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d10m(new DepositRateHelper(
            Handle<Quote>(d10mRate), 10*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d11m(new DepositRateHelper(
            Handle<Quote>(d11mRate), 11*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));
        boost::shared_ptr<RateHelper> d12m(new DepositRateHelper(
            Handle<Quote>(d12mRate), 12*Months, fixingDays,
            calendar, ModifiedFollowing, true, depositDayCounter));

        // FRAs Underlying Euribor3M
       
        boost::shared_ptr<RateHelper> Tod3M(new FraRateHelper(
            Handle<Quote>(Tod3MRate),
            0, 3, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> Tom3M(new FraRateHelper(
            Handle<Quote>(Tom3MRate),
            0, 3, fixingDays, calendar, ModifiedFollowing, // Is it right? 0, 3, fixingDays
            true, depositDayCounter)); 
        boost::shared_ptr<RateHelper> fra1x4(new FraRateHelper(
            Handle<Quote>(fra1x4Rate),
            1, 4, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra2x5(new FraRateHelper(
            Handle<Quote>(fra2x5Rate),
            2, 5, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra3x6(new FraRateHelper(
            Handle<Quote>(fra3x6Rate),
            3, 6, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra4x7(new FraRateHelper(
            Handle<Quote>(fra4x7Rate),
            4, 7, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra5x8(new FraRateHelper(
            Handle<Quote>(fra5x8Rate),
            5, 8, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra6x9(new FraRateHelper(
            Handle<Quote>(fra6x9Rate),
            6, 9, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));


       // FRAs Underlying Euribor6M
       
       /* boost::shared_ptr<RateHelper> Tod6M(new FraRateHelper(
            Handle<Quote>(Tod6MRate),
            0, 6, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> Tom6M(new FraRateHelper(
            Handle<Quote>(Tom6MRate),
            0, 6, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter)); */
        boost::shared_ptr<RateHelper> fra1x7(new FraRateHelper(
            Handle<Quote>(fra1x7Rate),
            1, 7, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra2x8(new FraRateHelper(
            Handle<Quote>(fra2x8Rate),
            2, 8, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra3x9(new FraRateHelper(
            Handle<Quote>(fra3x9Rate),
            3, 9, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra4x10(new FraRateHelper(
            Handle<Quote>(fra4x10Rate),
            4, 10, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra5x11(new FraRateHelper(
            Handle<Quote>(fra5x11Rate),
            5, 11, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
        boost::shared_ptr<RateHelper> fra6x12(new FraRateHelper(
            Handle<Quote>(fra6x12Rate),
            6, 12, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));          
         boost::shared_ptr<RateHelper> fra7x13(new FraRateHelper(
            Handle<Quote>(fra7x13Rate),
            7, 13, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));           
         boost::shared_ptr<RateHelper> fra8x14(new FraRateHelper(
            Handle<Quote>(fra8x14Rate),
            8, 14, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));           
         boost::shared_ptr<RateHelper> fra9x15(new FraRateHelper(
            Handle<Quote>(fra9x15Rate),
            9, 15, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));           
         boost::shared_ptr<RateHelper> fra10x16(new FraRateHelper(
            Handle<Quote>(fra10x16Rate),
            10, 16, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));           
          boost::shared_ptr<RateHelper> fra11x17(new FraRateHelper(
            Handle<Quote>(fra11x17Rate),
            11, 17, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));                 
        boost::shared_ptr<RateHelper> fra12x18(new FraRateHelper(
            Handle<Quote>(fra12x18Rate),
            12, 18, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));           
         boost::shared_ptr<RateHelper> fra13x19(new FraRateHelper(
            Handle<Quote>(fra13x19Rate),
            13, 19, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
         boost::shared_ptr<RateHelper> fra14x20(new FraRateHelper(
            Handle<Quote>(fra14x20Rate),
            14, 20, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
         boost::shared_ptr<RateHelper> fra15x21(new FraRateHelper(
            Handle<Quote>(fra15x21Rate),
            15, 21, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));          
         boost::shared_ptr<RateHelper> fra16x22(new FraRateHelper(
            Handle<Quote>(fra16x22Rate),
            16, 22, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));          
          boost::shared_ptr<RateHelper> fra17x23(new FraRateHelper(
            Handle<Quote>(fra17x23Rate),
            17, 23, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));       
        boost::shared_ptr<RateHelper> fra18x24(new FraRateHelper(
            Handle<Quote>(fra18x24Rate),
            18, 24, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));

       // FRAs Underlying Euribor12M
      
        boost::shared_ptr<RateHelper> fra12x24(new FraRateHelper(
            Handle<Quote>(fra12x24Rate),
            12, 24, fixingDays, calendar, ModifiedFollowing,
            true, depositDayCounter));
              
            
        // setup  FRAs Underlying Euribor6M(IMM)
        Integer FRAMonths = 6;
        Date imm1 = IMM::nextDate(settlementDate);
        boost::shared_ptr<RateHelper> IMMF3(new FuturesRateHelper(
            Handle<Quote>(IMMF3FRAPrice), imm1, FRAMonths, calendar,
            ModifiedFollowing, true, depositDayCounter));
        imm1 = IMM::nextDate(imm1+1);
        boost::shared_ptr<RateHelper> IMMG3(new FuturesRateHelper(
            Handle<Quote>(IMMG3FRAPrice), imm1, FRAMonths, calendar,
             ModifiedFollowing, true, depositDayCounter));
        imm1 = IMM::nextDate(imm1+1);
        boost::shared_ptr<RateHelper> IMMH3(new FuturesRateHelper(
            Handle<Quote>(IMMH3FRAPrice), imm1, FRAMonths, calendar,
            ModifiedFollowing,true, depositDayCounter));
        imm1 = IMM::nextDate(imm1+1);
        boost::shared_ptr<RateHelper> IMMJ3(new FuturesRateHelper(
            Handle<Quote>(IMMJ3FRAPrice), imm1, FRAMonths, calendar,
             ModifiedFollowing, true, depositDayCounter));   
          
        // setup futures
       
        Integer futMonths = 3;
        Date imm = IMM::nextDate(settlementDate);
        boost::shared_ptr<RateHelper> FUT3MZ2(new FuturesRateHelper(
            Handle<Quote>(FUT3MZ2Price), imm, futMonths, calendar,
                     ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MF3(new FuturesRateHelper(
            Handle<Quote>(FUT3MF3Price), imm, futMonths, calendar,
                 ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MG3(new FuturesRateHelper(
            Handle<Quote>(FUT3MG3Price),
            imm,
            futMonths, calendar, ModifiedFollowing,
            true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MH3(new FuturesRateHelper(
            Handle<Quote>(FUT3MH3Price), imm, futMonths, calendar,
            ModifiedFollowing, true, depositDayCounter));           
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MM3(new FuturesRateHelper(
            Handle<Quote>(FUT3MM3Price), imm, futMonths, calendar,
                     ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MU3(new FuturesRateHelper(
            Handle<Quote>(FUT3MU3Price), imm, futMonths, calendar,
                       ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MZ3(new FuturesRateHelper(
            Handle<Quote>(FUT3MZ3Price), imm, futMonths, calendar,
                        ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MH4(new FuturesRateHelper(
            Handle<Quote>(FUT3MH4Price), imm,futMonths, calendar,
                       ModifiedFollowing, true, depositDayCounter));          
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MM4(new FuturesRateHelper(
            Handle<Quote>(FUT3MM4Price), imm,futMonths, calendar,
            ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MU4(new FuturesRateHelper(
            Handle<Quote>(FUT3MU4Price), imm, futMonths, calendar,
            ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MZ4(new FuturesRateHelper(
            Handle<Quote>(FUT3MZ4Price), imm, futMonths, calendar,
                      ModifiedFollowing, true, depositDayCounter));           
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MH5(new FuturesRateHelper(
            Handle<Quote>(FUT3MH5Price), imm, futMonths, calendar,
                      ModifiedFollowing, true, depositDayCounter));   
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MM5(new FuturesRateHelper(
            Handle<Quote>(FUT3MM5Price), imm, futMonths, calendar,
                       ModifiedFollowing, true, depositDayCounter));          
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MU5(new FuturesRateHelper(
            Handle<Quote>(FUT3MU5Price), imm, futMonths, calendar,
                       ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MZ5(new FuturesRateHelper(
            Handle<Quote>(FUT3MZ5Price), imm, futMonths, calendar,
                       ModifiedFollowing, true, depositDayCounter)); 
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MH6(new FuturesRateHelper(
            Handle<Quote>(FUT3MH6Price), imm, futMonths, calendar,
                        ModifiedFollowing, true, depositDayCounter));   
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MM6(new FuturesRateHelper(
            Handle<Quote>(FUT3MM6Price), imm, futMonths, calendar,
                        ModifiedFollowing, true, depositDayCounter));          
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MU6(new FuturesRateHelper(
            Handle<Quote>(FUT3MU6Price), imm, futMonths, calendar,
                       ModifiedFollowing, true, depositDayCounter));
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MZ6(new FuturesRateHelper(
            Handle<Quote>(FUT3MZ6Price), imm, futMonths, calendar,
                        ModifiedFollowing, true, depositDayCounter)); 
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MH7(new FuturesRateHelper(
            Handle<Quote>(FUT3MH7Price), imm, futMonths, calendar,
                    ModifiedFollowing, true, depositDayCounter));   
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MM7(new FuturesRateHelper(
            Handle<Quote>(FUT3MM7Price), imm, futMonths, calendar,
                         ModifiedFollowing, true, depositDayCounter));          
        imm = IMM::nextDate(imm+1);
        boost::shared_ptr<RateHelper> FUT3MU7(new FuturesRateHelper(
            Handle<Quote>(FUT3MU7Price), imm, futMonths, calendar,
                        ModifiedFollowing, true, depositDayCounter));
        
        // setup swaps Euribor3M
       
        Frequency swFixedLegFrequency3 = Annual;
        BusinessDayConvention swFixedLegConvention3 = Unadjusted;
        DayCounter swFixedLegDayCounter3 = Thirty360(Thirty360::European);
        boost::shared_ptr<IborIndex> swFloatingLegIndex3(new Euribor3M);
       
        boost::shared_ptr<RateHelper> AB3E1Y(new SwapRateHelper(
            Handle<Quote>(AB3E1YRate), 1*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));

        boost::shared_ptr<RateHelper> AB3E15M(new SwapRateHelper(
            Handle<Quote>(AB3E15MRate), 15*Months,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));
           
        boost::shared_ptr<RateHelper> AB3E18M(new SwapRateHelper(
            Handle<Quote>(AB3E18MRate), 18*Months,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));
           
        boost::shared_ptr<RateHelper> AB3E21M(new SwapRateHelper(
            Handle<Quote>(AB3E21MRate), 21*Months,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));
                     
        boost::shared_ptr<RateHelper> AB3E2Y(new SwapRateHelper(
            Handle<Quote>(AB3E2YRate), 2*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));
           
        boost::shared_ptr<RateHelper> AB3E3Y(new SwapRateHelper(
            Handle<Quote>(AB3E3YRate), 3*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));           

        boost::shared_ptr<RateHelper> AB3E4Y(new SwapRateHelper(
            Handle<Quote>(AB3E4YRate), 4*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));

        boost::shared_ptr<RateHelper> AB3E5Y(new SwapRateHelper(
            Handle<Quote>(AB3E5YRate), 5*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));
                 
        boost::shared_ptr<RateHelper> AB3E6Y(new SwapRateHelper(
            Handle<Quote>(AB3E6YRate), 6*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));
           
        boost::shared_ptr<RateHelper> AB3E7Y(new SwapRateHelper(
            Handle<Quote>(AB3E7YRate), 7*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));          

        boost::shared_ptr<RateHelper> AB3E8Y(new SwapRateHelper(
            Handle<Quote>(AB3E8YRate), 8*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));

        boost::shared_ptr<RateHelper> AB3E9Y(new SwapRateHelper(
            Handle<Quote>(AB3E9YRate), 9*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));
           
        boost::shared_ptr<RateHelper> AB3E10Y(new SwapRateHelper(
            Handle<Quote>(AB3E10YRate), 10*Years,
            calendar, swFixedLegFrequency3,
            swFixedLegConvention3, swFixedLegDayCounter3,
            swFloatingLegIndex3,
        Handle< Quote >(),
        0 *Days,
        Handle<YieldTermStructure>(oisDiscountCurve)));

Jeffrey


Le Mercredi 27 août 2014 16h55, cheng.li <[hidden email]> a écrit :


Currently, QuantLib can’t fit multi – curve simultaneously. It has to do it one by one.
 
If you need some clues on this topic you can consult to another open source project called Open Gamma and Marc Heared’s new book: Interest Rate Modelling in the Multi-Curve Framework.
 
Regards,
Cheng
 
发件人: Haonan Zhou [mailto:[hidden email]]
发送时间: 2014827 22:12
收件人: Mbongo Nkounga Jeffrey Ted Johnattan
抄送: [hidden email]; [hidden email]
主题: Re: [Quantlib-users] Tr : Source Code for "Bootstrapping The Illiquidity" Paper
 
Hi Jeffery,

The code that you included in your emails still seems to just fit a single EONIA curve to market data. I am interested in fitting multiple curves simultaneously as did the authors of the "Bootstrapping the Illiquidity" paper. Do you know where I can find the implementation of multi-curve fitting?

Thanks,
Haonan

On 08/27/2014 05:48 AM, Mbongo Nkounga Jeffrey Ted Johnattan wrote:
 
Hello Zhou,
Below is my Eonia yield curve code (using the same paper) . I was in your situation few months ago, I got help from quantlib especially from luigi. Also you can consider the book C# for Financial markets Daniel and andrea (very nice book in curve).
 



------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users