SMA函数定义错误
qzhjiang opened this issue · 5 comments
qzhjiang commented
SMA函数正确的写法应该是:
def SMA(S, N, M=1): # **式的SMA,至少需要120周期才精确,直接定义alpha=m/n
return pd.Series(S).ewm(alpha=M / N, adjust=True).mean().values
mpquant commented
SMA(S, N, M=1): #**式的SMA,至少需要120周期才精确 (雪球180周期) alpha=1/(1+com)
return pd.Series(S).ewm(alpha=1/(1+N-M), adjust=True).mean().values
qzhjiang commented
你改过之后的与原来写的无差别,仍然是错误的。
我上面提出的正确写法,你可以自己验证,也可以看看我的这篇文章:
通达信转Python神器——myTT库
mpquant commented
#RSI 10-12 10-13 10-14 10-15 (上证指数 000001 RSI 24日)
#通达信:47.81 49.07 48.78 50.02
#雪球: 47.81 49.07 48.78 50.02
纯粹SMA指标不好对比,用主力使用SMA的RSI对比
return pd.Series(S).ewm(alpha=M/N, adjust=True).mean().values
return pd.Series(S).ewm(com=N-M, adjust=True).mean().values
上面这2个写法得出的结果是一样的
qzhjiang commented
return pd.Series(S).ewm(alpha=M/N, adjust=True).mean().values
return pd.Series(S).ewm(com=(N-M)/M, adjust=True).mean().values
这两个写法才是等价的。
推导过程如下:
已知:
alpha =1/(1+com)
又知道,SMA正确的alpha是M/N
alpha = M/N
容易求出:
com = N/M-1=(N-M)/M
详细验证过程请见:
通达信转Python神器——myTT库,https://www.joinquant.com/view/community/detail/a6cc7d1fb73a57dbac4b77044a33b15d?type=1
mpquant commented
感谢,已经修正
pd.Series(S).ewm(alpha=M/N, adjust=True).mean().values