Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<array>
- #include<fstream>
- #include<vector>
- #include<iomanip>
- template<class T>
- void mult(T&);
- double macd(const std::array<double, 26>&, const std::vector<double>&, const std::array<double, 12>&, int);
- double signal(const std::array<double, 974>&, const std::array<double, 9>&, int);
- int main()
- {
- std::vector<double> data;
- data.reserve(1000);
- std::fstream file;
- file.open("dane.txt", std::ios::in);
- double tmp;
- while (file >> tmp)
- data.emplace_back(tmp);
- file.close();
- std::array<double, 26> backward26;
- std::array<double, 12> backward12;
- std::array<double, 9> backward9;
- std::array<double, 965> signalArray;
- std::array<double, 974> macdArray;
- mult(backward26); mult(backward12); mult(backward9);
- for (int i = 0; i < macdArray.max_size(); i++)
- macdArray[i] = macd(backward26, data, backward12, i+27);
- for (int i = 0; i < signalArray.max_size(); i++)
- signalArray[i] = signal(macdArray, backward9, i + 10);
- std::fstream macdFile, signalFile;
- macdFile.open("macd.txt", std::ios::out);
- signalFile.open("signal.txt", std::ios::out);
- for (int i = 0; i < signalArray.max_size(); i++) {
- macdFile << std::fixed << std::setprecision(5) << macdArray[i + 9] << std::endl;
- signalFile << std::fixed << std::setprecision(5) << signalArray[i] << std::endl;
- }
- macdFile.close();
- signalFile.close();
- return 0;
- }
- template<class T>
- void mult(T& array) {
- double alfa = 1.0 - (2.0 / (array.max_size() - 1));
- array.fill(alfa);
- for (int i = 1; i < array.max_size(); i++)
- array.at(i) = array.at(i - 1) * array.front();
- }
- double macd(const std::array<double,26>& backward26, const std::vector<double>& data, const std::array<double,12>& backward12, int place) {
- place -= 2;
- double ema12 = data[place + 1], ema26 = data[place + 1];
- double tmp = 1;
- for (int i = 0; i < 26; i++)
- ema26 += (data[place - i] * backward26[i]);
- for (int i = 0; i < 26; i++)
- tmp += backward26[i];
- ema26 /= tmp;
- tmp = 1;
- for (int i = 0; i < 12; i++)
- ema12 += (data[place - i] * backward12[i]);
- for (int i = 0; i < 12; i++)
- tmp += backward12[i];
- ema12 /= tmp;
- return (ema12 - ema26);
- }
- double signal(const std::array<double, 974>& macdArray, const std::array<double, 9>& backward9, int place) {
- place -= 2;
- double sig = macdArray[place + 1];
- double tmp = 1;
- for (int i = 0; i < 9; i++)
- sig += (macdArray[place - i] * backward9[i]);
- for (int i = 0; i < 9; i++)
- tmp += backward9[i];
- sig /= tmp;
- return sig;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement