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