00001 #pragma once
00002 #ifndef GAUSSIANROCESS_H
00003 #define GAUSSIANPROCESS_H
00004
00005 #include "../../common/Date.h"
00006 #include "../../common/types.h"
00007 #include "../../PartE/volsurface.h"
00008
00009 #include<valarray>
00010 using namespace std;
00011
00012
00013 class GaussianProcess
00014 {
00015 public:
00024 GaussianProcess(const valarray<LongInteger> schedule,const LongNatural& nDates,const Real& initialRate,const valarray<Real> drift,const Real &meanReversionSpeed,Real &vol);
00025
00026 GaussianProcess(const valarray<LongInteger> schedule,const LongNatural& nDates,const Real& initialRate,const valarray<Real> drift,const Real &meanReversionSpeed,volsurface* vol,Real strike);
00027
00028 GaussianProcess(void);
00029 ~GaussianProcess();
00030
00032 valarray<Real> BuildPath(valarray<Real> gaussianShocks);
00033
00037 Real BuildTerminalPoint(Real gaussianShock);
00038
00040 void GetStepIncrements(valarray<Real> stepIncrements);
00041
00042 private:
00043 valarray<LongInteger> m_vDates;
00044 valarray<Real> m_vDrift;
00045
00046 valarray<Real> m_vStepSize;
00047 Real m_dbMeanReversionSpeed;
00048 Real m_dbVol;
00049 volsurface* _vol;
00050 Real _strike;
00051 Real m_dbInitialRate;
00052 LongNatural m_nDates;
00053 };
00054
00055 #endif