/* * HistoricSimulation.cpp * * Created on: 27.05.2011 * Author: eisenhauer */ #include "HistoricSimulation.h" #include #include #include #include const double PORTFOLIO[] = {200000.0,150000.0,250000.0,300000.0,200000.0}; HistoricSimulation::HistoricSimulation() { } HistoricSimulation::~HistoricSimulation() { } void HistoricSimulation::doSimulation(const Parametrisation& param, const enHoldingTime& nenHoldingTime) { const std::vector& stockPrices = param.getStockPrices(); uint8_t u8HoldingTime = static_cast(nenHoldingTime); uint32_t N = stockPrices.size() - u8HoldingTime; uint32_t n = 0; mData.clear(); std::vector portfolio(static_cast(nenEndOfCompanies)); double portfolioValue = 0.0; for (uint8_t c=0; c < nenEndOfCompanies; c++) { mData.push_back(std::vector(N)); portfolio.at(c) = param.getLastValue(static_cast(c) ) * PORTFOLIO[c]; portfolioValue += portfolio.at(c); } for(uint32_t counter = u8HoldingTime; counter < stockPrices.size() ; counter++) { for (uint8_t c=0; c < nenEndOfCompanies; c++) { double compRelChange = 0.0; switch(nenHoldingTime) { case nenOneDay: compRelChange = stockPrices.at(counter).mStock.at(c).mValueRelChangeOne; break; case nenTenDays: compRelChange = stockPrices.at(counter).mStock.at(c).mValueRelChangeTen; break; } double actCompValue = portfolio.at(c) + (portfolio.at(c) * compRelChange / 100); mData.at(c).at(n) = actCompValue; } n++; } std::vector simulatedPortfolioValues(N); for (n = 0; n < N; n++) { double sum = 0.0; for (uint8_t c=0; c < nenEndOfCompanies; c++) { sum += mData.at(c).at(n); } simulatedPortfolioValues.at(n) = sum; } std::vector simulatedPortfolioChanges(N); for (n = 0; n < N; n++) { simulatedPortfolioChanges.at(n) = portfolioValue - simulatedPortfolioValues.at(n); } std::sort(simulatedPortfolioChanges.begin(),simulatedPortfolioChanges.end()); uint32_t quantilIdx = (N / 100) - 1; double VaR = simulatedPortfolioChanges.at(quantilIdx); std::string strHoldTime = (nenHoldingTime==nenOneDay)?"one day: ":"ten days: "; std::cout << "Historic simulation VaR for " + strHoldTime << VaR << " EUR" << std::endl; // printf("%u\n",quantilIdx); // for (n = 0; n < N; n++) { // std::cout << simulatedPortfolioChanges.at(n) << std::endl; // } }