talib实现的MACD

发布时间 2023-04-18 21:50:42作者: shclbear

 

talib实现的MACD与国内软件厂商实现的不太一致,需要自行定义和调整。提供通达信、同花顺 MACD Talib实现。

同花顺和通达信等软件中的SMA,是KDJ_CN和RSI_CN的基础依赖

注意:使用前引用talib

首先实现SMA,然后才是其它MACD、KDJ等:

  1.  
    import talib
  2.  
    def SMA_CN(close, timeperiod):
  3.  
    close = np.nan_to_num(close)
  4.  
    return reduce(lambda x, y: ((timeperiod - 1) * x + y) / timeperiod, close)
  1.  
    import talib
  2.  
    def MACD_CN(close, fastperiod, slowperiod, signalperiod):
  3.  
    macdDIFF, macdDEA, macd = talib.MACDEXT(close, fastperiod=fastperiod, fastmatype=1,slowperiod=slowperiod, slowmatype=1, signalperiod=signalperiod, signalmatype=1)
  4.  
    macd = macd * 2
  5.  
    return macdDIFF, macdDEA, macd
  1.  
    import talib
  2.  
    def RSI_CN(close, timeperiod) :
  3.  
    diff = map(lambda x, y : x - y, close[1:], close[:-1])
  4.  
    diffGt0 = map(lambda x : 0 if x < 0 else x, diff)
  5.  
    diffABS = map(lambda x : abs(x), diff)
  6.  
    diff = np.array(diff)
  7.  
    diffGt0 = np.array(diffGt0)
  8.  
    diffABS = np.array(diffABS)
  9.  
    diff = np.append(diff[0], diff)
  10.  
    diffGt0 = np.append(diffGt0[0], diffGt0)
  11.  
    diffABS = np.append(diffABS[0], diffABS)
  12.  
    rsi = map(lambda x : SMA_CN(diffGt0[:x], timeperiod) / SMA_CN(diffABS[:x], timeperiod) * 100, range(1, len(diffGt0) + 1) )
  13.  
     
  14.  
    return np.array(rsi)
  1.  
    import talib
  2.  
    def KDJ_CN(high, low, close, fastk_period, slowk_period, fastd_period):
  3.  
    kValue, dValue = talib.STOCHF(high, low, close, fastk_period, fastd_period=1, fastd_matype=0)
  4.  
     
  5.  
    kValue = np.array(map(lambda x : SMA_CN(kValue[:x], slowk_period), range(1, len(kValue) + 1)))
  6.  
    dValue = np.array(map(lambda x : SMA_CN(kValue[:x], fastd_period), range(1, len(kValue) + 1)))
  7.  
     
  8.  
    jValue = 3 * kValue - 2 * dValue
  9.  
     
  10.  
    func = lambda arr : np.array([0 if x < 0 else (100 if x > 100 else x) for x in arr])
  11.  
     
  12.  
    kValue = func(kValue)
  13.  
    dValue = func(dValue)
  14.  
    jValue = func(jValue)
  15.  
    return kValue, dValue, jValue