MNP01/main.cpp
2018-03-11 12:48:48 +01:00

58 lines
1.3 KiB
C++

#include <vector>
#include <string>
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
double expavg(const std::vector<double> &values, int start, int n)
{
double a = 1 - 2./(n + 1);
double nominator = 0., denominator = 0.;
double b = 1.;
for (int i = 0; i < n; i++) {
nominator += b*values[start - i];
denominator += b;
b *= a;
}
return nominator / denominator;
}
int main(int argc, char **argv)
{
int low = 12, high = 26, s = 9;
if (argc >= 2)
low = std::atoi(argv[2]);
if (argc >= 3)
high = std::atoi(argv[4]);
if (argc >= 4)
s = std::atoi(argv[3]);
std::vector<double> prices;
double price;
while (std::cin >> price) {
prices.push_back(price);
}
std::vector<double> macd(prices.size());
std::vector<double> signal(prices.size());
for (int i = 0; i < prices.size(); ++i) {
macd[i] = expavg(prices, i, std::min(i, low)) - expavg(prices, i, std::min(i, high));
signal[i] = expavg(macd, i, std::min(i, s));
}
std::cout << "price,macd,signal,delta" << std::endl;
for (int i = 1; i < prices.size(); ++i) {
std::cout << prices[i] << "," << macd[i] << "," << signal[i] << "," << prices[i] - prices[i-1] << std::endl;
}
}