Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

mainyieldcurves.cpp

Go to the documentation of this file.
00001 #include"..\PartB\yieldCurve.h"
00002 #include "../common/filereader.h"
00003 
00004 #include<iostream>
00005 #include<valarray>
00006 #include<time.h>
00007 using namespace std;
00008 
00013 bool mainyieldcurve(void) {
00014         string datadir = FileReader::getdatadirasstring();
00015         string yieldCurveData = datadir + "yctest.csv";
00016         Real shift=0.001,calculation=0.,matRotation=7;
00017         bool fctnResult=true;
00018 
00019         // the underlying curve
00020         valarray<yieldPoint> *rates = 
00021                 FileReader::buildYieldPointArray(yieldCurveData);
00022 
00023         yieldCurve testcurve=yieldCurve(*rates,"test");
00024 
00025         valarray<Real> maturities = testcurve.getMaturitiesInTheZCBCurve();
00026         valarray<Real> ZCB(maturities.size());
00027 
00028         yieldCurve ycShifted=testcurve.shiftZCBRateCurve(shift);
00029         valarray<Real> ZCBShift(maturities.size());
00030         yieldCurve ycRotated=testcurve.rotateZCBRateCurve(shift,matRotation);
00031         valarray<Real> ZCBRotate(maturities.size());
00032         
00033         cout<<fctnResult<<endl;
00034 
00035         for (Natural i = 0; i < ZCB.size(); i++) {
00036                 ZCB[i] = testcurve.spotRate(maturities[i]);
00037                 ZCBShift[i]=ycShifted.spotRate(maturities[i]);
00038                 fctnResult&=(ZCBShift[i]==ZCB[i]+shift);
00039         }
00040 
00041         for(i=0;i<rates->size();i++)
00042                 cout << "Mkt Rate: " << (*rates)[i].getRate()*100 << " (mat: " << (*rates)[i].getMaturity()
00043                         << " ; type: " << (*rates)[i].getType() << ")"<<endl;
00044 
00045         cout << "ZCB rates:\n" << testcurve << endl;
00046 
00047         string filename = FileReader::getdatadirasstring() + "test_YC_PCA.txt"; 
00048         ofstream myfile(filename.c_str()); 
00049         myfile << "Original curve\n"<<testcurve<<"\n"; 
00050         myfile << "Shifted curve\n"<<ycShifted<<"\n"; 
00051         myfile << "Rotated curve\n"<<ycRotated<<"\n"; 
00052         myfile << "DF\n";
00053         for(Real T=0.25;T<=30;T+=0.25)
00054                 myfile << testcurve.discountFactor(T,Continuous)<<"\n";
00055         myfile << "6m Fwd\n";
00056         for(Real T=0.25;T<=29.5;T+=0.25)
00057                 myfile << testcurve.forwardRate(0.5,T,Continuous)<<"\n";
00058         myfile.close();
00059 
00060 
00061         calculation=testcurve.spotRate (3.72);
00062         cout<<"\n Test Spot rate at 3.72 years "<<calculation<<endl;
00063         fctnResult&=(calculation>=0.0463701)&&(calculation<=0.0463702);
00064 
00065         calculation=testcurve.spotRate (14);
00066         cout<<"\n Test Spot rate at 14 years "<<calculation<<endl;
00067         fctnResult&=(calculation>=0.0494384)&&(calculation<=0.0494385);
00068 
00069         calculation =testcurve.discountFactor (5.6,Continuous);
00070         cout<<"\n Test DF at 5.6 years cont "<<calculation <<endl;
00071         fctnResult&=(calculation>=0.7688138)&&(calculation<=0.7688142);
00072 
00073         calculation =testcurve.discountFactor (5.6,Discrete);
00074         cout<<"\n Test DF at 5.6 years disc "<<calculation <<endl;
00075         fctnResult&=(calculation>=0.7734288)&&(calculation<=0.7734292);
00076         
00077         calculation =testcurve.discountFactor (1.5);
00078         cout<<"\n Test DF at 1.5 years "<<calculation<<endl;
00079         fctnResult&=(calculation>=0.934078)&&(calculation<=0.934079);
00080 
00081         Date d=Date();
00082         d.setDateToToday ();
00083         calculation =testcurve.discountFactor(d.plusMonths(18));
00084         cout<<"\n Test from today to 18 months : "<<calculation<<endl;
00085         fctnResult&=(calculation>=0.930458)&&(calculation<=0.930459);
00086 
00087         calculation=testcurve.discountFactor (Date(18,(Month)6,2007));
00088         cout<<"\n Test DF in Date (18/6/2007)"<<calculation <<endl;
00089         fctnResult&=(calculation>=0.930458)&&(calculation<=0.930459);
00090 
00091         calculation=testcurve.discountFactor (4);
00092         cout<<"\n Test DF at 4 years "<<calculation<<endl;
00093         fctnResult&=(calculation>=0.830441)&&(calculation<=0.830442);
00094 
00095         calculation=testcurve.forwardRate(1.5,2.5,Continuous);
00096         cout<<"\n Test FWD at (1.5,2.5) <=> 4 years maturity cont "<<calculation<<endl;
00097         fctnResult&=(calculation>=0.0470409)&&(calculation<=0.0470410);
00098 
00099         calculation=testcurve.forwardRate(1.5,2.5,Discrete);
00100         cout<<"\n Test FWD at (1.5,2.5) <=> 4 years maturity disc "<<calculation<<endl;
00101         fctnResult&=(calculation>=0.0470413)&&(calculation<=0.0470414);
00102 
00103         return fctnResult;
00104 }

Note: Generated nightly - reload for latest version
Generated on Thu Dec 22 23:12:36 2005 for terreneuve by doxygen 1.3.6