700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python实现KDJ指标模型 量化策略 python 策略开发

python实现KDJ指标模型 量化策略 python 策略开发

时间:2021-10-28 10:43:59

相关推荐

python实现KDJ指标模型 量化策略 python 策略开发

指标说明

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=span1self._span2 = span2self._span3 = span3self._ldatalist = []self._hdatalist = []self._rsvlist=[]self._kdj_k=[]self._kdj_d = []self._kdj_j = []self._kdj_k_list=[]@propertydef span1(self):return self._span1@propertydef span2(self):return self._span2@propertydef span3(self):return self._span3def 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) * 100self._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:]=100if int(kdj_k_median[-1:])<0:kdj_k_median[-1:]=0self._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_dif self._kdj_jm>100:self._kdj_j=100if self._kdj_jm<0:self._kdj_j=0self._kdj_j=self._kdj_jmreturn [self._kdj_k,self._kdj_d,self._kdj_j]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。