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