我目前正在撰写涉及一些财务计算的代码。更特别是一些指数移动平均线。为了完成这项工作,我尝试过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()
它们都工作正常,但它们在数组开始时提供不同的结果:
所以有一些参数需要改成熊猫的EWMA,或者它是一个bug,我应该担心吗?
提前致谢
卢卡
答案 0 :(得分:4)
对于talib ema,公式为:
所以当使用熊猫时,如果你想让pandas ema和talib一样,你应该将它用作:
pandas_ex = self.PriceAdjusted.ewm(跨度= 200,调整=假下,min_periods = 200-1).mean()
如果您想使用与talib相同的公式,请根据文档(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.ewm.html)将adjust设置为False:
当adjust为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之间存在一些细微差别,并且不知道为什么......