背景
对交易数据的多种技术指标进行分析是技术分析的主要手段,通过代码实现对多支标的或全市标的进行多周期,多维度的分析与监控,是交易工具的常见功能。常见的指标有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三列数据。