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.);
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 }