python利用mpl_finance库画股市日k线图
mpl_finance是收集,分析和绘制财务数据的一个python模块,可以用来画蜡烛图,k线图等。
这里用到的行情数据源来自于巨潮资讯网-数据-行情中心:http://webapi.cninfo.com.cn/#/marketData
如下图所示,下载指定行情数据,这里以000001平安银行,日期区间为:2020-01-01到2020-04-24

文件内容如下:

具体实现代码如下
import pandas as pd
import matplotlib.pyplot as plt
import mpl_finance as mpf # 提供计算k线图的函数
from matplotlib.pylab import date2num # 导入日期到数值一一对应的转换工具
import datetime# 1、读取行情数据文件
df_stock = pd.read_csv('000001_SZE.csv',header=0,index_col=None) # header=0表示第一行为列名
# 重置列索引(不然以第一列"证券代码"为列索引,经测试发现会导致读取的列对不上号)
df_stock = df_stock.reset_index(drop=False) # drop=False表示不删除以前的索引,这里以前的索引为读取的第一列(即证券代码)
'''
# 查看索引
#print(df_stock.index.values)
# 保存带索引的列到本地文件
#df_stock.to_csv('bak.csv')
# 查看列信息
#print(df_stock.columns) # Index(['index', '证券代码', '交易日期', '开盘价', '最高价', '最低价', '收盘价', '成交数量(股)', '成交金额(元)'], dtype='object')
# 输出前10行数据
#print((df_stock.head(10)))
'''
# 2、构造传入数据的数据结构quotes
#画k线图需传的参数,包括(交易日时间戳,开盘价,收盘价,最高价,最低价)
quotes = []
# 构造要画k线图的数据结构,获取第一个日期时刻(20200424),将其转为数字值,后面每个日期-1
for i in range(df_stock.shape[0] + 1): # 遍历每行,shape为dataframe大小(x,y),表示x行y列if i == 0:# 将交易日期日期转为数字date_num = date2num(datetime.datetime.strptime(df_stock.ix[[i]].values[0][1],'%Y-%m-%d')) # 1表示第二列,为交易日date_plt = date_numelse:date_plt = date_num - i # 由于csv文件中日期为降序排序,这里为减号#print(df_stock.ix[[i]].values[0]) # 打印每行数据 ['000001-SZE' '2020-04-24' 13.17 13.28 13.11 13.24 56600161 747473770.46 nan]open = df_stock.ix[[i]].values[0][2] # 开盘价: i行第3列 df_stock.iloc[i]['开盘价'],用这个似乎输出了的列对不上,输出成了下一列值(最高价)close = df_stock.ix[[i]].values[0][5] # 收盘价:i行第5列high = df_stock.ix[[i]].values[0][3] # 最高价:i行第4列low = df_stock.ix[[i]].values[0][4] # 最低价:i行第5列datas = (date_plt,open,close,high,low)#print(datas) # (737539.0, 13.17, 13.24, 13.28, 13.11)quotes.append(datas)
# 3、画图
'''
建立一个fig对象,建立一个axis对象,
fig 表示的是要绘制的一个画布,
ax 表示的是在fig这个画布的对象上,具体要绘制的对象子图。
fig,ax = plt.subplots()这一句等同于:
fig=plt.figure()
ax=fig.add_subplot(111) #前面两个1表示1*1个图,后面1表示第一个图
'''
fig, ax = plt.subplots(facecolor=(0, 0.3, 0.6),figsize=(12,8)) # 设置背景颜色,画布大小
fig.subplots_adjust(bottom=0.2) # 设置子图的left,right,top,bootom位置,bottom=0.2是防止x轴下面的值被遮掩
ax.xaxis_date() # 设置X轴刻度为日期时间
plt.xticks(rotation=45) #日期显示的旋转角度
plt.title('000001 pingan bank K-line') # 设置标题
plt.xlabel('time') # 设置x轴名
plt.ylabel('price') # 设置y轴名
# 计算k线图
mpf.candlestick_ochl(ax=ax, # 轴对象quotes=quotes, # 传入的数据,形式:(time, open, close, high, low, ...)width=0.7, # 这里为日k线的宽度colorup='r', # close >= open,则为红色colordown='g', # close < open,则为绿色alpha=0.7
)
plt.grid(True) # 显示网格线
# 显示
plt.show()
这里计算k线图的函数为candlestick_ochl ,还有一个计算函数为candlestick_ohlc
candlestick_ochl 和 candlestick_ohlc,其本质是一样的,只是需要的dataframe中数据的顺序不同。
candlestick_ochl:需要的数据结构为(date,open,close,high,low) 即:日期,开盘价,收盘价,最高价,最低价
candlestick_ohlc:需要的数据结构为(date,open,high,low,close) 即:日期,开盘价,最高价,最低价,收盘价
运行图如下:

对于同花顺上这一段的日k线,大致是一样的

参考资料:
画股市日K线图
https://www.cnblogs.com/pythonicanus/p/9826803.html
获取行列值
https://www.cnblogs.com/Allen-rg/p/9484353.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
