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

Posted by jeffrey on
URL: http://quantlib.414.s1.nabble.com/Source-Code-for-Bootstrapping-The-Illiquidity-Paper-tp15782p15819.html


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