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

Exotics.cpp

Go to the documentation of this file.
00001 #include "./Exotics.h"
00002 
00003 Exotics::Exotics(exoticsType type,yieldCurve* curve,volsurface* surface,Real spot,Real strike,
00004                 Real Expiry,LongNatural nDates,Real strike2,LongNatural nPaths)
00005                 :       _type(type),
00006                         _yieldCurve(curve),
00007                         _volSurface(surface),
00008                         _spot(spot),
00009                         _strike(strike),
00010                         _strike2(strike2),
00011                         _expiry(Expiry),
00012                         _nPaths(nPaths),
00013                         _nDates(nDates)
00014 {
00015 }
00016 
00017 Exotics::~Exotics(void)
00018 {
00019 }
00020 
00021 Real Exotics::getPrice() {
00022         switch (_type) {
00023                 case AsianCall:
00024                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,3);
00025                 case AsianPut:
00026                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,4);
00027                 case RevLookbackCall:
00028                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,5);
00029                 case RevLookbackPut:
00030                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,6);
00031                 case BarrierCall:
00032                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,7);
00033                 case BarrierPut:
00034                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,8);
00035                 case FlooredCliquet:
00036                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,9);
00037                 case CappedCliquet:
00038                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,10);
00039                 case CollaredCliquet:
00040                         return mainmc(_expiry,_strike,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,9)+mainmc(_expiry,_strike2,_spot,_volSurface,_yieldCurve,_nPaths,_nDates,10);
00041                 default:
00042                         return 0.;
00043         }
00044 }
00045 
00046 Real Exotics::getDelta() {
00047         Real result=0.;
00048         result=getPrice();
00049         _spot*=1.01;
00050         result-=getPrice();
00051         _spot/=1.01;
00052         return result;
00053 }
00054 
00055 Real Exotics::getRho() {
00056         Real result=0.;
00057         result=getPrice();
00058         _yieldCurve->shiftZCBRateCurve();
00059         result-=getPrice();
00060         _yieldCurve->shiftZCBRateCurve(-defaultshiftfactorForShortRate);
00061         return result;
00062 }
00063 
00064 Real Exotics::getTheta() {
00065         Real result=0.;
00066         result=getPrice();
00067         yieldCurve yield=*_yieldCurve;
00068         _yieldCurve->forwardZCBCurve(defaultAdvDays/365);
00069         volsurface volsurf=*_volSurface;
00070         Date advDate=Date();
00071         advDate.setDateToToday();
00072         advDate.plusDays((Integer)defaultAdvDays);
00073         _volSurface=&_volSurface->forwardvolsurface(advDate);
00074         result-=getPrice();
00075         _yieldCurve=&yield;
00076         _volSurface=&volsurf;
00077         return result;
00078 }
00079 
00080 Real Exotics::getVega() {
00081         Real result=0.;
00082         result=getPrice();
00083         _volSurface->shiftedvolsurface(defaultShiftVolSurface);
00084         result-=getPrice();
00085         _volSurface->shiftedvolsurface(-defaultShiftVolSurface);
00086         return result;
00087 }

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