admin管理员组文章数量:1794759
通达信,同花顺中国式SMA指标,EMA指数平均,MACD,RSI的最简python代码实现
通达信,同花顺指标中的中国式SMA,EMA的python实现
同花顺,通达信指标计算有个非常重要的函数SMA,和EMA,下面仅仅用python库panadas和numpy的内置函数实现
import numpy as np; import pandas as pddef EMA(S,N): #为了精度 S>4*N EMA至少需要120周期 return pd.Series(S).ewm(span=N, adjust=False).mean().values def SMA(S, N, M=1): #中国式的SMA,至少需要120周期才精确 K = pd.Series(S).rolling(N).mean() #先求出平均值for i in range(N+1, len(S)): K[i] = (M * S[i] + (N -M) * K[i-1]) / N # 因为要取K[i-1],所以 range(N+1, len(S)) return K
- EMA实现的很成功,pandas内置函数,速度快,SMA需要循环才能实现,不是最优的解决方案,下面采用pandas的内置函数来实现!
def SMA(S, N, M=1): # 1)高效的方法return pd.Series(S).ewm(alpha=M/N, adjust=True).mean().values def SMA(S, N, M=1): # 2)高效写法2return pd.Series(S).ewm(com=N-M, adjust=True).mean().values def SMA(S, N, M=1): # 3)高效写法3return pd.Series(S).ewm(span=2N/M-1, adjust=True).mean().values def SMA(S, N, M=1): # 4)python2的pandas没有ewm,用ewma实现return pd.ewma(S,com=N-M,adjust=True) #以上4种写法得到的数值是一样的
- 有了这两个关键函数,就可以用它们构造出MACD指标和RSI指标,代码非常简单
def MACD(CLOSE,SHORT=12,LONG=26,M=9): # EMA的关系,S取120日,和雪球小数点2位相同DIF = EMA(CLOSE,SHORT)-EMA(CLOSE,LONG); DEA = EMA(DIF,M); MACD=(DIF-DEA)*2return DIF,DEA,MACDdef RSI(CLOSE, N=24): DIF = CLOSE-REF(CLOSE,1) return SMA(MAX(DIF,0), N) / SMA(ABS(DIF), N) * 100
以上函数实现的macd,rsi指标和雪球,同花顺,通达信等软件对照完全一致
更多的细节已经开源在github上:
本文标签: 通达信同花顺中国式SMA指标EMA指数平均MACDRSI的最简python代码实现
版权声明:本文标题:通达信,同花顺中国式SMA指标,EMA指数平均,MACD,RSI的最简python代码实现 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1692800092a207774.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论