Posted by
Kulkarni, Amit3 on
URL: http://quantlib.414.s1.nabble.com/Floating-rate-Bond-Bootstrapping-error-tp6034.html
Hi
I am trying to test the Floating rate Bond, however ended up with the following error;
" could not bootstrap the 1st instrument, maturity date April 28,2008.
error message: negative time <-0.00273224> given "
Is the error related to bond Settlement date/dated date??
Also , I would like to know what is "Gearing" & "DatedDate" in Floating Rate Bond constructor
given is the test code I tried;
..............................................................................................
Integer settlementDays = 3;
Integer length = 5;
Calendar calendar = TARGET();
Date today = calendar.adjust(Date::todaysDate());
Settings::instance().evaluationDate() = today;
Date settlementDate = calendar.advance(today, settlementDays, Days);
Date exerciseDate = calendar.advance(settlementDate, length, Years);
Date issueDate = calendar.advance(exerciseDate, -length, Years);
Real faceAmount_=100;
BusinessDayConvention businessDayConvention_=Following;
DayCounter dayCount_ = Actual365Fixed();
Date stub_;
bool fromEnd_=true;
std::vector<Rate> coupons_(1);
coupons_[0]=0.07875;
Date maturityDate_ = exerciseDate ;
Date datedDate_ = settlementDate;
Frequency frequency_ = Semiannual;
Real redemption_ = 100.0;
bool longFinal_= false;
BusinessDayConvention accrualConvention_ = Following;
//FLOATING RATE BOND:
std::vector< Real > Gearings(1, 1.0);
std::vector< Spread > Spreads(1, 0.0);
Integer fixingDays = 2;
// deposits
Rate d1wQuote=0.0382;
Rate d1mQuote=0.0372;
Rate d3mQuote=0.0363;
Rate d6mQuote=0.0353;
Rate d9mQuote=0.0348;
Rate d1yQuote=0.0345;
// swaps
Rate s2yQuote=0.037125;
Rate s3yQuote=0.0398;
Rate s5yQuote=0.0443;
Rate s10yQuote=0.05165;
Rate s15yQuote=0.055175;
// Market data setup in QUOTES
// deposits
boost::shared_ptr<Quote> d1wRate(new SimpleQuote(d1wQuote));
boost::shared_ptr<Quote> d1mRate(new SimpleQuote(d1mQuote));
boost::shared_ptr<Quote> d3mRate(new SimpleQuote(d3mQuote));
boost::shared_ptr<Quote> d6mRate(new SimpleQuote(d6mQuote));
boost::shared_ptr<Quote> d9mRate(new SimpleQuote(d9mQuote));
boost::shared_ptr<Quote> d1yRate(new SimpleQuote(d1yQuote));
// swaps
boost::shared_ptr<Quote> s2yRate(new SimpleQuote(s2yQuote));
boost::shared_ptr<Quote> s3yRate(new SimpleQuote(s3yQuote));
boost::shared_ptr<Quote> s5yRate(new SimpleQuote(s5yQuote));
boost::shared_ptr<Quote> s10yRate(new SimpleQuote(s10yQuote));
boost::shared_ptr<Quote> s15yRate(new SimpleQuote(s15yQuote));
DayCounter depositDayCounter = Actual360();
//RATE HELPER CLASS
//set DEPOSITS
boost::shared_ptr<RateHelper> d1w(new DepositRateHelper(
Handle<Quote>(d1wRate),
1*Weeks, fixingDays,
calendar, ModifiedFollowing,
true, fixingDays, depositDayCounter));
boost::shared_ptr<RateHelper> d1m(new DepositRateHelper(
Handle<Quote>(d1mRate),
1*Months, fixingDays,
calendar, ModifiedFollowing,
true, fixingDays, depositDayCounter));
boost::shared_ptr<RateHelper> d3m(new DepositRateHelper(
Handle<Quote>(d3mRate),
3*Months, fixingDays,
calendar, ModifiedFollowing,
true, fixingDays, depositDayCounter));
boost::shared_ptr<RateHelper> d6m(new DepositRateHelper(
Handle<Quote>(d6mRate),
6*Months, fixingDays,
calendar, ModifiedFollowing,
true, fixingDays, depositDayCounter));
boost::shared_ptr<RateHelper> d9m(new DepositRateHelper(
Handle<Quote>(d9mRate),
9*Months, fixingDays,
calendar, ModifiedFollowing,
true, fixingDays, depositDayCounter));
boost::shared_ptr<RateHelper> d1y(new DepositRateHelper(
Handle<Quote>(d1yRate),
1*Years, fixingDays,
calendar, ModifiedFollowing,
true, fixingDays, depositDayCounter));
// setup SWAPS
Frequency swFixedLegFrequency = Annual;
BusinessDayConvention swFixedLegConvention = Unadjusted;
DayCounter swFixedLegDayCounter = Thirty360(Thirty360::European);
boost::shared_ptr<IborIndex> swFloatingLegIndex(new Euribor6M);
boost::shared_ptr<RateHelper> s2y(new SwapRateHelper(
Handle<Quote>(s2yRate),
2*Years, fixingDays,
calendar, swFixedLegFrequency,
swFixedLegConvention, swFixedLegDayCounter,
swFloatingLegIndex));
boost::shared_ptr<RateHelper> s3y(new SwapRateHelper(
Handle<Quote>(s3yRate),
3*Years, fixingDays,
calendar, swFixedLegFrequency,
swFixedLegConvention, swFixedLegDayCounter,
swFloatingLegIndex));
boost::shared_ptr<RateHelper> s5y(new SwapRateHelper(
Handle<Quote>(s5yRate),
5*Years, fixingDays,
calendar, swFixedLegFrequency,
swFixedLegConvention, swFixedLegDayCounter,
swFloatingLegIndex));
boost::shared_ptr<RateHelper> s10y(new SwapRateHelper(
Handle<Quote>(s10yRate),
10*Years, fixingDays,
calendar, swFixedLegFrequency,
swFixedLegConvention, swFixedLegDayCounter,
swFloatingLegIndex));
boost::shared_ptr<RateHelper> s15y(new SwapRateHelper(
Handle<Quote>(s15yRate),
15*Years, fixingDays,
calendar, swFixedLegFrequency,
swFixedLegConvention, swFixedLegDayCounter,
swFloatingLegIndex));
DayCounter termStructureDayCounter =
ActualActual(ActualActual::ISDA);
double tolerance = 1.0e-15;
//Instrument vector creation
// A depo-swap curve
std::vector<boost::shared_ptr<RateHelper> > depoSwapInstruments;
depoSwapInstruments.push_back(d1w);
depoSwapInstruments.push_back(d1m);
depoSwapInstruments.push_back(d3m);
depoSwapInstruments.push_back(d6m);
depoSwapInstruments.push_back(d9m);
depoSwapInstruments.push_back(d1y);
depoSwapInstruments.push_back(s2y);
depoSwapInstruments.push_back(s3y);
depoSwapInstruments.push_back(s5y);
depoSwapInstruments.push_back(s10y);
depoSwapInstruments.push_back(s15y);
boost::shared_ptr<YieldTermStructure> depoSwapTermStructure(
new PiecewiseYieldCurve<Discount,LogLinear>(
settlementDate, depoSwapInstruments,termStructureDayCounter, tolerance));
Handle<YieldTermStructure> forecastingTermStructure;
forecastingTermStructure.linkTo(depoSwapTermStructure);
boost::shared_ptr<IborIndex> euriborIndex(
new Euribor6M(forecastingTermStructure));
/* FloatingRateBond CONSTRUCTOR:
FloatingRateBond FLOATINGbond(faceAmount_,issueDate,datedDate_,maturityDate_,settlementDays,euriborIndex,fixingDays,Gearings,Spreads,frequency_,calendar,dayCount_,accrualConvention_,businessDayConvention_,redemption_,forecastingTermStructure,stub_,fromEnd_);
Real dirtypriceBondF = FLOATINGbond.dirtyPrice();
std::cout<<"DIRTY PRICE"<<" "<<dirtypriceBondF<<std::endl;
Compounding comp_=Compounded;
Real YIELDF = FLOATINGbond.yield(comp_);
std::cout<<"YIELD"<<" "<<YIELDF<<std::endl;
.........................................................................................................................
Thanks
Amit
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users