用Python绘制MACD、KDJ、布林线技术指标图

article/2025/9/17 22:35:49

背景介绍:

搭建程序化交易平台的过程需要研究技术指标。

环境:

OS:mac

PYTHON: 3.8

IDE: pycharm

 

步骤:

第一步:加载库

import pandas as pd
import pandas_datareader as web
from datetime import datetime, timedelta
import talib
import matplotlib.pyplot as plt
from mplfinance.original_flavor import candlestick_ohlc
import matplotlib.ticker as ticker

pandas: 处理股票数据

pandas_datareader:行情数据获取api,也可以用tushare或者从新浪等网站获取

datetime:获取日期

talib:生成技术指标

candlestick_ohlc: 绘制蜡烛图

matplotlib.ticker: 设置x轴刻度,如果不设置,matplotlib会将没有交易的日期也显示出来

 

第二步:获取数据

def stock(stock_code): #stock_code是股票代码,例子:上市 "600036.ss", 深市 "000001.sz"start_date = "2019-12-01"  #起始日期today = datetime.date(datetime.now())  #截止日期stock_info = web.get_data_yahoo(stock_code, start_date, today)  #获取行情数据,返回dataframestock_info = stock_info.reset_index()  #默认index是日期,这里要重置一下,为后面绘图做准备stock_info = stock_info.astype({"Date": str})    #将Date列的类型设置为str,为绘图做准备return stock_info

以下是获取招商银行(股票代码 "600036.ss") 的返回结果,一共6列,Date, High, Low, Open, Close, Volumn, Adj Close

 

第三步:获取技术指标数据

def get_indicators(stock_code):# 创建dataframedata = stock(stock_code)#获取macddata["macd"], data["macd_signal"], data["macd_hist"] = talib.MACD(data['Close'])#获取10日均线和30日均线data["ma10"] = talib.MA(data["Close"], timeperiod=10)data["ma30"] = talib.MA(data["Close"], timeperiod=30)#获取rsidata["rsi"] = talib.RSI(data["Close"])return data

talib有各种各样的技术指标,这里只获取了均线,macd和rsi,返回dataframe。

 

第四步:绘图

def plot_chart(data, title):fig = plt.figure()  #创建绘图区,包含四个子图fig.set_size_inches((20, 16))ax_candle = fig.add_axes((0, 0.72, 1, 0.32))   #蜡烛图子图ax_macd = fig.add_axes((0, 0.48, 1, 0.2), sharex=ax_candle)  #macd子图ax_rsi = fig.add_axes((0, 0.24, 1, 0.2), sharex=ax_candle)  #rsi子图ax_vol = fig.add_axes((0, 0, 1, 0.2), sharex=ax_candle)   #成交量子图ohlc = []   #存放行情数据,candlestick_ohlc需要传入固定格式的数据row_number = 0for date, row in data.iterrows():date, highp, lowp, openp, closep = row[:5]ohlc.append([row_number, openp, highp, lowp, closep])row_number = row_number+1date_tickers = data.Date.values #获取Date数据def format_date(x, pos=None):# 由于前面股票数据在 date 这个位置传入的都是int# 因此 x=0,1,2,...# date_tickers 是所有日期的字符串形式列表if x < 0 or x > len(date_tickers) - 1:return ''return date_tickers[int(x)]#绘制蜡烛图ax_candle.plot(data.index, data["ma7"], label="MA7")ax_candle.plot(data.index, data["ma8"], label="MA8")ax_candle.plot(data.index, data["ma25"], label="MA25")candlestick_ohlc(ax_candle, ohlc, colorup="g", colordown="r", width=0.8)ax_candle.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))ax_candle.xaxis.set_major_locator(ticker.MultipleLocator(6)) #设置间隔为6个交易日ax_candle.grid(True)ax_candle.set_title(title, fontsize=20)ax_candle.legend()#绘制MACDax_macd.plot(data.index, data["macd"], label="macd")ax_macd.bar(data.index, data["macd_hist"] * 3, label="hist")ax_macd.plot(data.index, data["macd_signal"], label="signal")ax_macd.set_title('MACD')ax_macd.legend()#绘制RSIax_rsi.set_ylabel("(%)")ax_rsi.plot(data.index, [70] * len(data.index), label="overbought")ax_rsi.plot(data.index, [30] * len(data.index), label="oversold")ax_rsi.plot(data.index, data["rsi"], label="rsi")ax_rsi.set_title('KDJ')ax_rsi.legend()#绘制成交量ax_vol.bar(data.index, data["Volume"] / 1000000)ax_vol.set_ylabel("(Million)")#保存图片到本地fig.savefig("/Users/answer/Desktop/investment/photos/" + title + ".png", bbox_inches="tight")#这里个人选择不要plt.show(),因为保存图片到本地的#plt.show()

第五步:批量绘制

def industry(dict):for key, value in dict.items():# d.iteritems: an iterator over the (key, value) itemsstock_info = get_indicators(key)plot_chart(stock_info, value)

这里传进去的参数是字典,预先定义了目标股票代码。用字典的好处是,能够把股票名称也传进去。

finance_list = {"600036.ss": "Zhaoshang Yinhang","002142.sz": "Ningbo Yinhang","000001.sz": "Pingan Yinhang","601318.ss": "Zhongguo Pingan"
}

下面是恒瑞医药的绘制效果。几个指标清晰可见。

 

其它:

绘图的时候最好把绘图独立窗口关掉

 

Reference:

那未必, 2017, 使用matplotlib绘制k线图(去掉空白日期), https://www.jianshu.com/p/c10e57ccc7ba

Melina Mackey, 2020, Building a Technical Analysis Chart with Python, https://medium.com/analytics-vidhya/building-a-technical-analysis-chart-with-python-17107b78b297


http://chatgpt.dhexx.cn/article/ZEaBlsTH.shtml

相关文章

计算机硬件的主要技术指标

计算机硬件的主要技术指标 机器字长&#xff1a;CPU一次能处理数据的二进制位数。存储容量&#xff1a;存放二进制信息的总位数运算速度运算速度&#xff08;吉普森法&#xff09;图片来源&#xff1a;老师授课PPT 机器字长&#xff1a;CPU一次能处理数据的二进制位数。 1.由运…

技术分析中的五种常见指标

目录 相对强弱指数&#xff08;RSI&#xff09;移动平均线&#xff08;MA&#xff09;平滑异同移动平均线&#xff08;MACD&#xff09;随机相对强弱指数&#xff08;StochRSI&#xff09;布林线指标&#xff08;BB&#xff09; 简介 市场交易者通过对技术指标的分析来确定资…

数字证书是什么?

数字证书作为一种虚拟证书在互联网的传输过程起着至关重要的作用&#xff0c;人们都知道在数字证书作用下&#xff0c;我们的信息隐私得已保护&#xff0c;但是对于数字证书概念&#xff0c;相信大部分都还是一知半解的。接下来&#xff0c;小编将给大家介绍一下数字证书是什么…

数字证书有什么作用?

数字证书是指 CA 机构发行的一种电子文档&#xff0c;是一串能够表明网络用户身份信息的数字&#xff0c;提供了一种在计算机网络上验证网络用户身份的方式&#xff0c;因此数字证书又称为数字标识。CA 中心采用的是以数字加密技术为核心的数字证书认证技术&#xff0c;通过数字…

数字证书再理解

1.基础知识 1.1.公钥密码体制(public-key cryptography) 公钥密码体制分为三个部分&#xff0c;公钥、私钥、加密解密算法&#xff0c;它的加密解密过程如下&#xff1a; 加密&#xff1a;通过加密算法和公钥对内容(或说明文)进行加密&#xff0c;得到密文。加密过程需要用到…

数字证书(CA)的理解

数字证书的理解 前言 「公开密钥加密」和「数字签名」无法保证公开密钥确实来自信息的发送者。因此&#xff0c;就算公开密钥被第三者恶意替换&#xff0c;接收方也不会注意到。数字证书可以完美的解决这一问题&#xff0c;保证公开密钥的正确性。 处理流程图解 A持有公开密…

CA和数字证书

文章目录 1. 什么是CA2. 数字证书能做什么3. 非对称密钥运算原理4. PKCS系列标准4.1 PKCS#14.2 PKCS#74.2 .1 SignedData的结构分析4.2 .2 envelopedData的结构 4.3 数字信封4.4 PKCS#104.4.1 证书请求过程4.4.2 证书验证过程 5. X.509证书简介5.1 证书文件扩展名5.2 证书链和交…

数字证书原理

证书&#xff0c;也叫做数字证书&#xff0c;是网络世界中的“身份证”。证书将持有者的身份信息和公钥关联到一起&#xff0c;保证公钥确实是这个证书持有者的&#xff0c;通过证书就可以确认持有者的身份。证书由权威的、公正的、可信任的第三方机构颁发&#xff0c;我们把证…

数字证书介绍

1.数字证书的分类 1.1按持有者分类 通常依照证书持有者的类型可将证书分为三类&#xff1a;个人证书、单位证书和系统证书。 个人证书&#xff1a;CA中心给个人颁发的证书&#xff0c;仅代表个人身份&#xff0c;证书包含个人信息和个人公钥。 单位证书&#xff1a;CA中心给…

数字证书相关

概念 数字证书 数字身份&#xff08;digital identity&#xff09;是身份标识方式的一种&#xff0c;是一对“钥匙”&#xff0c;其中一个只有她/他本人知道&#xff08;即私钥&#xff09;&#xff0c;另一个是公开的&#xff08;公钥&#xff09;。把数字身份比喻成一个证件…

网站上数字证书原理你知道么?

前言&#xff1a;文中首先解释了加密解密的一些基础知识和概念&#xff0c;然后通过一个加密通信过程的例子说明了加密算法的作用&#xff0c;以及数字证书的出现所起的作用。接着对数字证书做一个详细的解释&#xff0c;并讨论一下windows中数字证书的管理&#xff0c;最后演示…

CA证书(数字证书的原理)

转自&#xff1a;http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html&#xff08;感谢&#xff09; 文中首先解释了加密解密的一些基础知识和概念&#xff0c;然后通过一个加密通信过程的例子说明了加密算法的作用&#xff0c;以及数字证书的出现所起的作用。…

数字签名和数字证书的区别与联系

前言 最近在开发关于PDF合同文档电子签章的功能&#xff0c;大概意思就是在一份PDF合同上签名&#xff0c;盖章&#xff0c;使其具有法律效应。签章有法律效应必须满足两个条件&#xff1a; 能够证明签名&#xff0c;盖章者是谁&#xff0c;无法抵赖PDF合同在签章后不能被更改…

什么是数字证书

整理了几篇关于CA证书的经典文章&#xff1a; 文章目录 一、数字证书二、数字证书原理的形象理解 一、数字证书 什么是数字证书 一文看懂HTTPS、证书机构&#xff08;CA&#xff09;、证书、数字签名、私钥、公钥 二、数字证书原理的形象理解 数字证书原理与自建CA证书 第一…

数字证书

文章目录 前言一、什么是数字证书二、数字证书申请和验证1.证书申请流程2.浏览器如何验证证书 三、KeyTool自签名证书1.生成自签名证书2.导出证书3.查看证书4.构建CA签名证书 总结 前言 本文主要介绍什么是数字证书和如何使用keytool工具常用命令的使用。最后构建自签名证书。…

GCN的Benchmark数据集溯源

前言 GNN领域最经典的论文之一是Kipf同学2016年发布的GCN。 经典的GCN做了四个数据集的实验&#xff0c;后续工作基本会在这4个数据集上也做一次。 但是由于年代久远&#xff0c;和一些历史问题&#xff0c; 后来者想做对比实验难免遇到一些“从哪里获取"与"是这…

GNN学习笔记(四):图注意力神经网络(GAT)节点分类任务实现

目录 0 引言 1、Cora数据集 2、citeseer数据集 3、Pubmed数据集 4、DBLP数据集 5、Tox21 数据集 6、代码 嘚嘚嘚&#xff0c;唠叨小主&#xff0c;闪亮登场&#xff0c;哈哈&#xff0c;过时了过时了&#xff0c;闪亮登场换成大驾光临&#xff0c;哈哈&#xff0c;这样才…

图卷积神经网络GCN之节点分类

使用pytorch 的相关神经网络库&#xff0c; 手动编写图卷积神经网络模型(GCN)&#xff0c; 并在相应的图结构数据集上完成节点分类任务。本次实验的内容如下&#xff1a; 实验准备&#xff1a;搭建基于GPU的pytorch实验环境。数据下载与预处理&#xff1a;使用torch_geometric…

win10下使用pycharm实现基于pyg的cora+citeseer+pubmed数据集的JKNET模型测试

目录 前期准备工作 1、数据集基本情况 2、标准数据集划分方式 3、数据集处理和分析 整体数据分析 cora citeseer pubmed 4、代码参考 GraphSAGE实验结果(代码详细注释) 1、代码结构 2、超参数 3、实验结果(pubmed+mean_pool+sum) 2层SageGCN层 实验补充 3层S…

GraphSAGE模型实验记录(简洁版)【Cora、Citeseer、Pubmed】

1、准备工作 数据集 数据集图节点边特征标签(y)Cora12708542914337Citeseer13327473237036Pubmed119717443385003 数据集划分方式&#xff1a;https://github.com/kimiyoung/planetoid (Zhilin Yang, William W. Cohen, Ruslan Salakhutdinov, Revisiting Semi-Supervised L…