我最近出了一本书,《基于股票大数据分析的Python入门实战 视频教学版》,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ等指标图的绘制方法。这里将根据KDJ的算法,计算并绘制KDJ指标线。

1  KDJ指标的计算过程

KDJ指标也叫随机指标,是由乔治·蓝恩博士(George Lane)最早提出的。该指标集中包含了强弱指标、动量概念和移动平均线的优点,可以用来衡量股价脱离正常价格范围的偏离程度。

KDJ指标的计算过程是,首先获取指定周期(一般是9天)内出现过的股票最高价、最低价和最后一个交易日的收盘价,随后通过它们三者间的比例关系来算出未成熟随机值RSV,并在此基础上再用平滑移动平均线的方式来计算K、D和J值。计算完成后,把KDJ的值绘成曲线图,以此来预判股票走势,具体的算法如下所示。

    第一步:计算周期内(n日、n周等,n一般是9)的RSV值,RSV也叫未成熟随机指标值,是计算K值、D值和J值的基础。以n日周期计算单位为例,计算公式如下所示。

n日RSV =(Cn-Ln)/(Hn-Ln)× 100

其中,Cn是第n日(一般是最后一日)的收盘价,Ln是n日范围内的最低价,Hn是n日范围内的最高价,根据上述公式可知,RSV值的取值范围是1到100。如果要计算n周的 RSV值,则Cn还是最后一日的收盘价,但Ln和Hn则是n周内的最低价和最高价。

    第二步:根据RSV计算K和D值,方法如下。

当日K值 = 2/3 × 前一日K值 + 1/3 × 当日的RSV值

当日D值 = 2/3 × 前一日D值 + 1/3 × 当日K值

在计算过程中,如果没有前一日K 值或D值,则可以用数字50来代替。

在实际使用过程中,一般是以9日为周期来计算KD线,根据上述公式,首先是计算出最近9日的RSV值,即未成熟随机值,计算公式是9日RSV = (C-L9)÷(H9-L9)× 100。其中各项参数含义在步骤一中已经提到,其次再按本步骤所示计算当日的K和D值。

需要说明的是,上式中的平滑因子2/3和1/3是可以更改的,不过在股市交易实践中,这两个值已经被默认设置为2/3和1/3。

    第三步:计算J值。J指标的计算公式为:J = 3×K - 2×D。从使用角度来看,J的实质是反映K值和D值的乖离程度,它的范围上可超过100,下可低于0。

最早的KDJ指标只有K线和D线两条线,那个时候也被称为KD指标,随着分析技术的发展,KD指标逐渐演变成KDJ指标,引入J指标后,能提高KDJ指标预判行情的能力。

在按上述三个步骤计算出每天的K、D和J三个值之后,把它们连接起来,就可以看到KDJ指标线了。

2 绘制静态的KDJ指标线

根据上节给出的KDJ算法,在下面的drawKDJ.py范例程序中将绘制股票“金石资源”(股票代码为603505)从2018年9月到2019年5月这段时间内的KDJ走势图。

 !/usr/bin/env python
# coding=utf-
import matplotlib.pyplot as plt
import pandas as pd
# 计算KDJ
def calKDJ(df):
df['MinLow'] = df['Low'].rolling(, min_periods=).min()
# 填充NaN数据
df['MinLow'].fillna(value = df['Low'].expanding().min(), inplace = True)
df['MaxHigh'] = df['High'].rolling(, min_periods=).max()
df['MaxHigh'].fillna(value = df['High'].expanding().max(), inplace = True)
df['RSV'] = (df['Close'] - df['MinLow']) / (df['MaxHigh'] - df['MinLow']) *
# 通过for循环依次计算每个交易日的KDJ值
for i in range(len(df)):
if i==: # 第一天
df.ix[i,'K']=
df.ix[i,'D']=
if i>:
df.ix[i,'K']=df.ix[i-,'K']*/ + /*df.ix[i,'RSV']
df.ix[i,'D']=df.ix[i-,'D']*/ + /*df.ix[i,'K']
df.ix[i,'J']=*df.ix[i,'K']-*df.ix[i,'D']
return df

从第6行到第22行程序语句定义的calKDJ方法中,将根据输入参数df,计算指定时间范围内的KDJ值。

具体的计算步骤是,在第8行中通过df['Low'].rolling(9, min_periods=9).min(),把每一行(即每个交易日)的 'MinLow' 属性值设置为9天内收盘价(Low)的最小值。

如果只执行这句,第1到第8个交易日的MinLow属性值将会是NaN,所以要通过第9行的程序代码,把这些交易日的MinLow属性值设置为9天内收盘价(Low)的最小值。同理,通过第10行的程序代码,把每个交易日的 'MaxHigh' 属性值设置为9天内的最高价,同样通过第11行的fillna方法,填充前8天的 'MaxHigh' 属性值。随后在第12行中根据算法计算每个交易日的RSV值。

在算完RSV值后,通过第14行的for循环,依次遍历每个交易日,在遍历时根据KDJ的算法分别计算出每个交易日对应的KDJ值。

请注意,如果是第1个交易日,则在第16行和第17行的程序代码中把 K值和D值设置为默认的50,如果不是第1交易日,则通过第19行和第20行的算法计算K值和D值。计算完K和D的值以后,再通过第21行的程序代码计算出每个交易日的J值。

从上述代码中,可以看到关于DataFrame对象的三个操作技巧:

第一,如第9行所示,如果要把修改后的数据写回到DataFrame中,必须加上inplace = True的参数;

第二,在第12行中,df['Close']等变量值是以列为单位,也就是说,在DataFrame中,可以直接以列为单位进行操作;

第三,在第16行的代码df.ix[i,'K']=50,这里用到的是ix通过索引值和标签值来访问对象,而实现类似功能的loc和iloc方法只能通过索引值来访问。

 绘制KDJ线
def drawKDJ():
df = pd.read_csv('D:/stockData/ch8/6035052018-09-012019-05-31.csv',encoding='gbk')
stockDataFrame = calKDJ(df)
print(stockDataFrame)
# 开始绘图
plt.figure()
stockDataFrame['K'].plot(color="blue",label='K')
stockDataFrame['D'].plot(color="green",label='D')
stockDataFrame['J'].plot(color="purple",label='J')
plt.legend(loc='best') # 绘制图例
# 设置x轴坐标的标签和旋转角度 major_index=stockDataFrame.index[stockDataFrame.index%==]
major_xtics=stockDataFrame['Date'][stockDataFrame.index%==]
plt.xticks(major_index,major_xtics)
plt.setp(plt.gca().get_xticklabels(), rotation=)
# 带网格线,且设置了网格样式
plt.grid(linestyle='-.')
plt.title("金石资源的KDJ图")
plt.rcParams['font.sans-serif']=['SimHei']
plt.show()
# 调用方法
drawKDJ()

在第24行的drawKDJ方法中实现了绘制KDJ的操作。其中的关键步骤是,通过第25行的程序代码从指定的csv文件中读取股票交易数据,随后在第30行到第32行的程序代码中,调用plot方法分别用三种不同的颜色绘制了KDJ线,因为在绘制时通过label参数设置了标签,所以可以执行第33行的程序代码来绘制图例。

在第34行到第37行的代码中设置了x轴的文字标签和旋转角度,这部分代码与之前绘制MACD指标线的代码很相似,为了不在x轴上过多地显示日期,于是用stockDataFrame.index%10 == 0的方式,只显示索引值是10的倍数的日期。

在第44行调用了drawKDJ方法将KDJ绘制出来。运行这个范例程序之后,即可看到如图所示的结果,其中KDJ三根曲线分别用蓝色、绿色和紫色绘制出来(因为本书采用黑白印刷而看不出彩色,请读者在自己的计算机上运行这个范例程序)。

下图是从股票软件中得到的股票“金石资源”在同时间段内的KDJ走势图,两者的变化趋势基本一致。

本文可以转载,转载时请全文转载,别有删节,并用链接的形式给出原文链接。否则的话,可能会遇到出版社的维权。

文本相关链接:

用Python的Pandas和Matplotlib绘制股票KDJ指标线的更多相关文章

  1. 用Python的Pandas和Matplotlib绘制股票唐奇安通道,布林带通道和鳄鱼组线

    我最近出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ ...

  2. 用matplotlib和pandas绘制股票MACD指标图,并验证化交易策略

    我的新书<基于股票大数据分析的Python入门实战>于近日上架,在这篇博文向大家介绍我的新书:<基于股票大数据分析的Python入门实战>里,介绍了这本书的内容.这里将摘录出部 ...

  3. 【转】使用Python matplotlib绘制股票走势图

    转载出处 一.前言 matplotlib[1]是著名的python绘图库,它提供了一整套绘图API,十分适合交互式绘图.本人在工作过程中涉及到股票数据的处理如绘制K线等,因此将matplotlib的使 ...

  4. python基础入门:matplotlib绘制多Y轴画图(附源码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:屁屁酱 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  5. 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)

    在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...

  6. Python学习(一) —— matplotlib绘制三维轨迹图

    在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作. 一. Ubuntu下Python的使用 在Ubuntu下使用Python有 ...

  7. Python:matplotlib绘制线条图

    线型图是学习matplotlib绘图的最基础案例.我们来看看具体过程:  下面我们将两条曲线绘制到一个图形里:   可以看到这种方式下,两个线条共用一个坐标轴,并且自动区分颜色. plot方法的核心是 ...

  8. python使用matplotlib绘制折线图教程

    Matplotlib是一个Python工具箱,用于科学计算的数据可视化.借助它,Python可以绘制如Matlab和Octave多种多样的数据图形.下面这篇文章主要介绍了python使用matplot ...

  9. Python——使用matplotlib绘制柱状图

    Python——使用matplotlib绘制柱状图 1.基本柱状图           首先要安装matplotlib(http://matplotlib.org/api/pyplot_api.htm ...

随机推荐

  1. 4.2 省选模拟赛 旅行路线 广义SAM

    \(n\leq 100000\) 题目上求出 多少条本质不同的路线. 首先定义了 相似的城市为度数相同的城市. 还定义了两条路线相同当且仅当长度相同 且对应位置的城市都是相似的. 考虑这张图的形态 n ...

  2. 服务治理框架dubbo中zookeeper的使用

    Zookeeper提供了一套很好的分布式集群管理的机制,就是它这猴子那个几月层次型的目录树的数据结构,并对书中的节点进行有效的管理,从而可以设计出多种多样的分布式的数据管理模型:下面简要介绍下zook ...

  3. 我的强迫症系列之@Builder和建造者模式

    前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...

  4. 苹果挖矿恶意程序处理(OSX/CoinMiner.X)

    背景 近期通过流量告警发现多起外连矿池的告警,均外连至43.249.204.231 威胁情报信息如下: 系统表象 1.通过ps -ef|grep osascript发现在/library/Launch ...

  5. URL中加号(+)转义问题

    URL中加号(+)转义问题 前端通过URL传入一个参数,在后台日志中发现参数中的加号变成了空格. 前端传入a+b 后台日志a b 可以看到,+ 变成了空格. 先说结论 HTTP为了避免歧义,一些字符传 ...

  6. 2020-05-26:TCP四次挥手过程?

    福哥答案2020-05-26:

  7. C#LeetCode刷题之#202-快乐数(Happy Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3856 访问. 编写一个算法来判断一个数是不是"快乐数& ...

  8. 四博智慧物联系统入门示例-1.增加一个DHT11温湿度传感器

    1.准备工作 DOIT农业控制开发板或者esp32模组,并下载 四博智慧物联系统快速入门-2.准备工作 章节中的固件 DHT11连接在端口01 使用快速入门注册的管理账号和用户 2.配置网络 3.绑定 ...

  9. 使用BERT进行情感分类预测及代码实例

    文章目录 0. BERT介绍 1. BERT配置 1.1. clone BERT 代码 1.2. 数据处理 1.2.1预训练模型 1.2.2数据集 训练集 测试集 开发集 2. 修改代码 2.1 加入 ...

  10. 对于python装饰器结合递归的进一步理解

    对于python装饰器结合递归的进一步理解 代码如下: import functools def memoize(fn): print('start memoize') known = dict() ...