00001 #pragma once
00002 #ifndef bond_h
00003 #define bond_h
00004
00005 #include "../common/types.h"
00006 #include "../common/date.h"
00007 #include <valarray>
00008 #include "../PartB/yieldCurve.h"
00009 #include "../PartF/creditCurve.h"
00010
00011
00012 using namespace std;
00013
00014 class cashflow{
00015 private:
00016 valarray<Date> _dates;
00017 valarray<Real> _cashflows;
00018
00019 public:
00020 cashflow(valarray<Date> dates, valarray<Real> cashflows);
00021 ~cashflow(){};
00022
00023 valarray<Date> getDates();
00024 valarray<Real> getCashflows();
00025
00026
00027 };
00028
00029 class bond{
00030
00031 protected:
00032 Date _issue;
00033 Date _maturity;
00034 Date _firstcoupondate;
00035 Real _coupon;
00036 Frequency _freq;
00037 Real _faceamount;
00038 yieldCurve _yc;
00039 protected:
00040 DayCountConvention _daycount;
00041 public:
00052 bond(Date issue, Date maturity, Date firstcoupondate, Real coupon, Frequency freq, Real faceamount,DayCountConvention daycount, yieldCurve yc);
00053
00055 ~bond(void){};
00056
00057 cashflow getCashflow();
00058
00059 virtual Real quotedPrice(Date today);
00060 virtual Real fairvalue(Date today);
00061 virtual Real yieldToMaturity(Date today);
00062 virtual Real duration(Date today);
00063 virtual Real convexity(Date today);
00064
00065 virtual Real quotedPrice(){return quotedPrice(_issue);};
00066 virtual Real fairvalue(){return fairvalue(_issue);};
00067 virtual Real yieldToMaturity(){return yieldToMaturity(_issue);};
00068 virtual Real duration(){return duration(_issue);};
00069 virtual Real convexity(){return convexity(_issue);};
00070
00071 virtual Date getMaturity(){return _maturity;};
00072 virtual Date getIssue(){return _issue;};
00073 virtual Real getMaturityInYears(){return getMaturityInYears(_issue);};
00074 virtual Real getMaturityInYears(Date today){return today.dayCount(_maturity);};
00075 virtual Real getFaceAmount() const {return _faceamount;};
00076 };
00077
00078 class treasurybond : public bond{
00079 private :
00080
00081 public :
00092 treasurybond(Date issue, Date maturity, Date firstcoupondate, Real coupon, Frequency freq, Real faceamount, DayCountConvention daycount, yieldCurve yc);
00093
00095 treasurybond(Date issue, Date maturity, Date firstcoupondate, Real coupon, yieldCurve yc);
00096
00098 treasurybond(Date issue, Date maturity, Real faceamount, DayCountConvention daycount, yieldCurve yc);
00099
00101 ~treasurybond(void){};
00102
00104 treasurybond shiftedbond(Real shift);
00105
00107 Real rho(Date today);
00108 Real rho(){return rho(_issue);};
00109 };
00110
00111 class riskybond : public bond{
00112
00113 private :
00114 creditCurve _cc;
00115
00116 public :
00128 riskybond(Date issue, Date maturity, Date firstcoupondate, Real coupon, Frequency freq, Real faceamount,DayCountConvention daycount, yieldCurve yc, creditCurve cc);
00129
00131 riskybond(Date issue, Date maturity, Real faceamount, DayCountConvention daycount, yieldCurve yc, creditCurve cc);
00132
00133
00135 ~riskybond(void){};
00136
00137 virtual Real quotedPrice(Date today);
00138
00140 virtual riskybond shiftedbond(Real shift);
00141
00143 virtual Real rho(Date today);
00144 virtual Real rho(){return rho(_issue);};
00145 };
00146
00147 #endif
00148