00001 #pragma once 00002 #ifndef PAYOFF_H 00003 #define PAYOFF_H 00004 00005 #include "../../common/types.h" 00006 #include <valarray> 00007 using namespace std; 00008 00009 class PayOff 00010 { 00011 public: 00012 00014 PayOff(Real Strike_); 00015 00018 PayOff(void); 00019 00020 void SetStrike(Real Strike_); 00021 00023 virtual Real operator()(Real Spot) const; 00024 virtual ~PayOff(){} 00025 00027 virtual Real Call (Real Fwd); 00028 00030 virtual Real Put (Real Fwd); 00031 00033 virtual Real AsianCall (valarray<Real> Path,LongNatural nDates); 00034 00036 virtual Real AsianPut (valarray<Real> Path,LongNatural nDates); 00037 00039 virtual Real RevLookbackCall (valarray<Real> Path,LongNatural nDates); 00040 00042 virtual Real RevLookbackPut (valarray<Real> Path,LongNatural nDates); 00043 00045 virtual Real BarrierCall (valarray<Real> Path,LongNatural nDates); 00046 00048 virtual Real BarrierPut (valarray<Real> Path,LongNatural nDates); 00049 00051 virtual Real FlooredCliquet (Real Spot, Real Fwd); 00052 00054 virtual Real CappedCliquet (Real Spot, Real Fwd); 00055 00058 virtual Real Rainbow2SpreadOptionMax(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult); 00059 00061 virtual Real Rainbow2AssetsBasketMax(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult); 00062 00064 virtual Real RainbowBestOf2AssetsCash(Real Fwd1,Real Fwd2,Real W1,Real W2); 00065 00067 virtual Real RainbowWorstOf2AssetsCash(Real Fwd1,Real Fwd2,Real W1,Real W2); 00068 00070 virtual Real RainbowMax2AssetsCall(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult); 00071 00073 virtual Real RainbowMin2AssetsCall(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult); 00074 00076 virtual Real RainbowMax2AssetsPut(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult); 00077 00079 virtual Real RainbowMin2AssetsPut(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult); 00080 00085 virtual Real Convertible(Real Fwd, Real ConversionRatio, Real BondPrice, Real CallPrice = TN_INFINITY, Real PutPrice = 0); 00086 00087 private: 00088 Real Strike; 00089 }; 00090 00091 #endif