如何在给定最后一个已知 ema 的情况下对指数移动平均线进行逆向工程
How to reverse engineer exponential moving average given the last known ema
我一直在尝试根据最后已知的 EMA 对一系列 EMA 进行逆向工程。这应该能够通过指数移动平均方程的简单算术运算来完成:
Multiplier= (2 / (Time periods + 1) )
EMA = {Close - EMA(previous day)} x multiplier + EMA(previous day)
这给了我:
EMA(previous day) = (EMA(Today) - Close * multiplier)/(1 - multiplier)
因此,我定义的函数如下:
def ema(df, last_ma ,period):
ema = [last_ma]
k = 2/(period+1)
for i in range(len(df)-1,0,-1):
prev_ema = (last_ma - df['Close'][i] * k)/(1-k)
print(last_ma, df['Close'][i], prev_ema)
last_ma = prev_ema
ema.append(prev_ema)
ema.reverse()
return ema
问题是附加到列表EMA
中的值越来越大,最终达到无穷大。数据集没有问题,所以我猜测代码的逻辑有问题,但我不明白为什么。任何帮助将不胜感激。谢谢。
下面的 link 是我希望处理的数据,我使用的最后一个已知 EMA 数字是 -23628.2,它是一个 200 周期指数移动平均线。
https://drive.google.com/open?id=0Byc-aSwZI5OFd1ZWVEgxNUI5Xzg
经过一些研究,我的猜测是,在对大量数据点执行此类计算时可能会出现浮点精度错误。
根本问题是你的数学不稳定
前进时,每一步都将前面的 EMA
乘以 0
和 1
之间的 multiplier
。这意味着任何给定 Close
的影响都会呈指数级消失(因此得名 指数 移动平均线)。
但是,当向后走时,每一步 将 后面的 EMA
除以 multiplier
。这意味着任何给定数据点的影响 呈指数增长 ,而不是消失。
如果您的数学很完美,并且所有数字都恰到好处,那也没关系。但是,所有浮点误差 也 呈指数级放大,因此重复放大的噪声会很快超过信号。
没有简单的方法可以解决这个问题。最明显的尝试是尝试前进而不是后退,但不清楚这是否符合您的目标。
我一直在尝试根据最后已知的 EMA 对一系列 EMA 进行逆向工程。这应该能够通过指数移动平均方程的简单算术运算来完成:
Multiplier= (2 / (Time periods + 1) )
EMA = {Close - EMA(previous day)} x multiplier + EMA(previous day)
这给了我:
EMA(previous day) = (EMA(Today) - Close * multiplier)/(1 - multiplier)
因此,我定义的函数如下:
def ema(df, last_ma ,period):
ema = [last_ma]
k = 2/(period+1)
for i in range(len(df)-1,0,-1):
prev_ema = (last_ma - df['Close'][i] * k)/(1-k)
print(last_ma, df['Close'][i], prev_ema)
last_ma = prev_ema
ema.append(prev_ema)
ema.reverse()
return ema
问题是附加到列表EMA
中的值越来越大,最终达到无穷大。数据集没有问题,所以我猜测代码的逻辑有问题,但我不明白为什么。任何帮助将不胜感激。谢谢。
下面的 link 是我希望处理的数据,我使用的最后一个已知 EMA 数字是 -23628.2,它是一个 200 周期指数移动平均线。
https://drive.google.com/open?id=0Byc-aSwZI5OFd1ZWVEgxNUI5Xzg
经过一些研究,我的猜测是,在对大量数据点执行此类计算时可能会出现浮点精度错误。
根本问题是你的数学不稳定
前进时,每一步都将前面的 EMA
乘以 0
和 1
之间的 multiplier
。这意味着任何给定 Close
的影响都会呈指数级消失(因此得名 指数 移动平均线)。
但是,当向后走时,每一步 将 后面的 EMA
除以 multiplier
。这意味着任何给定数据点的影响 呈指数增长 ,而不是消失。
如果您的数学很完美,并且所有数字都恰到好处,那也没关系。但是,所有浮点误差 也 呈指数级放大,因此重复放大的噪声会很快超过信号。
没有简单的方法可以解决这个问题。最明显的尝试是尝试前进而不是后退,但不清楚这是否符合您的目标。