KDJ 指標(biāo)簡單實(shí)現(xiàn)

今天測試使用KDJ的時(shí)候,發(fā)現(xiàn)talib上沒有這個(gè)方法。于是,找公式準(zhǔn)備自己實(shí)現(xiàn)一遍。

KDJ指標(biāo)又叫隨機(jī)指標(biāo),是一種短線指標(biāo),它是由KD指標(biāo)發(fā)展而來的。

實(shí)現(xiàn)步驟

KDJ的實(shí)現(xiàn)步驟主要分成三步:
1、先計(jì)算“未成熟隨機(jī)值”,即RSV


image.png

2、求出當(dāng)日的K值和D值(即計(jì)算出RSV值的3日指數(shù)移動(dòng)平均

image.png

3、計(jì)算出J值

J = 3 * D - 2 * K

KDJ簡單理解

1、RSV線過于起伏不定,為此根據(jù)MA原理,以RSV線為基礎(chǔ),生成一條相對平滑的K線
2、K線是RSV的3日移動(dòng)平均線,D線是K線的3日移動(dòng)平均線

KDJ的實(shí)現(xiàn)

talib上雖然沒有KDJ指標(biāo)的實(shí)現(xiàn),不過,它實(shí)現(xiàn)了KD指標(biāo)。我們只需要稍微加點(diǎn)邏輯就可以實(shí)現(xiàn)KDJ指標(biāo)。如下:

def talib_KDJ(data, fastk_period=9, slowk_period=3, slowd_period=3):
    indicators={}
    #計(jì)算kd指標(biāo)
    high_prices = np.array([v['high'] for v in data])
    low_prices = np.array([v['low'] for v in data])
    close_prices = np.array([v['close'] for v in data])
    indicators['k'], indicators['d'] = talib.STOCH(high_prices, low_prices, close_prices, 
                                                   fastk_period=fastk_period, 
                                                   slowk_period=slowk_period, 
                                                   slowd_period=slowd_period)
    indicators['j'] = 3 * indicators['k'] - 2 * indicators['d']
    return indicators

在剛開始使用talib計(jì)算KD指標(biāo)時(shí),我不是很理解fastk_periodslowk_periodslowd_period這三個(gè)參數(shù)是用來干啥的。如果只是傳一個(gè)周期,那只需要一個(gè)參數(shù)就行了。而且,我自己實(shí)現(xiàn)了KDJ,發(fā)現(xiàn)計(jì)算出來的值并不相同。

后來,看到下面內(nèi)容,我才知道talib對KD指標(biāo)的具體實(shí)現(xiàn),如下:


image.png

上面的FASTK就是RSV,而SLOWK就是K線,SLOWD就是D線,那參數(shù)就知道了:

  • flask_period: 計(jì)算RSV的周期
  • slowk_period: K線是由RSV的幾日移動(dòng)平均線得到
  • slowd_period: D線是由K線的幾日移動(dòng)平均得到

為了驗(yàn)證正確性,我重新實(shí)現(xiàn)了下KDJ,用數(shù)據(jù)進(jìn)行驗(yàn)證。我實(shí)現(xiàn)的KDJ如下:

def self_KDJ(data, fastk_period=9, slowk_period=3, slowd_period=3):
    #計(jì)算kd指標(biāo)
    high_prices = np.array([v['high'] for v in data])
    low_prices = np.array([v['low'] for v in data])
    close_prices = np.array([v['close'] for v in data])
    fast_k = RSV(data, fastk_period)
    slow_k = talib.MA(np.array(fast_k), timeperiod=slowk_period)
    slow_d = talib.MA(slow_k, timeperiod=slowd_period)
    indicators= {
        'k': slow_k,
        'd': slow_d,
        'j': 3 * slow_k - 2 * slow_d
    }
    return indicators

對應(yīng)的數(shù)據(jù):


image.png

talib對應(yīng)KD計(jì)算出的結(jié)果:


image.png

自己實(shí)現(xiàn)的KDJ的結(jié)果:
image.png

除了前部分默認(rèn)數(shù)據(jù)不一致外,從后面計(jì)算出結(jié)果值可以看出,我們實(shí)現(xiàn)KDJ與talib一樣。

最后

今天查找KDJ公式時(shí),發(fā)現(xiàn)最后的J值公式有兩種。一種是J = 3 * K - 2 * D,另外一種是J = 3 * D - 2 * K。后來,使用幣安專業(yè)版和Okex的指標(biāo)工具時(shí),發(fā)現(xiàn)它們都是使用第一種方式,于是選擇了第一種。

參考

隨機(jī)指標(biāo)

KDJ指標(biāo)

量化投資學(xué)習(xí)【TA-LIB】之STOCH(KD指標(biāo))

talib.STOCH計(jì)算出的K值和D值,與通達(dá)信的有些許差異,是何原因

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容