我最近出了一本书,《基于股票大数据分析的Python入门实战 视频教学版》,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ等指标图的绘制方法。此外,还可以用价格通道来分析。根据指定股票通道指标的算法,能用过去一定时间段的交易数据绘制出上下两条通道线,即价格通道里的上下轨道。一般来说,当股价向上突破上轨时,即预测后市将涨,反之当股价向下突破下轨时,即预测后市将跌。

这里将根据若干算法,计算并绘制多种价格通道,从中大家一方面可以积累股市分析的经验,另一方面还能进一步掌握基于pandas的数据分析方法,以及基于matplotlib的可视化技巧。

1  计算并绘制唐奇安通道

唐奇安通道是由上阻力线、下支撑线和中心线这三条线组成。

上阻力线 = 过去N天的最高价

下支撑线 = 过去N天的最低价

中心线 =(上线 + 下线)除以 2

在实际的分析场景里,N的取值一般是20,在如下的DisplayDonChannel.py范例中,就用20天为周期,来计算并绘制唐奇安通道。

    # coding=utf-
import pandas as pd
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ochl
# 读数据
stockDf = pd.read_csv('D:/work/data/ch11/600530.ss.csv')
fig, ax = plt.subplots()
candlestick2_ochl(ax = ax, opens=stockDf["Open"].values, closes=stockDf["Close"].values, highs=stockDf["High"].values, lows=stockDf["Low"].values, width=0.75, colorup='red', colordown='green')
stockDf['up'] = stockDf['High'].rolling(window=).max()
stockDf['up'].plot(color="green",label='上阻力线')
stockDf['down'] = stockDf['Low'].rolling(window=).min()
stockDf['down'].plot(color="navy",label='下支撑线')
stockDf['mid'] = (stockDf['up']+stockDf['down'])/
stockDf['mid'].plot(color="red",label='中心线')
ax.set_ylabel("收盘价(元)")
ax.grid() # 带网格线
ax.legend() # 绘制图例
#设置x轴文字间隔和旋转角度
index=stockDf.index[stockDf.index%==]
xtics=stockDf['Date'][stockDf.index%==]
plt.xticks(index,xtics)
plt.setp(plt.gca().get_xticklabels(), rotation=)
plt.rcParams['font.sans-serif']=['SimHei']
plt.title("600530交大昂立20天唐奇安通道效果图")
plt.show()

在第5行到第8行的代码里,从csv文件里读到了股票交易数据,并通过调用candlestick2_ochl方法绘制了k线图。在第9行里,通过rolling(window=20)方法得到了过去20天的最高价集合,在此基础上通过max()方法得到了过去20天的最高价,随后用第10行的plot方法绘制了上阻力线。

随后用同样的方法,用第11行和第12行的代码计算并绘制了下支撑线。在第13行里,设置了中心线为上阻力线和下支撑线的均值,并在第14行绘制了中心线。

由于在绘制上阻力线、下支撑线和中心线的时候都通过label参数设置了图例,随后在第17行用legend方法绘制了图例效果。为了能更直观地对比数据,所以在第16行里用grid方法设置了网格效果。

这里同样是通过第19行到第22行的代码,设置了x轴文字的间隔以及旋转角度,并在第24行里用title方法设置了标题。为了能显示中文标题,所以还需要加上第23行的语句。运行本范例,能看到如下图所示的效果,由于计算周期是20日,所以之前19日看不到对应的价格通道。而且从图上看,股价均在通道内运动,并没有向上和向下突破的动作,也就是说,从这些天的交易数据里,看不到基于20日唐奇安通道的买卖信号。

2  计算并绘制布林带通道

和上文描述的唐奇安通道类似,布林带通道也是通过上阻力线、下支撑线和中心线来绘制价格通道,这里的三条线算法如下所示。

中心线 = N日移动均线

上阻力线 = 中心线+两倍过去N天收盘价的标准差

下支撑线 = 中心线-两倍过去N天收盘价的标准差

而N的取值一般也是20。在如下的DisplayBollingerBands.py范例中,将演示计算并绘制20日周期布林带通道的做法。

    # coding=utf-
import pandas as pd
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ochl
# 读数据
stockDf = pd.read_csv('D:/work/data/ch11/600530.ss.csv')
fig, ax = plt.subplots()
candlestick2_ochl(ax = ax, opens=stockDf["Open"].values, closes=stockDf["Close"].values, highs=stockDf["High"].values, lows=stockDf["Low"].values, width=0.75, colorup='red', colordown='green')
stockDf['mid'] = stockDf['Close'].rolling(window=).mean()
stockDf['std'] = stockDf['Close'].rolling(window=).std()
stockDf['up'] = stockDf['mid'] + *stockDf['std']
stockDf['down'] = stockDf['mid'] - *stockDf['std']
stockDf['up'].plot(color="green",label='上阻力线')
stockDf['down'].plot(color="navy",label='下支撑线')
stockDf['mid'].plot(color="red",label='中心线')
ax.set_ylabel("收盘价(元)")
ax.grid() # 带网格线
ax.legend() # 绘制图例
#设置x轴文字间隔和旋转角度
index=stockDf.index[stockDf.index%==]
xtics=stockDf['Date'][stockDf.index%==]
plt.xticks(index,xtics)
plt.setp(plt.gca().get_xticklabels(), rotation=)
plt.rcParams['font.sans-serif']=['SimHei']
plt.title("600530交大昂立20天布林带通道效果图")
plt.show()

本范例和之前的唐奇安通道的范例很相似,区别主要集中在第9行到第15行。在第9行里,先用rolloing和 mean方法计算过去20天的均值,以此作为中心线,再通过第10行的rolling和std方法,计算过去20天收盘价的标准差,在此基础上再通过第11行和第12行的代码计算上阻力线和下支撑线。

完成计算后,是通过第13行到第15行的plot方法绘制三条线,同时用label参数设置了图例。运行本范例,能看到如下图所示的效果。其中布林带通道的宽度是由过去20天收盘价的标准差决定,也就是说,如果过去20天收盘价波动比较大,那么布林带通道就比较宽,反之就比较狭窄。而且,虽然有个别价格向上或向下突破通道,但未形成“有效突破”,所以后期价格依然在通道内波动,由此大家能感受到“上阻力线”和“下支撑线”的“阻力”和“支撑”效果。

3  计算并绘制鳄鱼组线

鳄鱼组线其实不属于价格通道指标,但也是通过三条线来研判股价的走势,在鳄鱼组线里,三条线分别叫上唇、牙齿和下颚,具体算法如下所述。

上唇线是5天周期的价格平滑移动平均线( SMMA ),向未来延后3天,也就是说第8天才会开始展示上唇线,上唇线一般用绿线绘制。

牙齿线是由8天周期的价格平滑移动平均线,向未来延后5天,一般用红线绘制。

下颚线由13天周期的价格平滑移动平均线向未来延后8天,一般用蓝色绘制。

这里的平滑移动平均线SMMA也叫流畅移动平均线,这里以5天周期为例,讲下具体的算法。

第1个SMMA值(即第5天的平滑平均值) = 前五天收盘价的均价

第6天的值 = (该周期内收盘价的和 –第1个SMMA值 + 第6天的收盘价)/5

第7天的值 = (该周期内收盘价的和 – 第2个SMMA值 + 第7天的收盘价)/5

依次类推,第n天的值 = (该周期内收盘价的和 –上个SMMA值 + 第n日收盘价)/5

这里的算法涉及到计算平滑移动平均线,在如下的DisplayCrocodileLines.py范例中,就将演示用pandas库计算相关数值,并用matplotlib绘制鳄鱼组线的做法。

    # coding=utf-
import pandas as pd
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ochl
#计算各种SMMA值
def setSMMAVal(df, period):
for i in range(len(df)):
if i<period:
df['SMMA' + str(period)] = df.ix[i,'MA'+ str(period)]
else: #按算法计算SMMA值
df.ix[i,'SMMA'+ str(period)]=df.ix[i,'MA'+ str(period)] + (df.ix[i,'Close'] - df.ix[i-,'SMMA'+ str(period)])/period
return df

在第6行的setSMMAVal方法里,是根据参数period指定的周期,计算各种SMMA值。具体而言,在第7行的for循环里,如果当前遍历的索引号小于周期值,则设置SMMA值为当天的MA均值,否则的话,则通过第11行的代码,按SMMA的算法,计算当天的值。

请注意这里的列名是动态拼接的,比如在第9行,如果当前参数是5,那么其实是用df['MA5'] 的值来填充df['SMMA' + str(period)]值。

    #计算三条鳄鱼组线
def setCrocodileVal(df):
# 用shift方法,把数据顺延
df['up'] = df['SMMA5'].shift()
df['mid'] = df['SMMA8'].shift()
df['down'] = df['SMMA13'].shift()
return df

在得到SMMA的值以后,可以通过第14行的setCrocodileVal方法来计算3条鳄鱼组线的值,这里的技巧是shift方法,比如在第16行里,是用df['SMMA5'].shift(3)代码,把当天的SMMA5值向后顺延3天,以此设置上唇线的值。在第17行和第18行里,也是用shift方法,顺延对应的SMMA值,得到牙齿线和下颚线的值。

    # 读数据
stockDf = pd.read_csv('D:/work/data/ch11/600530.ss.csv')
#算均值
stockDf['MA5'] = stockDf['Close'].rolling(window=).mean()
stockDf['MA8'] = stockDf['Close'].rolling(window=).mean()
stockDf['MA13'] = stockDf['Close'].rolling(window=).mean()
#算三个SMMA值
stockDf = setSMMAVal(stockDf, )
stockDf = setSMMAVal(stockDf, )
stockDf = setSMMAVal(stockDf, )
#计算三个鳄鱼组线的值
stockDf = setCrocodileVal(stockDf)

通过第21行的代码得到csv里股票数据后,先通过第23行到第25行的代码,计算5天、8天和13天的均价,并通过第27行到第29行的代码计算三个SMMA值,随后再通过第31行的代码计算三个鳄鱼组线的值,至此完成计算,在后文里开始绘图。

    fig, ax = plt.subplots()
#为了突出三条组线,设置了透明度为0.
candlestick2_ochl(ax = ax, opens=stockDf["Open"].values, closes=stockDf["Close"].values, highs=stockDf["High"].values, lows=stockDf["Low"].values, width=0.75, colorup='red',alpha=0.5, colordown='green')
#绘制三条组线
stockDf['up'].plot(color="green",label='上唇线')
stockDf['down'].plot(color="red",label='牙齿线')
stockDf['mid'].plot(color="blue",label='下颚线')
ax.set_ylabel("收盘价(元)")
ax.grid() # 带网格线
ax.legend() # 绘制图例
#设置x轴文字间隔和旋转角度
index=stockDf.index[stockDf.index%==]
xtics=stockDf['Date'][stockDf.index%==]
plt.xticks(index,xtics)
plt.setp(plt.gca().get_xticklabels(), rotation=)
plt.rcParams['font.sans-serif']=['SimHei']
plt.title("600530交大昂立鳄鱼组线效果图")
plt.show()

在第36行到第38行的代码里,是通过plot方法绘制了三条鳄鱼组线,同时通过color参数分别设置了颜色,通过label参数设置了图例。其他的可视化代码之前都已经分析过,这里就不再讲述了。运行本范例,能看到如下图所示的效果。

由于在绘制K线图时通过alpha参数设置了透明度,所以这里三条鳄鱼组线更加明显。

按照股市分析理论,如果上唇线在牙齿线之上,同时牙齿线在下颚线之上,说明当前进入股价上升阶段。如果相反,上唇线在牙齿线之下,而牙齿线在下颚线之下,则说明股价进入下跌阶段。如果上图那样三条线相互交错缠绕,则通过该指标说明当前市场没有发出明确的买卖交易信号。不过本范例的主题是数据分析,所以请更关注计算三条线时用到的相关python方法。

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

文本相关链接:

用Python的Pandas和Matplotlib绘制股票唐奇安通道,布林带通道和鳄鱼组线的更多相关文章

  1. 用Python的Pandas和Matplotlib绘制股票KDJ指标线

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

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

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

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

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

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

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

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

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

  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. text输入框

    https://blog.csdn.net/renhong20121314/article/details/51906555

  2. java基础(七)--基本类型转换

    一.转换规则 1.类型转换的原则是: 小容量可以自动转成大容量,大容量转成小容量,需要强制转换,有些类型之前不能转换 判断以下语句是否符合要求 2.默认的识别数字 整数默认->int 浮点数默认 ...

  3. 论文阅读 ORBSLAM3

    这周末ORB-SLAM3出现了.先看了看论文.IMU部分没细看,后面补上. Abstract 视觉,视觉惯导,多地图SLAM系统 支持单目/立体/RGBD相机 支持pinhole/鱼眼相机 基于特征/ ...

  4. 第五章 泛型&集合

    5.1.泛型 概述:泛型是是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型,它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 泛型类: // ...

  5. PHP date_sunset() 函数

    ------------恢复内容开始------------ 实例 返回葡萄牙里斯本今天的日落时间: <?php// Lisbon, Portugal:// Latitude: 38.4 Nor ...

  6. PHP sscanf() 函数

    实例 Parse a string: <?php高佣联盟 www.cgewang.com$str = "age:30 weight:60kg";sscanf($str,&qu ...

  7. C/C++编程笔记:C++入门知识丨认识C++面向过程编程的特点

    一. 本篇要学习的内容和知识结构概览 二. 知识点逐条分析 1. 使用函数重载 C++允许为同一个函数定义几个版本, 从而使一个函数名具有多种功能, 这称之为函数重载. 像这样: 虽然函数名一样, 但 ...

  8. 每日一道 LeetCode (5):最长公共前缀

    前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee: https://gitee.com ...

  9. 基于IDEA 代码提交Git

    基于IDEA 代码提交Git 步骤 1 创建一个项目 2 点击 VCS --> Import init Version Control --> Create Git Repository ...

  10. kubernetes监控prometheus配置项解读

    前言 文中解决两个问题: 1. kubernetes官方推荐的监控 prometheus 的配置文件, 各项是什么含义 2. 配置好面板之后, 如换去配置 grafana 面板 当然这两个问题网上都有 ...