pandas 生成KDJ指标

背景

对交易数据的多种技术指标进行分析是技术分析的主要手段,通过代码实现对多支标的或全市标的进行多周期,多维度的分析与监控,是交易工具的常见功能。常见的指标有JDK、MACD、OBV、RSA、MTM等,也可以自已根据需要开发属于自已的旨标。

思路

JDK的算法:

(1) RSV的计算公式为:

公式中,

C为当天的收盘价;

Ln为之前n日内的最低价;

Hn为之前n日内的最高价。

(2) 某一天的K值=2/3×前一日K值+1/3×当日RSV,即

Ki和RSVi分别表示某一天当天的K值和RSV值;

Ki-1表示前一天的K值,若无前一天的K值,则用50来代替。

(3) 某一天当天的D值=2/3×前一日D值+1/3×当日K值,即

Di和Ki分别表示当天的D值和K值;

Di-1表示前一天的D值,若无前一天的D值,则用50来代替。

(4) J值=3×当日K值-2×当日D值,即

实现

利用pandas的相关特性实现非常简单:

    def read_kdj(self, stock_dat, win1=3, win2=3, win3=21):
        low_list = stock_dat['low'].rolling(win3, min_periods=1).min()
        high_list = stock_dat['high'].rolling(win3, min_periods=1).max()
        rsv = (stock_dat['close'] - low_list) / (high_list - low_list) * 100
        stock_dat['K'] = rsv.ewm(com=win1, adjust=False).mean()
        stock_dat['D'] = stock_dat['K'].ewm(com=win2, adjust=False).mean()
        stock_dat['J'] = 3 * stock_dat['K'] - 2 * stock_dat['D']
        return stock_dat

这段代码会直接为stock_dat 添加上K、D、J三列数据。

你可能感兴趣的:(pandas,python)