开发平台

Anaconda Navigator (Anaconda3)

Jupyter

所用到库

import mplfinance as mpf
import tushare as ts
import pandas as pd
import numpy as np
import datetime
import talib as tb

Tushare获取股票数据

token='您的token'
ts.set_token(token)
pro=ts.pro_api()
  • 在Tushare大数据社区注册用户获得token来获取tushare权限。
  • 通过ts.pro_api()来调用tushare数据接口。
def get_stock(num):stock=num#设置查询时间————一个月today = datetime.datetime.today()startday=today+datetime.timedelta(days=-365)today = today.strftime('%Y%m%d')startday =startday.strftime('%Y%m%d')#获取股票数据stock_df = pro.daily(ts_code=stock, start_date=startday,end_date=today)#将trade_date转换为时间格式stock_df['trade_date'] = pd.to_datetime(stock_df['trade_date'])#倒序排列 iloc[::-1]stock_df=stock_df.iloc[::-1]#将列vol改为volumestock_df=stock_df.rename(columns={'vol':'volume'})#保存为csv文件,不保存索引stock_df.to_csv('%s.csv'%stock,index=False)#读取csv文件,将trade_date作为行索引stock_df=pd.read_csv('%s.csv'%stock,index_col=1)#将索引转为时间格式stock_df.index = pd.to_datetime(stock_df.index)return stock_df
  • stock=num 获取股票代码,这里num输入的形式必须是 股票代码.SZ/SH。SZ:深交所;SH:上交所
  • 设置查询时间节点,这里是查看今天起过去一年的数据。
  • 通过datetime.datetime.today()获取今天的时间,过去一年以today+datetime.timedelta(days=-365)方式获取。
  • 设置today和starday 日期以年月日显示形式——如20211201。
  • 获取股票数据,pro.daily(ts_code=stock, start_date=startday,end_date=today) 输入stock股票代码、start_date查询起始日期、end_date查询结束日期,获取日线行情,返回是一个DataFrame数据。
  • 对stock_df日线行情数据进行清洗与优化,这里操作分别是将列trade_date时转换为时间格式、让收据倒序排列、将列vol改名为volume(因为mplfinance.plot需要的一个参数列名为volume)。
  • 保存为csv文件后再重新读取文件(可以不操作这步,我这边是为了留存线下数据)。
  • 封装成函数get_stock(num),返回stock数据。
stock_df = get_stock('000543.SZ')
stock_df.head()
  • 获取股票代码信息,下图为返回数据

用Talib计算相关技术指标

MACD

#MACD
macd, macdsignal, macdhist = tb.MACD(stock_df['close'], fastperiod=12, slowperiod=26, signalperiod=9)
macd=pd.DataFrame(macd,columns=['0'])
macdsignal=pd.DataFrame(macdsignal,columns=['0'])
macdhist=pd.DataFrame(macdhist,columns=['0'])
  • 调用Talib的MACD函数,以股票每天收盘价 列close 为计算依据,设置的参数是12、26、9,返回三个数据分别是macd、macdsignal、macdhist。
  • 把macd、macdsignal、macdhist转为DataFrame。
  • 在此解析一下MACD的理论:

MACD在应用上应先行计算出快速(一般选12日)移动平均值与慢速(一般选26日)移动平均值。以这两个数值作为测量两者(快速与慢速线)间的“差离值”依据。所谓“差离值”(DIF),即12日EMA数值减去26日EMA数值。因此,在持续的涨势中,12日EMA在26日EMA之上。其间的正差离值(+DIF)会愈来愈大。反之在跌势中,差离值可能变负(-DIF),此时是绝对值愈来愈大。至于行情开始回转,正或负差离值要缩小到一定的程度,才真正是行情反转的信号。MACD的反转信号界定为“差离值”的9日移动平均值(9日DIF)。

KDJ

#KDJslowk, slowd =tb.STOCH(stock_df['high'], stock_df['low'],stock_df['close'], fastk_period=9, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
slowk=pd.DataFrame(slowk,columns=['0'])
slowd=pd.DataFrame(slowd,columns=['0'])
slowj=3*slowk['0'] -2*slowd['0']
slowj=pd.DataFrame(slowj,columns=['0'])
  • 调用Talib的STOCH函数,以股票每天最高价(列high)、最低价(列low)、收盘价(列close)  为计算依据,设置的参数是9、3、0、3、0,返回两个数据分别是slowk、slowd
  • 把slowk、slowdt转为DataFrame。
  • 计算slowj(即J线)公式是3K-2D,所得结果转为DataFrame。
  • 在此解析一下KDJ的理论:

随机指标KDJ一般是用于股票分析的统计体系,根据统计学原理,通过一个特定的周期(常为9日、9周等)内出现过的最高价、最低价及最后一个计算周期的收盘价及这三者之间的比例关系,来计算最后一个计算周期的未成熟随机值RSV,然后根据平滑移动平均线的方法来计算K值、D值与J值,并绘成曲线图来研判股票走势。

RSI

#RSI
rsi=tb.RSI(stock_df.open, timeperiod=12)
rsi=pd.DataFrame(rsi_df,columns=['0'])
  • 调用Talib的RSI函数,以股票每天开盘价(列open)为计算依据,设置的参数是12,返回数据分别是rsi。
  • 把rsi转为DataFrame。
  • 在此解析一下RSI的理论:

相对强弱指标RSI是根据一定时期内上涨点数和下跌点数之和的比率制作出的一种技术曲线。能够反映出市场在一定时期内的景气程度。

使用Mplfinance画出图表

#设置mplfinance的蜡烛颜色
#up为阳线颜色
#down为阴线颜色
my_color = mpf.make_marketcolors(up='darkslateblue',down='limegreen',edge='inherit',wick='inherit',volume='inherit'
)# 设置图形风格
# figcolor:设置图表的背景色
# y_on_right:设置y轴位置是否在右
# gridaxis:设置网格线位置
# gridstyle:设置网格线线型
# gridcolor:设置网格线颜色
my_style = mpf.make_mpf_style(marketcolors=my_color,figcolor='#EEEEEE',y_on_right=False,gridaxis='both', gridstyle='-.',gridcolor='#E1E1E1'
)# 设置基本参数
# type:绘制图形的类型,有candle, renko, ohlc, line等
# 此处选择candle,即K线图
# mav(moving average):均线类型,此处设置5,10,30日线
# volume:布尔类型,设置是否显示成交量,默认False
# title:设置标题
# y_label:设置纵轴主标题
# y_label_lower:设置成交量图一栏的标题
# figratio:设置图形纵横比
# figscale:设置图形尺寸(数值越大图像质量越高)
#datetime_format:设置日期显示格式
#xrotation:设置x坐标的转角度
kwargs = dict(type='candle', mav=(5,10,30), volume=True, title='%s'%(stock_df.iloc[0,0]),    ylabel='Price', ylabel_lower='Volume', figratio=(1200/72,480/60), figscale=3,datetime_format='%Y-%m-%d',xrotation=0
)
  • 初始化图表样式,建议使用kwargs字典传参。
#设置配图
add_plot = [mpf.make_addplot(macdhist.tail(60),type='bar',panel=2,ylabel='MACD',color='darkslateblue'),mpf.make_addplot(macd.tail(60),panel=2,color='orangered'),mpf.make_addplot(macdsignal.tail(60),panel=2,color='limegreen'),mpf.make_addplot(rsi.tail(60),panel=3,ylabel='RSI'),mpf.make_addplot(slowk.tail(60),panel=4,color='darkslateblue',ylabel='KDJ'),mpf.make_addplot(slowd.tail(60),panel=4,color='limegreen'),mpf.make_addplot(slowj.tail(60),panel=4,color='orangered')
]
  • mplfinance需要添加曲线需要调用函数make_addplot设置附加图表数据,通过panel分配曲线所在不同的区域,默认K线条是panel0、成交量图是panel1,紧接MACD是panel2,RSI是panel3,KDJ是panel4。
mpf.plot(stock_df.tail(60),**kwargs,addplot=add_plot,style=my_style)
  • 画出主图,效果如下。

  • 这里使用的配色是EVA初号机的配色,各位也可以根据自己喜好设置配色。
  • Jupyter默认是显示静态图,如果想显示动态图,可以加 %matplotlib qt5 这句代码。

完整代码

import mplfinance as mpf
import tushare as ts
import pandas as pd
import numpy as np
import datetime
import talib as tb%matplotlib qt5token='您的token'
ts.set_token(token)
pro=ts.pro_api()def get_stock(num):stock=num#设置查询时间————一个月today = datetime.datetime.today()startday=today+datetime.timedelta(days=-365)today = today.strftime('%Y%m%d')startday =startday.strftime('%Y%m%d')#获取股票数据stock_df = pro.daily(ts_code=stock, start_date=startday,end_date=today)#将trade_date转换为时间格式stock_df['trade_date'] = pd.to_datetime(stock_df['trade_date'])#倒序排列 iloc[::-1]stock_df=stock_df.iloc[::-1]#将列vol改为volumestock_df=stock_df.rename(columns={'vol':'volume'})#保存为csv文件,不保存索引stock_df.to_csv('%s.csv'%stock,index=False)#读取csv文件,将trade_date作为行索引stock_df=pd.read_csv('%s.csv'%stock,index_col=1)#将索引转为时间格式stock_df.index = pd.to_datetime(stock_df.index)return stock_dfstock_df = get_stock('000543.SZ')#设置mplfinance的蜡烛颜色
#up为阳线颜色
#down为阴线颜色
my_color = mpf.make_marketcolors(up='darkslateblue',down='limegreen',edge='inherit',wick='inherit',volume='inherit'
)# 设置图形风格
# figcolor:设置图表的背景色
# y_on_right:设置y轴位置是否在右
# gridaxis:设置网格线位置
# gridstyle:设置网格线线型
# gridcolor:设置网格线颜色
my_style = mpf.make_mpf_style(marketcolors=my_color,figcolor='#EEEEEE',y_on_right=False,gridaxis='both', gridstyle='-.',gridcolor='#E1E1E1'
)# 设置基本参数
# type:绘制图形的类型,有candle, renko, ohlc, line等
# 此处选择candle,即K线图
# mav(moving average):均线类型,此处设置5,10,30日线
# volume:布尔类型,设置是否显示成交量,默认False
# title:设置标题
# y_label:设置纵轴主标题
# y_label_lower:设置成交量图一栏的标题
# figratio:设置图形纵横比
# figscale:设置图形尺寸(数值越大图像质量越高)
#datetime_format:设置日期显示格式
#xrotation:设置x坐标的转角度
kwargs = dict(type='candle', mav=(5,10,30), volume=True, title='%s'%(stock_df.iloc[0,0]),    ylabel='Price', ylabel_lower='Volume', figratio=(1200/72,480/60), figscale=3,datetime_format='%Y-%m-%d',xrotation=0
)#RSI
rsi=tb.RSI(stock_df.open, timeperiod=12)
rsi=pd.DataFrame(rsi_df,columns=['0'])#MACD
macd, macdsignal, macdhist = tb.MACD(stock_df['close'], fastperiod=12, slowperiod=26, signalperiod=9)
macd=pd.DataFrame(macd,columns=['0'])
macdsignal=pd.DataFrame(macdsignal,columns=['0'])
macdhist=pd.DataFrame(macdhist,columns=['0'])#KDJslowk, slowd =tb.STOCH(stock_df['high'], stock_df['low'],stock_df['close'], fastk_period=9, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
slowk=pd.DataFrame(slowk,columns=['0'])
slowd=pd.DataFrame(slowd,columns=['0'])
slowj=3*slowk['0'] -2*slowd['0']
slowj=pd.DataFrame(slowj,columns=['0'])#设置配图
add_plot = [mpf.make_addplot(macdhist.tail(60),type='bar',panel=2,ylabel='MACD',color='darkslateblue'),mpf.make_addplot(macd.tail(60),panel=2,color='orangered'),mpf.make_addplot(macdsignal.tail(60),panel=2,color='limegreen'),mpf.make_addplot(rsi.tail(60),panel=3,ylabel='RSI'),mpf.make_addplot(slowk.tail(60),panel=4,color='darkslateblue',ylabel='KDJ'),mpf.make_addplot(slowd.tail(60),panel=4,color='limegreen'),mpf.make_addplot(slowj.tail(60),panel=4,color='orangered')
]mpf.plot(stock_df.tail(60),**kwargs,addplot=add_plot,style=my_style)

附matplotlib配色表matplotlib颜色表 - FINTHON

创作不易,码代码也不易,感谢鼓励!!

Python+tushare+talib+mplfinance制作股票K线条和技术指标相关推荐

  1. python通过新 mplfinance 模块绘制 k 线图

    python通过新 mplfinance 模块绘制 k 线图 最近绘制 k 线图发现mplfinance从matplotlib中独立出来了,作为一个单独的模块,并且可以直接使用Pandas 的Data ...

  2. python pyplot k线图_量化之路-python绘图-使用matplotlib绘制股票K线图(附代码)

    最近不知道在瞎忙什么,学习速度有点慢,更新也比较少,需要反思一下. 在学习完python爬虫和获取股票数据技能后,接下来需要将数据输出称为图形,以便查看趋势,以及分析趋势. 重新梳理下需要学会的技能步 ...

  3. python 对数坐标_python3绘制股票K线图--pyQtgraph绘制精美股票K线图--之对数坐标(log Y)呈现...

    之前尝试使用mplfinance库做了K线图的呈现.感觉不是很理想,又找到了这个pyQtgraph库,网络上已经有一些人做了K线图的呈现,但是并不满意.主要是对于经常看盘的人来说,图形呈现的特征很重要 ...

  4. python tushare获取股票数据_Python 金融: TuShare API 获取股票数据 (1)

    多多教Python 金融 是我为金融同行,自由职业投资人 做的一个专栏.这里包含了我自己作为量化交易员,在做研究时所用到的Python技巧和实用案例.这个栏目专业性会比较强:本人29岁,量化工作5年的 ...

  5. 使用 Python 生成股票 K 线图

    引言 在股票分析中,经常需要用到 K 线图来分析股票的价格波动情况和交易量情况.本文将介绍如何使用 Python 和 pyecharts 库生成股票 K 线图,并将其保存为 HTML 文件. 准备数据 ...

  6. python蜡烛图预测_python tushare股票K线蜡烛图绘制

    序言:学着学着就学到股票图形绘制了,尝试了下,入门蛮简单的,后面就不知道了,现在好像mplfinance更换了新版本,老版本不支持了.以下代码能实现单个股票K线蜡烛图图形输出,不过我用的是tushar ...

  7. python tushare mpf 画股票k线图

    在 Python3 环境下使用 Python2 代码时,碰到了如下的语句: #import matplotlib.finance as mpf 需要安装 pip install mpl_finance ...

  8. Python量化投资——mplfinance最佳实践:动态交互式高级K线图(蜡烛图)【源码+详解】

    用mplfinance实现全功能动态交互式K线图 手把手用`python`+mplfinance实现高级K线图 ` mplfinance`的基本K线图 目标 实现自定义风格和颜色 图表尺寸调整.相关信 ...

  9. Python量化投资——mplfinance实现全功能动态交互式K线图(蜡烛图)【源码+详解】

    用python实现全功能动态交互式K线图 手把手用`python`一步步实现动态交互式K线图 ` mplfinance`的基本K线图 目标 实现自定义风格和颜色 图表尺寸调整.相关信息的显示 添加完整 ...

最新文章

  1. 微信jssdk ajax 获取签名,【Golang版】微信access_token、jsapi_ticket、signature签名算法生成示例,开箱即用...
  2. STL库中string类内存布局的探究
  3. 多年前那些优秀的工程师,后来都去哪儿了?
  4. 【c++算法刷题笔记】——洛谷2
  5. Aspcms框架的webshell
  6. 数据挖掘—Apriori算法(Java实现)
  7. DirectX API 编程起步 #01 项目设置
  8. Tricks(十九)—— 获得 list of lists 每一列的最大最小值
  9. HDU 5410 CRB and His Birthday
  10. 三菱FX3U 485ADP与东元TECO变频器N310通讯程序
  11. 如何计算虚拟化vcpu_【虚拟化实战】VM设计之一vCPU
  12. 中国外显子组测序行业市场供需与战略研究报告
  13. ASP.NET 安全认证(一)—— 如何运用 Form 表单认证 (摘自 http://blog.csdn.net/cityhunter172)
  14. PhantomJS+Selenium+Scrapy抓取巨潮资讯网企业信息
  15. 中国计算机网络设备制造业总体趋势免费版,致自己的心灵鸡汤说说,句句经典,引人深思!...
  16. Microsoft.SQL.Server.2005 (32位) SP2 简体中文企业版
  17. element-ui中轮播图自适应图片高度
  18. 第一个计算出地球周长的人——埃拉托色尼
  19. 诺宝机器人制作过程_深圳诺宝机器人教案
  20. 让机器读懂人类:探索问答系统和机器阅读理解

热门文章

  1. 如何将旧硬盘数据完美迁移到新硬盘
  2. Nodejs学习计划
  3. Linux下按照行数切割文件
  4. 《猎场》有硬伤!独家揭秘硅谷高管的招募日常
  5. python turtle画海绵宝宝,python还能这么玩?帅呆了
  6. 微信红包文案怎么写吸引人,520发红包感想
  7. java应用程序占用高内存_对Java应用程序中的内存问题进行故障排除
  8. mysql 外键约束
  9. java map遍历顺序_深入理解HashMap遍历元素的顺序
  10. mysql远程访问慢的解决小妙招