c++ - 指数加权平均 C++ 嵌套 for 循环

标签 c++ moving-average

<分区>

我希望使用从大型数据集中提取的数据来实现带有滑动窗口的指数加权移动平均线。

代码有效,但结果绝对不是它们应有的结果,我似乎无法弄清楚原因。这是我的代码,请详细说明我到底做错了什么:

for(unsigned int i = window; i< close_price.size(); i++)
{
     double tmp3;
     double tmp4;
     for(int j = 0; j < window; j++) 
     {
          tmp3 += pow(lambda,j) * pow(close_price[i-j], 2);
          tmp4 += pow(close_price[i-j], 2); 
          if(j == window-1)
          {
              double temp = (1-lambda) * (pow(close_price[window], 2) + tmp3);
              ewma.push_back( sqrt(temp) );
              sma.push_back( tmp4/window );
          }
          tmp3 = 0;
          tmp4 = 0;
    }
}

最佳答案

基本上问题是 tmp3 和 tmp4 没有初始化,所以 tmp3+=blah 有未定义的结果。

我现在看到你的代码的方式,它应该是这样的:

for(size_t i = window; i< close_price.size(); i++)
{
     double tmp3 = 0.0;
     double tmp4 = 0.0;
     for(size_t j = 0; j < window; j++) 
     {
          tmp3 += pow(lambda,j) * pow(close_price[i-j], 2);
          tmp4 += pow(close_price[i-j], 2); 
     }
     double temp = (1-lambda) * (pow(close_price[window], 2) + tmp3);
     ewma.push_back( sqrt(temp) );
     sma.push_back( tmp4/window );
}

说明:在 for 循环中不需要额外的 if,因为无论如何 j 的最后一个值将是 window-1,tmp3 和 tmp4 将在每次 i-loop 开始时初始化。 size() 的类型是 size_t 而不是 unsigned int,如果有的话。

关于c++ - 指数加权平均 C++ 嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13676482/

相关文章:

algorithm - 随着时间的推移平滑值 : moving average or something better?

c++ - 为什么在交叉编译时 CMAKE_FIND_ROOT_PATH 和 CMAKE_INCLUDE_PATH 不覆盖我的根文件系统?

c++ - 模板元编程 : (trait for? ) 将指定模板分解为类型 T<T2,T3 N,T4, ...>

C++ std::ctype<char>::widen() 的作用是什么?

hadoop - 获取错误无法在发出函数中找到符号上下文

MySQL : How to average the one column based on first 5 records of every each date of the record?

arrays - Haskell 中的移动平均线

r - 计算移动平均线

c++ - 范围解析而不是 .模板类参数的运算符

c++ - 如何获取亮像素或暗像素的坐标?打开简历