MyTT icon indicating copy to clipboard operation
MyTT copied to clipboard

对SLOPE函数的修改

Open qzhjiang opened this issue 3 years ago • 3 comments

myTT中现在的SLOPE函数:

def SLOPE(S, N, RS=False):  # 返S序列N周期回线性回归斜率 (默认只返回斜率,不返回整个直线序列)
    M = pd.Series(S[-N:])
    poly = np.polyfit(M.index, M.values, deg=1)
    Y = np.polyval(poly, M.index)
    if RS:
        return Y[1] - Y[0], Y
    return Y[1] - Y[0]

存在如下问题: 1) 有三个参数,与通达信不一致; 2)违背了array in, array out的原则; 3)写法繁琐

特修改如下:

def SLOPE(S, N):
    # type: (np.ndarray, int) -> np.ndarray
    """
    通达信SLOPE。返S序列N周期回线性回归斜率,N暂时不支持变量。
    """
    M = pd.Series(S)
    return M.rolling(window=N).apply(lambda y: np.polyfit(y.index, y.values, deg=1)[0], raw=False)

qzhjiang avatar Nov 20 '21 04:11 qzhjiang

def SLOPE(S, N):           #返S序列N周期回线性回归斜率        
    return pd.Series(S).rolling(N).apply(lambda x: np.polyfit(x.index,x.values,deg=1)[0],raw=False).values  

感谢! FORCAST() 还需要研究

mpquant avatar Nov 20 '21 16:11 mpquant

def FORCAST(S,N):                      #返S序列N周期回线性回归后的预测值    
    M=pd.Series(S[-N:]);      poly = np.polyfit(M.index, M.values,deg=1);     
    return np.polyval(poly, M.index)[-1]

还是只能返回最后单值

mpquant avatar Nov 21 '21 03:11 mpquant

2021年11月12日修改

def slope(S, N):
    # type: (np.ndarray, int) -> np.ndarray
    """
    通达信SLOPE。返S序列N周期回线性回归斜率,N暂时不支持变量。
    """
    return pd.Series(S).rolling(window=N).apply(lambda y: np.polyfit(range(N), y, deg=1)[0], raw=False).values

qzhjiang avatar Nov 22 '21 09:11 qzhjiang