我正在用PHP计算一些价格系列的EMA。
假设您有一个包含5000个元素的数组,并且要计算EMA 10。
与SMA相比,在SMA中只需要得到最后的10个值并计算平均值,而在EMA中则需要以前的EMA值来进行新的计算。首先,EMA值是所需元素的SMA数。
我的问题是,您是否需要处理EMA之前的5000个值?
正如我所说的,它使用前面的值进行下一次计算,理论上您必须这样做,但是当您有5百万寄存器时,它可能是一个问题。
还是仅仅得到从$n-20到$n-11的项目,计算SMA,然后对最后10个值应用EMA?
此外,旧的值是EMA被废弃更快,因为它使用Alpha。我创建了下一个计算EMA的函数:
function EMA($v,$lastvalue,$num=200)
{
if($num>(count($v)-1))
return FALSE;
$MA=0;
$initMA=count($v)-2*$num;
if($initMA<0)
$initMA=0;
for($i=0,$j=$initMA;$i<$num;$i++,$j++)
$MA+=$v[$j];
$EMA=$MA/$num;
$a = 2/ ($num + 1);
for($i=$j;$i<count($v)-1;$i++)
$EMA = $a * $v[$i+1]+ (1-$a) * $EMA;
$EMA = $a * $lastvalue+ (1-$a) * $EMA;
return $EMA;
}提前谢谢。
发布于 2021-09-07 19:29:46
我用EMA20进行了长系列测试,得到了已知的ema20结果,并将值与我的algoritm进行了比较,是的,从开始就需要所有的值。
对于像EMA200这样的数很多的EMA,它并不重要,因为旧值的权重确实很小,但是在小的ema中,当高波动性时,使用历史上所有的值来计算ema是很重要的。
因此,一个有效的算法需要将所有以前的ema存储在一个文件或数据库中,因为计算当前的ema会生成大量的计算,如果您已经计算了它们,这只是一个简单的操作。
https://stackoverflow.com/questions/68983239
复制相似问题