gpt4 book ai didi

c++ - 我尝试用 C++ 编写自己的简单移动平均线

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:13 34 4
gpt4 key购买 nike

  1. 我想要一个有效的函数。
  2. 我相信我的逻辑是正确的,因此我的( vector 超出范围错误)一定是由于不熟悉和正确使用代码造成的。
  3. 我知道这个相当简单的算法有很长的代码。如果可以,请提供帮助。

基本上,我将长度作为“移动”窗口,因为它循环通过 j 到 vector 大小的末尾。这个 vector 充满了股票价格。

如果数字 1 2 3 4 的 2 天移动平均线的长度等于 2。我应该能够输出 1.5、2.5 和 3.5。但是,我收到了超出范围的错误。

代码中显示了逻辑。如果专家可以帮助我解决我正在尝试创建的这个简单的移动平均函数,那就太好了!谢谢。

void Analysis::SMA()
{

double length;
cout << "Enter number days for your Simple Moving Average:" << endl;
cin >> length;
double sum = 0;
double a;
while (length >= 2){
vector<double>::iterator it;
for (int j = 0; j < close.size(); j++){

sum = vector1[length + j - 1] + vector1[length + j - 2];
a = sum / length;
vector2.push_back(a);

vector<double>::iterator g;
for (g = vector2.begin(); g != vector2.end(); ++g){

cout << "Your SMA: " << *g;
}
}
}
}

最佳答案

您不需要 3 次循环来计算一组数据的移动平均值,您只需要 1 次。您遍历该数组并跟踪最后 n 项的总和,然后只需针对每一项进行调整新值,每次加一减一。

例如假设你有一个数据集:

4 8 1 6 9

并且您想计算窗口大小为 3 的移动平均值,然后您可以像这样保持运行总计:

iteration add subtract running-total output average
0 4 - 4 - (not enough values yet)
1 8 - 12 -
2 1 - 13 13 / 3
3 6 4 15 15 / 3
4 9 8 16 16 / 3

请注意,每次加法时,我们在第 3 次迭代(窗口大小为 3)时开始减法,并在第 2 次迭代(窗口大小减 1)时开始输出平均值。

所以代码将是这样的:

double runningTotal = 0.0;
int windowSize = 3;
for(int i = 0; i < length; i++)
{
runningTotal += array[i]; // add
if(i >= windowSize)
runningTotal -= array[i - windowSize]; // subtract
if(i >= (windowSize - 1)) // output moving average
cout << "Your SMA: " << runningTotal / (double)windowSize;
}

您可以对其进行调整以使用您的 vector 数据结构。

关于c++ - 我尝试用 C++ 编写自己的简单移动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30338671/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com