EMA求助

Author: 懒猪, Created: 2021-01-08 00:08:49, Updated: 2021-01-08 13:41:42

pine_ema(src, length) => alpha = 2 / (length + 1) sum = 0.0 sum := na(sum[1]) ? sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1]) plot(pine_ema(close,15))

TV的EMA公式 sum := na(sum[1]) ? sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1]) 这一段看不太懂,有没有可以帮忙翻一下成pyhton的,谢谢。

备注说明:

  1. df[‘close’].ewm(span=110,adjust = False).mean()
  2. talib.EMA(np.array(close), timeperiod=110) 测试结果都与TV不一致 ( 小于50大概率相同) 大于100就不相同了。 所以想要解析tv的ema 测试一下看看。

More

MAIKEO 这是 写好的 JavaScript 的 ema 函数,重点需要注意的是,源数组中,索引 与 长度参数 不同条件下的计算方式

MAIKEO function ema(src, length) { var arr = []; var sum = 0; var alpha = 2 / (length + 1) for(var i in src) { if( i<length-1 ) { arr[i] = null; sum += src[i]; } if( i==length-1 ) { arr[i] = (sum+src[i])/length; } else { arr[i] = alpha * src[i] + (1 - alpha) * arr[i-1] } } return arr; }

小草 ewm算法可以自己写,具体 ewm = alpha*close+(1-alpha)*ewm

懒猪 嗯。目前是通过修改exp=0.1得到近似值。多谢。

小草 算法不太一样,有细微的区别,可以不用考虑,比如用迭代的方法第一个值应该怎么取,自己选择一个就行

懒猪 好像结果跟ewma也不相同 def EMA(ps,period=5,exp=0.1): ewma=pd.Series(0.0,index=ps.index) ewma[period-1]=ps[:period].mean() for i in range(period,len(ps)): ewma[i] =exp*ps[i]+(1-exp)*ewma[i-1] return ewma