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

PortFolio.cpp

Go to the documentation of this file.
00001 #include "./PortFolio.h"
00002 
00003 Portfolio::Portfolio(char* name,Currency currency)
00004 {
00005         char* _name=new char[MAX_SIZE_NAME];
00006         _name=name;
00007         _currency=currency;
00008         _nbRainbowOptions=0;
00009         _nbVanSwaps=0;
00010         _nbVarSwaps=0;
00011         _nbBonds=0;
00012         _nbAssets=0;
00013         _optionStrategy=OptionStrategy();
00014         _rainbowOptions.resize(MAX_SIZE);
00015         _vanSwaps.resize(MAX_SIZE);
00016         _varSwaps.resize(MAX_SIZE);
00017         _bonds.resize(MAX_SIZE);
00018         _assets.resize(MAX_SIZE);
00019 }
00020 
00021 Portfolio::~Portfolio(void)
00022 {
00023 }
00024 
00025 char* Portfolio::getName() {
00026         return _name;
00027 }
00028 
00029 Currency Portfolio::getCurrency() {
00030         return _currency;
00031 }
00032 
00033 char* Portfolio::getCurrencyAsString() {
00034         char* result=new char[MAX_SIZE_NAME];
00035         switch (_currency) {
00036                 case (USD):
00037                         sprintf(result,"USD");
00038                         break;
00039                 case (EUR):
00040                         sprintf(result,"EUR");
00041                         break;
00042                 case (CAD):
00043                         sprintf(result,"CAD");
00044                         break;
00045                 default:
00046                         break;
00047         }
00048         return result;
00049 }
00050 
00051 void Portfolio::addOptionStrategy(OptionStrategy* optionStrategy) {
00052         _optionStrategy=*optionStrategy;
00053 }
00054 
00055 void Portfolio::addRainbowOption(RainbowOption* rainbowOption, Real quantity) {
00056         _rainbowOptions[_nbRainbowOptions]=rainbowOption;
00057         _quantityRainbowOptions[_nbRainbowOptions]=quantity;
00058         _nbRainbowOptions++;
00059 }
00060 
00061 void Portfolio::addExoticOption(Exotics* exoticOption, Real quantity) {
00062         _exoticsOptions[_nbExoticsOptions]=exoticOption;
00063         _quantityExoticsOptions[_nbExoticsOptions]=quantity;
00064         _nbExoticsOptions++;
00065 }
00066 
00067 void Portfolio::addVanillaSwap(VanillaSwap* vanillaSwap, Real quantity) {
00068         _vanSwaps[_nbVanSwaps]=vanillaSwap;
00069         _quantityVanSwaps[_nbVanSwaps]=quantity;
00070         _nbVanSwaps++;
00071 }
00072 
00073 void Portfolio::addVarianceSwap(VarianceSwap* varSwap, Real quantity) {
00074         _varSwaps[_nbVarSwaps]=varSwap;
00075         _quantityVarSwaps[_nbVarSwaps]=quantity;
00076         _nbVarSwaps++;
00077 }
00078 
00079 void Portfolio::addBond(bond* oneBond, Real quantity) {
00080         _bonds[_nbBonds]=oneBond;
00081         _quantityBonds[_nbBonds]=quantity;
00082         _nbBonds++;
00083 }
00084 
00085 void Portfolio::addAsset(asset* oneAsset, Real quantity) {
00086         _assets[_nbAssets]=oneAsset;
00087         _quantityAssets[_nbAssets]=quantity;
00088         _nbAssets++;
00089 }
00090 
00091 Real Portfolio::getPrice() {
00092         Real result=0.;
00093         result+=_optionStrategy.returnPrice();
00094         for (Integer i=0;i<(Integer)_nbRainbowOptions;i++) {
00095                 result+=_rainbowOptions[i]->getPrice();
00096         }
00097         for (Integer i=0;i<(Integer)_nbExoticsOptions;i++) {
00098                 result+=_exoticsOptions[i]->getPrice();
00099         }
00100         for (Integer i=0;i<(Integer)_nbVarSwaps;i++) {
00101                 result+=_varSwaps[i]->getPrice();
00102         }
00103         for (Integer i=0;i<(Integer)_nbVanSwaps;i++) {
00104                 result+=_vanSwaps[i]->returnPrice();
00105         }
00106         for (Integer i=0;i<(Integer)_nbBonds;i++) {
00107                 result+=_bonds[i]->fairvalue(Date());
00108         }
00109         for (Integer i=0;i<(Integer)_nbAssets;i++) {
00110                 result+=_assets[i]->getPrice();
00111         }
00112         return result;
00113 }
00114 
00115 Real Portfolio::returnSensibilityToRate() {
00116         Real result=0;
00117         result+=_optionStrategy.getGlobalRho();
00118         for (Integer i=0;i<(Integer)_nbRainbowOptions;i++) {
00119                 result+=_rainbowOptions[i]->getRho();
00120         }
00121         for (Integer i=0;i<(Integer)_nbExoticsOptions;i++) {
00122                 result+=_exoticsOptions[i]->getRho();
00123         }
00124         for (Integer i=0;i<(Integer)_nbVanSwaps;i++) {
00125                 result+=_vanSwaps[i]->getRho();
00126         }
00127         for (Integer i=0;i<(Integer)_nbVarSwaps;i++) {
00128                 result+=_varSwaps[i]->getRho();
00129         }
00130         for (Integer i=0;i<(Integer)_nbBonds;i++) {
00131                 result+=_bonds[i]->duration(Date());
00132         }
00133         for (Integer i=0;i<(Integer)_nbAssets;i++) {
00134                 result+=_assets[i]->getRho(1.); //TOBECHANGED******************
00135         }
00136         return result;
00137 }
00138 
00139 Real Portfolio::returnSensibilityToVol() {
00140         Real result=0;
00141         result+=_optionStrategy.getGlobalVega();
00142         for (Integer i=0;i<(Integer)_nbRainbowOptions;i++) {
00143                 result+=_rainbowOptions[i]->getVega();
00144         }
00145         for (Integer i=0;i<(Integer)_nbExoticsOptions;i++) {
00146                 result+=_exoticsOptions[i]->getVega();
00147         }
00148         for (Integer i=0;i<(Integer)_nbVarSwaps;i++) {
00149                 result+=_varSwaps[i]->getVega();
00150         }
00151         return result;
00152 }
00153 
00154 Real Portfolio::returnSensibilityToTime() {
00155         Real result=0;
00156         result+=_optionStrategy.getGlobalTheta();
00157         for (Integer i=0;i<(Integer)_nbRainbowOptions;i++) {
00158                 result+=_rainbowOptions[i]->getTheta();
00159         }
00160         for (Integer i=0;i<(Integer)_nbExoticsOptions;i++) {
00161                 result+=_exoticsOptions[i]->getTheta();
00162         }
00163         for (Integer i=0;i<(Integer)_nbVanSwaps;i++) {
00164                 result+=_vanSwaps[i]->getTheta();
00165         }
00166         for (Integer i=0;i<(Integer)_nbVarSwaps;i++) {
00167                 result+=_varSwaps[i]->getTheta();
00168         }
00169         return result;
00170 }

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