1 引言

做量化分析,难免要将自己的某些指标等绘制在K线图上,或者对某些指标进行改造观察K线图和指标对应的走势关系。那么用Python如何绘制和炒股软件类似的效果呢。

2 准备工具

(1)数据源:Tushare(国内做量化研究高质量数据)

Tushare大数据社区

(2)常用指标计算:Ta-lib (离线下载安装链接如下)

https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib

(3)K线绘图工具:mpl_finance.py (下载链接如下)

https://download.csdn.net/download/yifengdongying/29738748

3 开始工作

3.1 导入依赖包

import mpl_finance
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker
import talib

3.2 编制计算指标的函数

这里只计算了最常见的两个指标MACD、KDJ,量化小伙伴,可以自己进行加工改造,找到适合自己的指标。

# 利用talib计算MACD指标
def macd_cal(df):df['DIFF'], df['DEA'], df['MACD'] = talib.MACD(df['close'].values)df['MACD'] *= 2 #国内MACD需要乘以2return df# 利用talib计算KDJ指标
def kdj_cal(df):df['kdj_k'], df['kdj_d'] = talib.STOCH(df['high'].values,df['low'].values,df['close'].values,fastk_period=9,slowk_period=5,slowk_matype=1,slowd_period=5,slowd_matype=1)  # 计算kdj的正确配置df.loc[:, 'kdj_j'] = 3.0 * df.loc[:, 'kdj_k'] - 2.0 * df.loc[:, 'kdj_d']return df

3.3 编制绘图的函数


# k线绘制
def ax_kline(ax, df):date_tickers = df['trade_date'].valuesdef 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)]date_len = len(df)dateLoc = int(date_len / 10 + 0.5)ax.xaxis.set_major_locator(ticker.MultipleLocator(dateLoc))ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))ax.set_ylabel('K')ax.grid(True)plt.setp(ax.get_xticklabels(), visible=False)mpl_finance.candlestick_ochl(ax=ax,quotes=df[['iNum', 'open', 'close', 'high', 'low']].values,width=0.7,colorup='r',colordown='g',alpha=0.7)ax.set_title('%s' % (df['ts_code'].iloc[0]))# kdj指标绘制
def ax_kdj(ax, df):ax.plot(df['iNum'], df[['kdj_k', 'kdj_d', 'kdj_j']])# make these tick labels invisibleax.set_ylabel('KDJ')ax.grid(True)plt.setp(ax.get_xticklabels(), visible=True)ax.set_title('KDJ:', loc='right')# macd指标绘制
def ax_macd(ax, df):ax.bar(df['iNum'], df['MACD'], color='b')ax.plot(df['iNum'], df[['DIFF', 'DEA']])ax.set_ylabel('MACD')# ax.set_title('MACD_%s_%0.2f'%(df['ts_code'][0],success_rate_macd))ax.grid(True)plt.setp(ax.get_xticklabels(), visible=True)# 绘图主程序
def kplot(df, index):'''df:  数据格式如下(实例): ts_code         000001.SZ  trade_date       20190329open                12.26high                12.82low                 12.21close               12.82pre_close           12.22change                0.6pct_chg              4.91vol           1.66951e+06amount         2.1083e+06DIFF          -0.00807692DEA           -0.00448718MACD          -0.00717949kdj_k             46.7579kdj_d             47.4992kdj_j             45.2753Name: 20190329, dtype: object'''df = df.sort_values('trade_date')df['iNum'] = np.arange(len(df))if index == 'MACD':fig = plt.figure(figsize=[12, 8])ax1 = plt.axes([0.1, 0.3, 0.8, 0.6])ax_kline(ax1, df)ax2 = plt.axes([0.1, 0.1, 0.8, 0.2], sharex=ax1)ax_macd(ax2, df)elif index == 'KDJ':fig = plt.figure(figsize=[12, 8])ax1 = plt.axes([0.1, 0.3, 0.8, 0.6])ax_kline(ax1, df)ax2 = plt.axes([0.1, 0.1, 0.8, 0.2], sharex=ax1)ax_kdj(ax2, df)return fig

3.4 获取K线数据并绘图

if __name__ == '__main__':import tushare as tsts.set_token('********需要用户自己去Tushare注册获取Token链接在第2章******')pro = ts.pro_api()df = ts.pro_bar(api=pro, ts_code='600036.SH', adj='qfq', start_date='20210301')print(df.shape)df = df.sort_values('trade_date')df['iNum'] = np.arange(len(df))df = macd_cal(df)df = kdj_cal(df)df['iNum'] = np.arange(len(df))date_tickers = df['trade_date']fig = kplot(df, 'MACD')plt.show(fig)

4 结果展示

4.1 K线图+MACD

4.2 K线图+KDJ

Python Matplotlib绘制漂亮的K线图,利用Tushare绘制K线图相关推荐

  1. 用matlab对称振子E面方向图,利用matlab绘制电基本振子e面方向图和空间立体方向图.doc...

    利用matlab绘制电基本振子e面方向图和空间立体方向图.doc 微波技术与天线实验报告学院:信电学院班级:通信2班姓名:学号:2014年4月29日1利用matlab绘制电基本振子E面方向图和空间立体 ...

  2. 利用tushare绘制投资组合可行集python代码

    投资组合可行集即风险资产可能形成的所有投资组合的总体,位于可有效边界上或其内部. 本文以包含四支股票的投资组合为例,分别为贵州茅台(600519),中天科技(600522),万科A(000002),上 ...

  3. 用matlab绘制抛物线y的x平方,利用matlab绘制多重x/y曲线

    今天需要画个双x轴曲线.在matlab中有plotyy()函数可方便实现双y轴曲线,而没有现成的plotxx();但是可以利用low_level函数来回绘制,程序如下: %%%%%%%%%%%%%%% ...

  4. 分隔线演练-利用参数增加分隔线的灵活度

    def print_line(char, times):print(char * times)print_line("hi ", 40)

  5. 绘制渐变色扇形图 -基于python - matplotlib 颜色地图plt.cm模块儿

    绘制渐变色扇形图 -基于python - matplotlib 颜色地图cm模块儿         ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔ ...

  6. Java通过JfreeChart生成转Base64图片字符串(饼图、折线图、柱状图、折线图-多条、3D柱状图、气泡图、时序图、曲线图、区域图、分布图、联合分类图、双X轴图、K线图、柱状图-横向等图)

    工具类 CreatLineChart.java package DrawLine;import java.awt.BasicStroke; import java.awt.Color; import ...

  7. Python Matplotlib教程

    Python Matplotlib教程 文章目录 Python Matplotlib教程 教程特点 阅读条件 数据可视化是什么 数据可视化 数据可视化应用场景 Matplotlib是什么 Matplo ...

  8. python Matplotlib库基础

    目录 Matplotlib 数据可视化入门 Pyplot 绘图 自定义配置文件 rcParams 创建绘图窗口 绘制子图 绘制饼图 绘制折线图 绘制条形图 绘制散点图 绘制热点图 绘制箱型图 绘制分类 ...

  9. Python Matplotlib散点图

    Python Matplotlib散点图 散点图用于在水平轴和垂直轴上绘制数据点,它表示了因变量随自变量变化的趋势.通俗地讲,它反映的是一个变量受另一个变量的影响程度. 散点图将序列显示为一组点,其中 ...

最新文章

  1. jquery gridly (拖拽插件)
  2. Python 技术篇-sha256()加密的使用方法,sha1、md5加密方法
  3. 《基于张量网络的机器学习入门》学习笔记7
  4. P4503-[CTSC2014]企鹅QQ【字符串hash】
  5. 格力关联公司公开“菜谱的推荐方法”相关专利
  6. Linux配置防火墙
  7. 如何通过git客户端上传项目到github上
  8. Android进阶之路 - 双端交互之传递Base64图片
  9. 软件测试答疑:抽奖按钮怎么测试?
  10. Matlab画柱状图和饼状图以及横纵坐标设置,宽度设置等
  11. CICD篇-Travis-CI环境搭建
  12. MySQL引用ibd_Linux下使用ibd文件实现MySQL的数据导入和使用
  13. ConstraintLayout实现左中右布局
  14. unity步步生花(触发类互动)
  15. springCloud微服务生态圈囊括—— 服务注册,服务调用,服务降级,熔断。(1)
  16. 【微信小程序】圆环进度条
  17. SAP中库存确定组的应用简析
  18. reghdfe:多维面板固定效应估计
  19. 用MATLAB程序控制伺服电机,使用MATLAB和Arduino开发板进行步进电机控制
  20. 高职高专计算机b级,高职高专英语B级考试真题.docx

热门文章

  1. MySQL中的碎片整理
  2. 工业大数据丨“宝刀”在手,却也要驭刀有术
  3. Phoenix 5.0 hbase 2.0 org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberosKeyTab
  4. 固体力学之非线性、小变形假设
  5. 刀郎:五一夜市的兄弟
  6. pline加点lisp_[下载][原创]非常好用的AutoLisp工具集合(New)
  7. 简单的Web控制树莓派小车
  8. 高防IP的定义与作用
  9. Android 实现护眼模式
  10. 数据库服务器修改地址,SQL数据库服务器IP地址修改