MyTT icon indicating copy to clipboard operation
MyTT copied to clipboard

SMA函数定义错误

Open qzhjiang opened this issue 4 years ago • 5 comments

SMA函数正确的写法应该是:

def SMA(S, N, M=1):  # 中国式的SMA,至少需要120周期才精确,直接定义alpha=m/n
    return pd.Series(S).ewm(alpha=M / N, adjust=True).mean().values

qzhjiang avatar Oct 17 '21 14:10 qzhjiang

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

mpquant avatar Oct 17 '21 15:10 mpquant

你改过之后的与原来写的无差别,仍然是错误的。 我上面提出的正确写法,你可以自己验证,也可以看看我的这篇文章: 通达信转Python神器——myTT库

qzhjiang avatar Oct 17 '21 15:10 qzhjiang

 #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个写法得出的结果是一样的

mpquant avatar Oct 18 '21 04:10 mpquant

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

qzhjiang avatar Oct 18 '21 09:10 qzhjiang

感谢,已经修正 pd.Series(S).ewm(alpha=M/N, adjust=True).mean().values

mpquant avatar Oct 20 '21 06:10 mpquant