#include <iostream>
#include <vector>
// Calculate simple moving average (SMA)
double calcSMA(const std::vector<double>& data, int period)
{
double sum = 0;
for (int i = 0; i < period; i++)
sum += data[data.size() - period + i];
return sum / period;
}
int main()
{
// Example data (OHLC)
std::vector<double> data = { 100, 105, 102, 108, 110, 109, 112 };
// Periods for moving averages
int ma5 = 5, ma13 = 13;
// Calculate the moving averages
std::vector<double> ma5_values, ma13_values;
for (int i = 0; i < data.size(); i++)
{
if (i + 1 >= ma5)
ma5_values.push_back(calcSMA(data, ma5));
if (i + 1 >= ma13)
ma13_values.push_back(calcSMA(data, ma13));
}
// Check for moving average crossover
for (int i = 0; i < ma5_values.size(); i++)
{
if (ma5_values[i] > ma13_values[i] && ma5_values[i - 1] <= ma13_values[i - 1])
std::cout << "MA5 crosses above MA13 at index " << i << std::endl;
else if (ma5_values[i] < ma13_values[i] && ma5_values[i - 1] >= ma13_values[i - 1])
std::cout << "MA5 crosses below MA13 at index " << i << std::endl;
}
return 0;
}