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

PayOff.cpp

Go to the documentation of this file.
00001 #include "./payoff.h"
00002 #include "../../common/Normals.h"
00003 #include<minmax.h>
00004 
00005 PayOff::PayOff(Real Strike_) : Strike(Strike_)
00006 {
00007 }
00008 
00009 PayOff::PayOff(void) : Strike(0)
00010 {
00011 }
00012 
00013 void PayOff::SetStrike(Real Strike_)
00014 {
00015         Strike=Strike_;
00016 }
00017 
00018 
00019 Real PayOff::operator () (Real Spot) const
00020 {
00021     return max(Spot-Strike,0.0);
00022 }
00023 
00024 Real PayOff::Call(Real Fwd)
00025 {
00026         return max(Fwd-Strike,0.0);
00027 }
00028 
00029 Real PayOff::Put(Real Fwd)
00030 {
00031         return max(Strike-Fwd,0.0);
00032 }
00033 
00034 Real PayOff::AsianCall(valarray<Real> Path,LongNatural nDates)
00035 {
00036         return max(Average(Path,nDates)-Strike,0.0);
00037 }
00038 
00039 Real PayOff::AsianPut(valarray<Real> Path,LongNatural nDates)
00040 {
00041         return max(Strike-Average(Path,nDates),0.0);
00042 }
00043 
00044 Real PayOff::RevLookbackCall(valarray<Real> Path,LongNatural nDates)
00045 {
00046         return max(Maximize(Path,nDates)-Strike,0.0);
00047 }
00048 
00049 Real PayOff::RevLookbackPut(valarray<Real> Path,LongNatural nDates)
00050 {
00051         return max(Strike-Maximize(Path,nDates),0.0);
00052 }
00053 
00054 Real PayOff::BarrierCall(valarray<Real> Path,LongNatural nDates)
00055 {
00056         for (unsigned int i=0;i<nDates;i++) {
00057                 if (Path[i]>=Strike) return 1.;
00058         }
00059         return 0.;
00060 }
00061 
00062 Real PayOff::BarrierPut(valarray<Real> Path,LongNatural nDates)
00063 {
00064         for (unsigned int i=0;i<nDates;i++) {
00065                 if (Path[i]<=Strike) return 1.;
00066         }
00067         return 0.;
00068 }
00069 
00070 Real PayOff::FlooredCliquet (Real Spot, Real Fwd)
00071 {
00072         if (Fwd>=Strike)
00073                 return Fwd-Spot;
00074         else return Strike-Spot;
00075 }
00076 
00077 Real PayOff::CappedCliquet (Real Spot, Real Fwd)
00078 {
00079         if (Fwd<=Strike)
00080                 return Fwd-Spot;
00081         else return Strike-Spot;
00082 }
00083 
00084 Real PayOff::Rainbow2SpreadOptionMax(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult)
00085 {
00086         return max(Mult*(W1*Fwd1-W2*Fwd2-Strike),0);
00087 }
00088 
00089 Real PayOff::Rainbow2AssetsBasketMax(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult)
00090 {
00091         return max(Mult*(W1*Fwd1+W2*Fwd2-Strike),0);
00092 }
00093 
00094 Real PayOff::RainbowBestOf2AssetsCash(Real Fwd1,Real Fwd2,Real W1,Real W2)
00095 {
00096         return max(max(W1*Fwd1,W2*Fwd2),Strike);
00097 }
00098 
00099 Real PayOff::RainbowWorstOf2AssetsCash(Real Fwd1,Real Fwd2,Real W1,Real W2)
00100 {
00101         return min(min(W1*Fwd1,W2*Fwd2),Strike);
00102 }
00103 
00104 Real PayOff::RainbowMax2AssetsCall(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult)
00105 {
00106         return max(Mult* (max(W1*Fwd1 , W2*Fwd2)-Strike), 0);
00107 }
00108 
00109 Real PayOff::RainbowMin2AssetsCall(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult)
00110 {
00111         return max(Mult* (min(W1*Fwd1 , W2*Fwd2)-Strike), 0);;
00112 }
00113 
00114 Real PayOff::RainbowMax2AssetsPut(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult)
00115 {
00116         return max(Strike-Mult* (max(W1*Fwd1 , W2*Fwd2)), 0);
00117 }
00118 
00119 Real PayOff::RainbowMin2AssetsPut(Real Fwd1,Real Fwd2,Real W1,Real W2,Real Mult)
00120 {
00121         return max(Strike-Mult* (min(W1*Fwd1 , W2*Fwd2)), 0);;
00122 }
00123 
00124 Real PayOff::Convertible(Real Fwd, Real ConversionRatio, Real BondValue, Real CallPrice, Real PutPrice)
00125 {
00126         return max(
00127                 max(ConversionRatio * Fwd, min(BondValue, CallPrice)),
00128                 PutPrice);
00129 }
00130 

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