好奇是否有人使用过。我在一个时间序列上做了一个简单的EMA操作。但是无法很好地调和。

我读到更新常数的值= 2 /(N + 1)。我定义了x = 1:20,并做了EMA(x,5)。然后,我使用递归计算进行了EMA计算。这两个结果并不完全一致

函数返回

EMA(x,5)
 [1] NA NA NA NA  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18


我的小东西给了我,

EMA
 [1]  1.000000  1.333333  1.888889  2.592593  3.395062  4.263374  5.175583  6.117055  7.078037  8.052025  9.034683 10.023122 11.015415 12.010276 13.006851 14.004567
[17] 15.003045 16.002030 17.001353 18.000902

最佳答案

要获得您正在寻找的答案,您需要写

TTR::EMA(1:20, n=1,  ratio=2/(5+1))

 [1]  1.000000  1.333333  1.888889  2.592593  3.395062  4.263374  5.175583
 [8]  6.117055  7.078037  8.052025  9.034683 10.023122 11.015415 12.010276
[15] 13.006851 14.004567 15.003045 16.002030 17.001353 18.000902


如果您呼叫TTR::EMA(1:20, n=5),则等同于呼叫

TTR::EMA(1:20, n=5, ratio=2/(5+1))


这会将NA排在前4位,然后第5位将是前5个条目的简单均值。 (即本例中为3)。然后,EMA算法将开始。第六名将是6 * 2/6 + 3 * 4/6 =4。第七名将是7 * 2/6 + 4 * 4/6 = 5等。

您可以看到确切的算法here

08-25 02:08