#include <ql/quantlib.hpp>
using namespace std ;
using namespace QuantLib ;
int main(int argc, char** argv)
{
vector<Rate> liborRates ;
liborRates.push_back(0.12075 / 100.0) ; //1W
liborRates.push_back(0.1515 / 100.0) ; //1M
liborRates.push_back(0.1935 / 100.0) ; //2M
liborRates.push_back(0.22535 / 100.0) ; //3M
liborRates.push_back(0.323 / 100.0) ; //6M
liborRates.push_back(0.549 / 100.0) ; //12M
vector<Period> periods ;
periods.push_back(Period(1,Weeks)) ;
periods.push_back(Period(1,Months)) ;
periods.push_back(Period(2,Months)) ;
periods.push_back(Period(3,Months)) ;
periods.push_back(Period(6,Months)) ;
periods.push_back(Period(12,Months)) ;
vector<boost::shared_ptr<RateHelper> > instruments ;
for (vector<int>::size_type i = 0 ; i < liborRates.size() ; i++)
{
boost::shared_ptr<Quote> liborQuote(new SimpleQuote(liborRates[i])) ;
Handle<Quote> liborHandle(liborQuote) ;
boost::shared_ptr<IborIndex> liborIndex(new USDLibor(periods[i])) ;
boost::shared_ptr<RateHelper> rateHelper(new DepositRateHelper(liborHandle,liborIndex)) ;
instruments.push_back(rateHelper) ;
}
Calendar calendar = TARGET ();
Date today (29 , Apr ,2014);
Natural settlementDays = 2;
Date settlement = calendar.advance ( today , settlementDays , Days );
DayCounter dc = Actual360 ();
boost::shared_ptr <YieldTermStructure> yieldCurve ;
yieldCurve = boost::shared_ptr <YieldTermStructure>(new
PiecewiseYieldCurve < ZeroYield , Linear >( settlement , instruments , dc ));
cout << "Period,Input Rate,Curve Rate" << endl ;
for(vector<int>::size_type i = 0 ; i < periods.size() ; i++)
{
Rate curveRate = Rate(yieldCurve->zeroRate(settlement + periods[i], dc, Continuous)) ;
cout << periods[i] << "," << liborRates[i] << "," << curveRate << endl ;
}
return 0 ;
}