6

我目前正在编写一个涉及一些财务计算的代码。更特别的是一些指数移动平均线。为了完成这项工作,我尝试了 Pandas 和 Talib:

talib_ex=pd.Series(talib.EMA(self.PriceAdjusted.values,timeperiod=200),self.PriceAdjusted.index) 
pandas_ex=self.PriceAdjusted.ewm(span=200,adjust=True,min_periods=200-1).mean()

它们都工作正常,但它们在数组的开头提供了不同的结果:

200 天 EMA - Talib vs Pandas

所以有一些参数需要更改为 pandas 的 EWMA 或者这是一个错误,我应该担心吗?

提前致谢

卢卡

4

1 回答 1

6

对于 talib ema,公式为:

所以在使用 pandas 的时候,如果你想让 pandas ema 和 talib 一样,你应该把它当作:

pandas_ex=self.PriceAdjusted.ewm(span=200, adjust=False ,min_periods=200-1).mean()

如果要使用与 talib 相同的公式,请根据文档(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.ewm.html )将调整设置为 False:

当调整为 True(默认)时,加权平均值使用权重 (1-alpha) (n-1), (1-alpha) (n-2), ..., 1-alpha, 1 计算。

当adjust为False时,加权平均值递归计算为:weighted_average[0] = arg[0]; weighted_average[i] = (1-alpha) weighted_average[i-1] + alpha arg[i]。

您也可以在这里参考: https ://en.wikipedia.org/wiki/Moving_average

PS:但是,在我的项目中,我仍然发现 talib 和 pandas.ewm 之间存在一些小的差异,但还不知道为什么......

于 2017-08-14T15:21:54.600 回答