MyTT icon indicating copy to clipboard operation
MyTT copied to clipboard

py2版SMA函数定义错误

Open qzhjiang opened this issue 4 years ago • 1 comments

mytt.py的py2版本中,SMA定义为:

def SMA(S, N, M=1):        #中国式的SMA,至少需要120周期才精确 (雪球180周期)    alpha=1/(1+com)
    return pd.ewma(S,com=N-M,adjust=True)   

已知: alpha =1/(1+com)

又知道,SMA正确的alpha是M/N alpha = M/N

容易求出: com = N/M-1=(N-M)/M

所以,py2中SMA中正确的定义应该是:

def SMA(S, N, M=1):        #中国式的SMA,至少需要120周期才精确 (雪球180周期)    alpha=1/(1+com)
    return pd.ewma(S,com=((N-M)*1.0)/M,adjust=False)  

或者:

def SMA(S, N, M=1):        #中国式的SMA,至少需要120周期才精确 (雪球180周期)    alpha=1/(1+com)
    return pd.ewma(S,com=(N*1.0)/M - 1,adjust=False)

注意到画蛇添足地乘以了1.0,是因为直接除,py2中会变成整除。先乘以1.0,int转化为float后,再除,就是正确的了。

已经在一创聚宽验证过了,上述两个修改版,计算结果都是正确的。

qzhjiang avatar Oct 18 '21 09:10 qzhjiang

感谢,已经修正

mpquant avatar Oct 20 '21 06:10 mpquant