import tushare as ts
import mplfinance as mpf
from pylab import mpl
import pandas as pd
pro = ts.pro_api('')
#https://tushare.pro/user/token
df = pro.daily(ts_code='600519.SH', start_date='20200101', end_date='20250319')
之后可以输出得到的股票数据
#df.sort_values(by='trade_date',ascending=False)
#取所有行数据,后面取date列,open列等数据
data = df.loc[:, ['trade_date', 'open', 'close', 'high', 'low', 'vol']]
data = data.rename(columns={'trade_date': 'Date', 'open': 'Open', 'close': 'Close', 'high': 'High', 'low': 'Low', 'vol': 'Volume'}) #更换列名,为后面函数变量做准备
#设置date列为索引,覆盖原来索引,这个时候索引还是 object 类型,就是字符串类型。
data.set_index('Date', inplace=True)
#将object类型转化成 DateIndex 类型,pd.DatetimeIndex 是把某一列进行转换,同时把该列的数据设置为索引 index。
data.index = pd.DatetimeIndex(data.index)
#将时间顺序升序,符合时间序列
data = data.sort_index(ascending=True)
# pd.set_option()就是pycharm输出控制显示的设置,下面这几行代码其实没用上,暂时也留在这儿吧
pd.set_option('expand_frame_repr', False)#True就是可以换行显示。设置成False的时候不允许换行
pd.set_option('display.max_columns', None)# 显示所有列
#pd.set_option('display.max_rows', None)# 显示所有行
pd.set_option('colheader_justify', 'centre')# 显示居中
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams["figure.figsize"] = [6.4, 4.8]
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
mpf.plot(data, type='candle', mav=(5, 10, 20), volume=True, show_nontrading=False)
得到折线图
绘制股票K线图、均线图、成交量柱状图,以万科为例。
fig, axes = plt.subplots(2, 1, sharex=True, figsize=(15,8))
ax1, ax2 = axes.flatten()
# 绘制第一张子图:K线图和均线图
mpf.candlestick_ochl(ax1, df_arr, width=0.6, colorup = 'r', colordown = 'g', alpha=1.0)
ax1.plot(df_arr[:,0], df['MA5']) # 绘制5日均线
ax1.plot(df_arr[:,0], df['MA10']) # 绘制10日均线
ax1.set_title('万科A') # 设置子图标题
ax1.set_ylabel('价格') # 设置子图Y轴标签
ax1.grid(True)
ax1.xaxis_date()
# 绘制第二张子图:成交量图
ax2.bar(df_arr[:,0], df_arr[:,5]) # 绘制成交量柱状图
ax2.set_xlabel('日期') # 设置子图X轴标签
ax2.set_ylabel('成交量') # 设置子图Y轴标签
ax2.grid(True)
ax2.xaxis_date()
其中第1-2行代码利用2.3.2节绘制多图相关知识点先构造一个画布和两个子图,这里同时设置sharex参数为True,这样两张子图就可以共用一个坐标轴了;第4-13行绘制第一张子图,其中在子图中设置标题或者坐标轴标题得使用set_title()、set_ylabel()、set_xlabel()这样的函数;第15-20行绘制第二张子图:成交量图,其中df_arr[:,0]表示二维数组的第1列。