我最近出了一本书,《基于股票大数据分析的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. luogu P5473 [NOI2019]I 君的探险 交互 随机 二分 分治 整体二分

    LINK:I 君的探险 神仙题! 考虑一个暴力的做法 每次点亮一个点 询问全部点 这样询问次数为 \(\frac{n\cdot (n-1)}{2}\) 可以通过前5个点. 考虑都为A的部分分 发现一个 ...

  2. 牛客练习赛64 红色的樱花 exgcd 贪心

    LINK:The red sakura 暴怒狂樱 血染京都. 这题质量不咋地 这题也没啥营养. 不过还是存在值得学习的地方的. 一个trick n行 m列 第一行与第n行相连 第1列和第m列相连的时候 ...

  3. ZROI 提高十连测 Day1

    第一天的提高模拟测 考前特意睡了20min 还是歇菜了,果然自己菜是真实的. 题目质量海星 但是我都不会这是真的...题目由于是花钱买的这里就不放了 LINK:problem 熟悉我的人应该都知道账号 ...

  4. Java不会被淘汰的12个原因

    如今,面对曾经在程序员中被各种新技术掩盖直至堙灭的技术值得怀念.犹如COBOL这当年被老程序员们尊为神器的语言如今也基本没有价值.而Java作为现代程序员的中坚力量在这点上或许会成为下一个COBOL. ...

  5. 【mysql数据库优化】

    sql优化:1.MYSQL逻辑分层 :连接层 服务层 引擎层 存储层 InnoDB(默认) :事务优先 (适合高并发操作:行锁) MyISAM :性能优先 (表锁) 2.sql的执行顺序:SQL : ...

  6. 解决Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no jogl in java.library.path问题

    首先要把jonl.jar和gluegen.jar导入到eclipse中,然后把解压后的4个.dll文件也导入到eclipse中 具体操作: jonl文件下载地址 链接:https://pan.baid ...

  7. Linux系统中玩到让你停不下来的命令行游戏!

    大家好,我是良许. 在使用 Linux 系统时,命令行不仅可以让我们在工作中提高效率,它还可以在生活上给我们提供各种娱乐活动,因为你可以使用它玩许多非常有意思的游戏,这些游戏可都不需要使用专用显卡. ...

  8. Java实现短信验证码

    前言 本人使用的是阿里短信服务,一开始尝试了许多不同的第三方短信服务平台,比如秒滴科技.梦网云通讯.当初开始为什么会选择这两个,首先因为,他们注册就送10元钱(#^.^#),但是后来却发现他们都需要认 ...

  9. python获取系统内存占用信息的实例方法

    psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统监控, ...

  10. Python分析「我们为什么这么穷」