您是否需要所有历史值来计算 EMA?
Do you need all the historic previous values to calculate EMA?
我正在使用 PHP.
计算某些价格系列的 EMA
Moving Averages in wikipedia
WHAT IS EMA?
假设您有一个包含 5000 个元素的数组,并且您想要计算 EMA 10。
与SMA相比,在SMA中您只需要获取最后10个值并计算平均值,而在EMA中您需要之前的EMA值才能进行新的计算。第一个 EMA 值是所需元素的 SMA 数量。
我的问题是,您是否需要处理 EMA 的前 5000 个值?
正如我所说,它使用以前的值进行下一次计算,理论上你必须这样做,但是当你有例如 500 万个寄存器时,这可能是个问题。
还是只需要获取从 $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;
}
提前致谢。
我已经用 EMA20 测试了一长串具有已知 ema20 结果的数字,并将值与我的算法进行比较,是的,您需要从一开始就需要所有值。
在像 EMA200 这样有很多数字的 EMA 中,这并不重要,因为旧值的权重非常小,但在高波动性的小 EMA 中,使用历史值中的所有值计算 ema 很重要。
所以一个高效的算法需要将所有那些以前的 ema 存储在一个文件或数据库中,因为计算当前的 ema 会产生很多计算,如果你已经计算了它们,那只是一个简单的操作。
我正在使用 PHP.
计算某些价格系列的 EMAMoving Averages in wikipedia
WHAT IS EMA?
假设您有一个包含 5000 个元素的数组,并且您想要计算 EMA 10。
与SMA相比,在SMA中您只需要获取最后10个值并计算平均值,而在EMA中您需要之前的EMA值才能进行新的计算。第一个 EMA 值是所需元素的 SMA 数量。
我的问题是,您是否需要处理 EMA 的前 5000 个值?
正如我所说,它使用以前的值进行下一次计算,理论上你必须这样做,但是当你有例如 500 万个寄存器时,这可能是个问题。
还是只需要获取从 $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;
}
提前致谢。
我已经用 EMA20 测试了一长串具有已知 ema20 结果的数字,并将值与我的算法进行比较,是的,您需要从一开始就需要所有值。
在像 EMA200 这样有很多数字的 EMA 中,这并不重要,因为旧值的权重非常小,但在高波动性的小 EMA 中,使用历史值中的所有值计算 ema 很重要。
所以一个高效的算法需要将所有那些以前的 ema 存储在一个文件或数据库中,因为计算当前的 ema 会产生很多计算,如果你已经计算了它们,那只是一个简单的操作。