1

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

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

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;
    }
}
4

1 回答 1

2

基本上问题是 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,如果有的话。

于 2012-12-03T03:12:27.957 回答