收藏 分销(赏)

基于Python的股票行情图绘制.pdf

上传人:自信****多点 文档编号:2102848 上传时间:2024-05-16 格式:PDF 页数:3 大小:1.51MB
下载 相关 举报
基于Python的股票行情图绘制.pdf_第1页
第1页 / 共3页
基于Python的股票行情图绘制.pdf_第2页
第2页 / 共3页
基于Python的股票行情图绘制.pdf_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、2023年12 月计算机应用文摘第39 卷第2 3期基于Python的股票行情图绘制刘华煜(洛阳师范学院数学科学学院,河南洛阳47 19 34)摘要:股票行情图是买卖股票的必备工具。Python因为有着众多的包而无所不能。文章将Python作为开发语言,利用baostock获取股票数据,并通过matplotlib和mplfinance进行绘图,从而实现股票行情图的绘制。关键词:股票行情图;Python;b a o s t o c kLIU Huayu中图法分类号:TP311(Faculty of Mathematical Sciences,Luoyang Normal University,L

2、uoyang,Henan 471934,China)Abstract:The stock market chart is an essential tool for buying and selling stocks.Python isomnipotent due to its numerous packages.This article uses Python as the development language,uses baostock to obtain stock data,and plots it using Matplotlib and mplfinance to achiev

3、e thedrawing of stock market charts.Key words:stock price chart,Python,baostock1引言股票行情图的绘制可分为两个步骤,即获取股票历史数据和按照历史数据绘图。本文将利用baostock获取股票历史数据,并用matplotlib 和mplfinance实现绘图。利用Python获取股票数据的方法较多,许多包都支持股票数据的获取,如tushare,yfinance,akshare,dtshare 以及本文要用到的 baostock。b a o s t o c k 是一个免费开源Python财经数据接口包,主要实现股票等金融

4、数据的数据采集、清洗加工及数据存储,能够为金融分析人员提供快速、整洁、多样且便于分析的数据,可以极大地减少数据获取的工作量,有助于金融分析人员更加专注地研究并实现策略和模型。作为Python中类似MATLAB的绘图工具之一,matplotlib是Python中最受欢迎的数据可视化软件包之一 1。matplotlib 的 pyplot 子库支持绘制简单的行情图,但它无法绘制如蜡烛图一般复杂的行情图。mplfinance是一个基于Python的财务数据可视化库,可以便捷地实现各种复杂图形的绘制,如蜡烛图、技术分析指标图、仓位分布直方图等 2 32用baostock获取股票历史数据使用baostoc

5、k首先要登录,登录代码如下:import baostock as bs文献标识码:AStockprice chart plotting based on Pythonbs.login()baostock 的query_history_k_data_plus函数可以用来获取指定股票的各种历史数据,它的用法是query_history_k_data_plus(code,fields,start,end,frequency,adjustflag)。其中,code 是股票代码或指数代码;fields是以逗号分隔的字符串,表达要返回该股票的各类数据;start是开始日期(含),格式为“YYYY-MM-D

6、D;end是结束日期(含),格式为“YYYY-MM-DD;frequency表达获取的数据维度是天、月或分钟等;adjustflag表达的是复权类型;query_history_k_data_plus返回值类型是baostock.data.resultset.ResultData 类型。获取中国石油历史数据的示例代码如下:rs=bs.query_history_k_data_plus(sh.601857,date,open,high,low,close,volume,2021-01-01,2021-12-31,d,3)以上代码获取中国石油(代码sh.601857对应中国石油)在2 0 2 1全

7、年以天为单位的开盘价、最高价、最低价、收盘价以及成交量。其中,frequency为 d代表以天为单位,adjustflag为3代表不复权。由于绘图参照的数据必须是属于pandas 包的DataFrame 类型数据,rs(b a o s t o c k.d a t a.r e s u l t s e t.ResultData类型)需转换为DataFrame类型,相关代码如下:import pandas as pd4.054result_list=while(rs.error_code=0)&rs.next():result_list.append(rs.get_row_data()result=

8、pd.DataFrame(result_list,columns=rs.fields)第2 4行通过送代器逐条读取baostock.data.resultset.ResultData中的数据,然后将取出的数据加人result_list列表中。第 5行将 result_list 列表转换为DataFrame类型。由于result_list列表中不包含DataFrame需要的列名,而rs.fields存储的是获取数据的具体含义(如 date、o p e n )列表,本文通过将参数columns赋值为rs.fields,即可为result赋予正确的列名。通过 print(result.head())

9、即可查看以下result 的结构:date02021-01-0412021-01-0522021-01-0632021-01-0742021-01-08从结果可以看出,result 的每行都代表中国石油某天的各种价格以及成交量,其中1月1日至1月3日不是交易日,因此没有相关数据。baostock使用完毕后需要进行注销,注销代码如下:bs.logout()3用matplotlib 绘制折线图若只需关注股票的大致走势,那么可以针对股票收盘价绘制行情图,即绘制收盘价的折线图。可通过matplotlib.pyplot 的plot函数绘制折线图,其用法如下:plot(X,Y)其中,X和Y分别为点的横坐标

10、集合和纵坐标集合。用matplotlib绘制股票行情图的代码如下:import matplotlib.pyplot as pltresult date=pd.to_datetime(result.date)resultclose=resultclose.astype(float)plt.plot(result.date,result.close,color=blue)plt.show()由于baostock返回的数据类型都是字符串型,需要将字符串转换为时间型和浮点型,代码运行后产生的图如图1所示。若用户要求在观察股票行情图的同时观察上证/深证指数,可利用matplotlib 的子图模式进行实现

11、。创建子图的函数是 subplots,以创建上下两个子计算机应用文摘图为例,其用法如下:fig,(axl,ax2)=plt.subplots(2,1,figsize=(8,8)其中,subplots 第一个参数是行数,第二个参数是列数,这行代码创建2 行1列的子图,即创建上下两个子图,subplots返回值中的ax1和ax2代表上边的子图和下边的子图。Figure16.56.05.55.04.5openhigh4.1500 4.20004.14004.1900969071134.1700 4.18004.13004.1800818516114.2000 4.26004.20004.250013

12、86651564.2500 4.25004.19004.25001130851334.2500 4.30004.24004.29001524212902023年第2 3期口Xlowclosevolume2021-012021-032021-052021-072021-092021-112022-01图1中国石油收盘价折线图在创建子图后,就可以在第一个子图中绘制中国石油的行情图:axl.plot(result.date,result.close,color=blue)然后用类似方式获得上证指数的历史数据,在第二个子图中绘制上证指数的行情图并显示整个图:ax2.plot(result.date,r

13、esult.close,color=blue)plt.show()代码运行后产生的图如图2 所示。Figure16.56.05.55.04.54.02021-01370036503600355035003450340033502021-01图2 中国石油、上证指数对照折线图4用mplfinance绘制蜡烛图matplotlib的蜡烛图绘制较为烦琐,因此可利用x=2021-06 y=5.7402021-032021-052021-032021-05口2021-072021-092021-072021-092021-112021-11x-2021-10y3559.2022-012022-01202

14、3年第2 3期mplfinance 进行绘制。mplfinance 的plot函数可以绘制蜡烛图,其用法如下:plot(data,type=candle)type表达的是图的类型,若要绘制蜡烛图,需将其赋值为candle。d a t a 是DataFrame类型,由于此时要绘制蜡烛图,所以data必须包含date,o p e n,h i g h,low,close列,其中date 是索引列。plot还有一个可选参数volume,如果它的值是True,那么会在蜡烛图的下方绘制成交量图。当volume的值为True时,data必须包含volume列,使用mplfinance的plot函数绘制蜡烛图

15、的示例代码如下:import mplfinance as mpfresultdate=pd.to_datetime(result.date)for col in rs.fields 1:result col =result col .astype(float)result=result.set_index(date)mpf.plot(result,type=candle,volume=True)第2 一4行代码将result相关列转换为时间型和浮点型。由于plot 函数要求date 是索引列,第5行需将date设置成索引,代码运行后产生的图如图3所示。Figure1计算机应用文摘plt.sho

16、w()第1行代码产生上下两个子图,第2 行代码在第一个子图中绘制中国石油蜡烛图,其中r1是中国石油的历史数据,namel是通过baostock包的query_stock_basic 函数得到的股票名,可通过 ylabel=namel 将股票名称显示在Y轴上。第3行代码在第二个子图中绘制上证指数的蜡烛图,参数类似。第4行确保matplotlib.pyplot中可以正确显示中文,代码运行后产生的图如图4所示。Figure14.64.54.4联空国中434.24137503700-3650360035503500345034003350-口55口4.64.54.44.24.190T400enion2

17、00为使蜡烛图清晰可见,本文选取的数据范围为2021年1月1日至2 0 2 1年3月31日。若需同时显示中国石油和上证指数的蜡烛图,可以使用matplotlib.pyplot 的子图功能,其示例代码如下:fig,(axl,ax2)=plt.subplots(2,1,figsize=(8,8)mpf.plot(rl,type=candle,ax=axl,ylabel=name1)mpf.plot(r2,type=candle,ax=ax2,ylabel=name2)plt.rcParams font.sans-serif=SimHei图4中国石油与上证指数的对照蜡烛图5结束语通过baostock

18、可以获取股票各种数据,将数据整理成pandas包的DataFrame类型后,再通过matplotlib和mplfinance进行绘图,就可以得到完美的股票行情图。本文对基于Python的股票行情图绘制进行了研究,该研究成果可以同时绘制成交量图,能实现多股图3中国石油蜡烛图对比、单股与上证/深证指数对比等,可作为股票决策判断工具。参考文献:1 刘大成.Python数据可视化之matplotlib精进M.北京:电子工业出版社,2 0 19.2江雪松,邹静.Python数据分析M.北京:清华大学出版社,2 0 2 0.3】SWEIG A R T A.Py t h o n 编程快速上手M.王海鹏,译.北京:人民邮电出版社,2 0 2 1.作者简介:刘华煜(19 7 6 一),硕士,讲师,研究方向:计算机应用。

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 论文指导/设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服