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

creditCurve.h

Go to the documentation of this file.
00001 #pragma once
00002 #ifndef creditCurve_h
00003 #define creditCurve_h
00004 
00005 #include "../common/types.h"
00006 #include "../common/date.h"
00007 #include "../PartB/yieldCurve.h"
00008 #include <string.h>
00009 #include <math.h>
00010 #include <valarray>
00011 
00012 using namespace std;
00013 
00014 #define CC_MAX_NUM_SPREADS 30
00015 
00016 // default arguments to use when constructing creditcurves
00017 #define CC_DEFAULT_RECOVERY_RATE        0.40
00018 #define CC_DEFAULT_FREQUENCY            Annual
00019 #define CC_DEFAULT_CURRENCY                     USD
00020 #define CC_DEFAULT_NAME                         "creditCurve"
00021 
00022 enum CreditSpreadType {
00023         // this is an absolute rate, spread must be calculated
00024         Absolute,
00025         // this is the additional rate above the base rate
00026         Relative
00027 };
00028 
00030 class CreditSpreadPoint { 
00031   public:
00033     CreditSpreadPoint(void);
00034 
00040     CreditSpreadPoint(Real r, Real T, CreditSpreadType t);
00041   
00043     ~CreditSpreadPoint(void);
00044 
00045         static char *TypeAsString(CreditSpreadType t);
00046 
00048     Real getRate() { return _rate; }
00049 
00050         Real getMaturity() { return _maturity; }
00051 
00052         CreditSpreadType getSpreadType() { return _spreadtype; }
00053 
00054     void setRate(Real r) { _rate = r; };
00055 
00056     void setMaturity(Real m) { _maturity = m; };
00057 
00058         void setType(CreditSpreadType t) { _spreadtype = t; };
00059 private:
00060     Real  _rate;
00061     Real  _maturity;
00062         CreditSpreadType _spreadtype;
00063 
00064 };
00065 
00066 class creditCurve : public yieldCurve {
00067 public:
00068         friend ostream& operator << (ostream &os, const creditCurve& c);
00069         friend ostream& operator << (ostream &os, const creditCurve* c) {
00070                 return os << *c;
00071         }
00072 
00074         creditCurve(void);
00075 
00084         creditCurve(
00085                 valarray<yieldPoint> &yp, 
00086                 valarray<CreditSpreadPoint> &cp,
00087                 char *name = CC_DEFAULT_NAME,
00088                 Real recoveryRate = CC_DEFAULT_RECOVERY_RATE,
00089                 Currency currency = CC_DEFAULT_CURRENCY,
00090                 Frequency frequency = CC_DEFAULT_FREQUENCY);
00091 
00092         creditCurve(
00093                 yieldCurve &yc, 
00094                 valarray<CreditSpreadPoint> &cp, 
00095                 char *name = CC_DEFAULT_NAME,
00096                 Real recoveryRate = CC_DEFAULT_RECOVERY_RATE,
00097                 Currency currency = CC_DEFAULT_CURRENCY,
00098                 Frequency frequency = CC_DEFAULT_FREQUENCY);
00099 
00100         creditCurve(
00101                 Real flatRate,
00102                 Real flatSpread,
00103                 char *name = CC_DEFAULT_NAME,
00104                 Real recoveryRate = CC_DEFAULT_RECOVERY_RATE,
00105                 Currency currency = CC_DEFAULT_CURRENCY,
00106                 Frequency frequency = CC_DEFAULT_FREQUENCY);
00107 
00108         creditCurve(
00109                 yieldCurve &yc,
00110                 Real flatSpread,
00111                 char *name = CC_DEFAULT_NAME,
00112                 Real recoveryRate = CC_DEFAULT_RECOVERY_RATE,
00113                 Currency currency = CC_DEFAULT_CURRENCY,
00114                 Frequency frequency = CC_DEFAULT_FREQUENCY);
00115 
00116         creditCurve(const creditCurve &rhs);
00117 
00118         creditCurve &
00119         operator=(const creditCurve &rhs);
00120 
00121         virtual ~creditCurve(void);
00122 
00123         yieldCurve *
00124         createSpreadCurve(
00125                 yieldCurve &underlying,
00126                 valarray<CreditSpreadPoint> &spreads);
00127 
00128         yieldCurve *
00129         combineUnderlyingAndSpreads(
00130                 yieldCurve &underlying, 
00131                 yieldCurve &spreadcurve);
00132 
00133         void 
00134         assignFlatSpread(Real r);
00135 
00136         void
00137         resampleSpread();
00138 
00139         virtual Real creditSpread(Real maturity) const {
00140                 return (_combined->spotRate(maturity) - 
00141                             _underlying->spotRate(maturity));
00142         }
00143 
00144         virtual Real creditSpread(Date maturityDate) const {
00145                 return (_combined->spotRate(maturityDate) - 
00146                             _underlying->spotRate(maturityDate));
00147         }
00148         
00149         virtual Real timeOfCurrentSpread(Real maturity) const;
00150         virtual Natural indexOfCurrentSpread(Real maturity) const;
00151         virtual Real timeOfPreviousSpread(Real maturity) const;
00152         virtual Natural indexOfPreviousSpread(Real maturity) const;
00153         virtual Real survivalProbability(Real maturity) const;
00154         virtual Real cumulativeDefaultProbability(Real maturity) const;
00155         virtual Real swapFees(Real maturity) const;
00156 
00163         virtual Real defaultProbability(Real maturity) const;
00164 
00172         virtual Real hazardRate(Real maturity) const {
00173                 return defaultProbability(maturity);
00174         }
00175         
00176         virtual Real spotRate(Real maturity) const {
00177                 return _combined->spotRate(maturity);
00178         }
00179 
00180         virtual Real spotRate(Date maturityDate) const {
00181                 return _combined->spotRate(maturityDate);
00182         }
00183 
00188         virtual Real 
00189         discountFactor(Real maturity, interestComposition composition=Continuous) {
00190                 return _combined->discountFactor(maturity, composition);
00191         }
00192 
00198         virtual Real
00199         riskyDiscountFactor(Real maturity, interestComposition composition=Continuous);
00200         
00205         virtual Real 
00206         discountFactor(Date maturityDate, interestComposition composition=Continuous) {
00207                 return _combined->discountFactor(maturityDate, composition);
00208         }
00209 
00215         virtual Real 
00216         forwardRate(Real forwardStart, Real effectiveLengthOfTheContractAfterStart, 
00217         interestComposition composition=Continuous) {
00218                 return _combined->forwardRate(forwardStart, 
00219                         effectiveLengthOfTheContractAfterStart,
00220                         composition);
00221         }
00222 
00228         virtual Real 
00229         forwardRate(Date forwardStart, Date forwardEnd, 
00230         interestComposition composition=Continuous) {
00231                 return _combined->forwardRate(forwardStart, forwardEnd, composition);
00232         }
00233 
00234         virtual valarray<Real> getMaturitiesInTheZCBCurve() const
00235                 { return _combined->getMaturitiesInTheZCBCurve(); }
00236 
00237         virtual char *getName() { return _combined->getName(); }
00238 
00239         Real getRecoveryRate(void) const {return _recoveryRate;}
00240         Currency getCurrency(void) const {return _currency;}
00241         Frequency getFrequency(void) const {return _frequency;}
00242 
00243 protected:
00244         yieldCurve *_underlying;
00245         yieldCurve *_combined;
00246 
00247         yieldCurve *getUnderlying(void) const {return _underlying;}
00248         yieldCurve *getCombined(void) const     {return _combined;      }
00249         valarray<CreditSpreadPoint>     getSpreads(void) const {return _spreads;}
00250         valarray<cachedval> getSurvivalProbability(void) const {return _survivalProbability;}
00251         valarray<cachedval> getDefaultProbability(void) const {return _defaultProbability;}
00252         valarray<cachedval> getSwapFees(void) const {return _swapFees;}
00253 
00254 
00255 private:
00256         valarray<CreditSpreadPoint> _spreads;
00257 
00258         // allow const functions to update the cache status
00259         mutable valarray<cachedval> _survivalProbability;
00260         mutable valarray<cachedval> _defaultProbability;
00261         mutable valarray<cachedval> _swapFees;
00262         
00263         Real _recoveryRate;
00264         Currency _currency;
00265         Frequency _frequency;
00266 
00267         void
00268         copyObj(const creditCurve &rhs);
00269 };
00270 
00271 #endif

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