在计算简单移动平均值时,TA-LIB缺少数据点

时间:2014-10-18 16:05:40

标签: php pecl moving-average ta-lib

我使用PHP并且最近开始使用技术分析扩展TA-LIB来计算股票价格数据的指标。我得到的是我认为最简单的指标之一simple moving average的奇怪结果,而我还没弄清楚原因。我在TA-LIB论坛上发布了类似的问题,但那里的活动非常少,我怀疑如果有的话,我可能在很长一段时间内都没有得到答案。

SMA根据给定数量的先前价格数据计算平均值。我遇到的问题最好通过一个例子来说明。让我们说我有一组10个价格数据点,我想计算SMA。为简单起见,我们使用平均值4.在计算时,我们期望一组新的7个平均值。但是,TA-LIB返回4,如下所示:

$sma=trader_sma($close,4);
echo"<pre>";
print_r($sma);

Array
(
[0] => Array
    (
        [0] => 
        [1] => 0
        [2] => 
    )

[1] => Array
    (
        [0] => 
        [1] => 1
        [2] => 
    )

[2] => Array
    (
        [0] => 
        [1] => 2
        [2] => 
    )

[3] => Array
    (
        [0] => 
        [1] => 3
        [2] => 573.267
    )

[4] => Array
    (
        [0] => 
        [1] => 4
        [2] => 565.307
    )

[5] => Array
    (
        [0] => 
        [1] => 5
        [2] => 560.552
    )

[6] => Array
    (
        [0] => 
        [1] => 6
        [2] => 557.382
    )

)

正如您所看到的,我们会在集合的开头获取空值,如预期的那样。但是,我们最后缺少数据点,缺失数据点的数量总是对应于我平均的数据点数。当我根据我的价格数据绘制移动平均线时,这会导致最终的无理隙。

有关正在发生的事情的任何想法?

1 个答案:

答案 0 :(得分:0)

事实证明,我犯了一个愚蠢的错误,这并不奇怪。我实际上写了自己的函数:

function sma($array,$averagenr){
  $length=count($array);
  if($length<$averagenr)return(null);
  $sma_result=array();

  for ($x=1;$x<$averagenr;$x++){
    array_push($sma_result,array('',$x,null));
  }

  for ($x=$averagenr;$x<$length+1;$x++){
    $sum=0;
    for ($counter=$x-$averagenr;$counter<$x;$counter++){
        $sum=$sum+$array[$counter];
    }

    $avg=$sum/$averagenr;
   array_push($sma_result,array('',$x,$avg));
  }
  return($sma_result);}

echo "<pre>";
print_r(sma($close,4));

工作正常,但是当将它的结果与TA-LIB的结果进行比较时,我意识到问题是解析错误我已经完成了TA-LIB结果。我最初提出的问题因此无效。简单的错误,浪费时间,但很高兴知道TA-LIB按照我的意愿工作。