想取某一交易日的40日EMA值,按你的方法和同花顺的EMA数值还是不一致。
仔细看了一下文章,原来你是用603536.XSHG惠发股份从第一天开始算的,那自然是一致的。
但是如果随便取一个股票,可能已经上市好几年了,就没法从第一天开始算的。
因为你代码里面第一句就不正确。
```
def sma_cn2(X, n, m):
y = X[0] // 应该是y = y‘
for i in range(1, len(X)):
y = (m * X[i] + (n - m) * y) / n
return y
```
不过y’却是一个需要通过递归遍历到第一个交易日才能获得的数值。
更多时候我们并不追求100%没有误差,差别在万分之一甚至更小的获取任意股票某一日EMA的方法还是有的。
@四季
```
def sma_cn2(X, n, m):
y= X
for i in range(1, len(X)):
y[i] = (m * X[i] + (n - m) * y[i-1])/n
return y
def my_ema(X,n):
return sma_cn2(X,n+1,2)
h = get_bars(security='150019.XSHE', count=120, unit='1d',fields=['close'],
include_now=True)['close']
my_ema(h,10)
```
我取的日线,计算出来跟tdx是一样的。注意count=120,我取的数据长度比较长。