Building the ZeroRate curve from deposit-futures-irs

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