diff options
Diffstat (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt2/Aufgabe2und3/src/HistoricSimulation.cpp')
| -rw-r--r-- | Master/Modellbildung_und_Simulation/Aufgabenblatt2/Aufgabe2und3/src/HistoricSimulation.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
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 <algorithm>
+#include <iostream>
+#include <iomanip>
+#include <stdio.h>
+
+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>& stockPrices = param.getStockPrices();
+ uint8_t u8HoldingTime = static_cast<uint8_t>(nenHoldingTime);
+ uint32_t N = stockPrices.size() - u8HoldingTime;
+ uint32_t n = 0;
+ mData.clear();
+ std::vector<double> portfolio(static_cast<uint8_t>(nenEndOfCompanies));
+ double portfolioValue = 0.0;
+
+ for (uint8_t c=0; c < nenEndOfCompanies; c++)
+ {
+ mData.push_back(std::vector<double>(N));
+ portfolio.at(c) = param.getLastValue(static_cast<enCompany>(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<double> 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<double> 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;
+// }
+}
|
