From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../Aufgabe2und3/src/HistoricSimulation.cpp | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 Master/Modellbildung_und_Simulation/Aufgabenblatt2/Aufgabe2und3/src/HistoricSimulation.cpp (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt2/Aufgabe2und3/src/HistoricSimulation.cpp') diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt2/Aufgabe2und3/src/HistoricSimulation.cpp b/Master/Modellbildung_und_Simulation/Aufgabenblatt2/Aufgabe2und3/src/HistoricSimulation.cpp new file mode 100644 index 0000000..412eac1 --- /dev/null +++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt2/Aufgabe2und3/src/HistoricSimulation.cpp @@ -0,0 +1,82 @@ +/* + * 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; +// } +} -- cgit v1.2.3