Posted by
luca ferraro-2 on
URL: http://quantlib.414.s1.nabble.com/Building-the-ZeroRate-curve-from-deposit-futures-irs-tp5625.html
Hello everybody,
I'm a new user of the QuantLib library and new to finance as well.
After having read the examples and the documentation, I have tried to
test my understanding of the libraryin reproducing a zero-rate curve I
previously built my own, starting from deposits, futures and IRSs data.
I cannot reproduce the zero-rate: rates are not correct from the
beginning, so I will focus on deposits. Neither the dates of the curve
(using the PieacewiseYieldCurve::dates() method) correspond to what I
expected from the instruments I gave, for example there is one more date
(28/11/2007) I don't know where it comes from (see the output I report
below).
I am also confused in how to describe the 1D 2D and 3D deposit in the
DepositRateHelper constructor. Which are the correct settlement and
fixing days? For a 1D deposit I expect settlement to be 0, fixing 1 and
tenor 1*Day, for a 2D deposit I expect settlement to be 1, fixing 2 and
tenor 1*Day. Why are settlement and fixing days both equal to 2 in 1W
deposit?
Can you help me in understanding what I did wrong? Here is what I
have done, based on the swapvaluation example.
Thank you all in advance,
luca lferraro
(luca _dot_ ferraro _at_ caspur _dot_ it)
###############################
todaysDate: 22/11/2007
deposit:
1D 3.96
2D 4.06
3D 4.095
1W 4.15
...
...
futures:
DEC07 95-363
MAR08 95-365
...
...
After having constructed the Handles to deposit rates, here's what I
have done in describing the DepositRateHelpers:
// deposits
DayCounter depositDayCounter = Actual360();
// 1D deposit:
// start today (settlement=0), last 1 day, payment tomorrow
boost::shared_ptr<RateHelper> d1d(new DepositRateHelper(
Handle<Quote>(d1dRate), 1*Days, 1,
calendar, ModifiedFollowing,
true, 0, depositDayCounter));
// 2D deposit:
// start tomorrow(settlement=1), last 1 day, payment after tomorrow
boost::shared_ptr<RateHelper> d2d(new DepositRateHelper(
Handle<Quote>(d2dRate), 1*Days, 2,
calendar, ModifiedFollowing,
true, 1, depositDayCounter));
// 3D deposit:
// start after tomorrow(settlement=2), last 1 day, payment after 3 day
boost::shared_ptr<RateHelper> d3d(new DepositRateHelper(
Handle<Quote>(d3dRate), 1*Days, 3,
calendar, ModifiedFollowing,
true, 2, depositDayCounter));
fixingDays = 2;
// 1W deposit: from the swapvaluation example
// why are settlement and fixing days both equal two ??? <-- question
boost::shared_ptr<RateHelper> d1w(new DepositRateHelper(
Handle<Quote>(d1wRate), 1*Weeks, fixingDays,
calendar, ModifiedFollowing,
true, fixingDays, depositDayCounter));
...
...
// Prepare the vector of depo-futures-swap to build the YieldCurve
std::vector<boost::shared_ptr<RateHelper> > depoFutSwapInstruments;
depoFutSwapInstruments.push_back(d1d);
depoFutSwapInstruments.push_back(d2d);
depoFutSwapInstruments.push_back(d3d);
depoFutSwapInstruments.push_back(d1w);
...
...
Date todaysDate = Date(22, November, 2007);
Settings::instance().evaluationDate() = todaysDate;
Integer fixingDays = 1;
Date settlementDate=calendar.advance(todaysDate,fixingDays,Days);
// creating the YieldCurve
boost::shared_ptr<PieacewiseYieldCurve<Discount,LogLinear> >
depoFutSwapTermStructure(
new PiecewiseYieldCurve<Discount,LogLinear>(
settlementDate, depoFutSwapInstruments,
termStructureDayCounter, tolerance));
std::vector<Date> v = depoFutSwapTermStructure->dates();
for (unsigned i=0; i < v.size();i++) {
std::cout << "Date: " << v[i].weekday() << ", " << v[i]
<< " rate: " << depoFutSwapTermStructure->
zeroRate(v[i],termStructureDayCounter,Continuous)
<< std::endl;
}
###################
OUTPUT OF THE CODE:
Today: Thursday, November 22nd, 2007
Settlement date: Friday, November 23rd, 2007
Date: Friday, November 23rd, 2007 rate: 4.014338 %
Date: Monday, November 26th, 2007 rate: 4.014338 % <-- the same rate?
Date: Tuesday, November 27th, 2007 rate: 4.039792 %
Date: Wednesday, November 28th, 2007 rate: 4.062162 % <-- hum !?!
Date: Monday, December 3rd, 2007 rate: 4.148461 %
##################
What I expected:
Date: Days: Rate:
23/11/2007 1 4.01478
26/11/2007 4 4.09046
27/11/2007 5 4.10270
03/12/2007 11 4.16395
These values comes out from considering that:
starting date: 22/11/2007
November 2007 December 2007
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 1 2
5 6 7 8 9 10 11 3 4 5 6 7 8 9
12 13 14 15 16 17 18 10 11 12 13 14 15 16
19 20 21 22 23 24 25 17 18 19 20 21 22 23
26 27 28 29 30 24 25 26 27 28 29 30
31
1D 22/11/2007 -> 23/11/2007
2D 22/11/2007 -> (24,25) -> 26/11/2007
3D 22/11/2007 -> (24,25) -> -> 27/11/2007
1W 22/11/2007 -> (24,25) -> -> -> -> -> (1,2)
-> 03/12/2007
and that I have built the zero rates considering that:
1D: exp^{Z_{1d}*(1/365)} = {1+R_{1D}*(1/360)}
2D: exp^{Z_{4d}*(4/365)} = {1+R_{2D}*(3/360)}*exp^{Z_{1d}*(1/365)}
...
and so on
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users