指标说明
KDJ指标中文名叫随机指标,是一种相当新颖、实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具。
随机指标KDJ一般是用于股票分析的统计体系,根据统计学原理,通过一个特定的周期(常为9日、9周等)内出现过的最高价、最低价及最后一个计算周期的收盘价及这三者之间的比例关系,来计算最后一个计算周期的未成熟随机值RSV,然后根据平滑移动平均线的方法来计算K值、D值与J值,并绘成曲线图来研判股票走势。
KDJ计算公式
KDJ的计算比较复杂,首先要选择周期(n日、n周等),再计算当天的未成熟随机值(即RSV值),然后再计算K值、D值、J值等。
(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值。
'''
作者:Leo
微信:470770753
名称:KDJ指标
参数:span1,span2,span3分别代表三个数据的计算跨度
说明:输出格式:[k ,d,j]
'''
class kdj(object):
'''
名称:KDJ指标
参数:span1,span2,span3分别代表三个数据的计算跨度
说明:输出格式:[k ,d,j]
'''
def __init__(self,span1,span2,span3):
self._span1=span1
self._span2 = span2
self._span3 = span3
self._ldatalist = []
self._hdatalist = []
self._rsvlist=[]
self._kdj_k=[]
self._kdj_d = []
self._kdj_j = []
self._kdj_k_list=[]
@property
def span1(self):
return self._span1
@property
def span2(self):
return self._span2
@property
def span3(self):
return self._span3
def cal_kdj(self,data,ldata,hdata):
self._ldatalist.append(ldata)
self._hdatalist.append(hdata)
self._ldatalist=self._ldatalist[-self._span1:]
self._hdatalist = self._hdatalist[-self._span1:]
ldataresult=min(self._ldatalist)
hdataresult = max(self._hdatalist)
rsv = (data - ldataresult) / (hdataresult - ldataresult) * 100
self._rsvlist.append(rsv)
rsv_series=pd.Series(self._rsvlist)
kdj_k_median=rsv_series.ewm(ignore_na=False, com=(self._span2-1), min_periods=0, adjust=False).mean()
if int(kdj_k_median[-1:])>100:
kdj_k_median[-1:]=100
if int(kdj_k_median[-1:])<0:
kdj_k_median[-1:]=0
self._kdj_k=float(kdj_k_median[-1:])
self._kdj_k_list.append(float(kdj_k_median[-1:]))
kdj_k_series=pd.Series(self._kdj_k_list)
kdj_dm=kdj_k_series.ewm(ignore_na=False, com=(self._span3-1), min_periods=0, adjust=False).mean()
self._kdj_d=float(kdj_dm[-1:])
self._kdj_jm=3*self._kdj_k-2*self._kdj_d
if self._kdj_jm>100:
self._kdj_j=100
if self._kdj_jm<0:
self._kdj_j=0
self._kdj_j=self._kdj_jm
return [self._kdj_k,self._kdj_d,self._kdj_j]