目录

1 股票K线图知识了解

2 用Python绘制股票K线图

2.1 安装绘制K线图的mpl_finance库

2.2 引入相关库

2.3 用Tushare库获取股票基本数据

2.4 日期格式调整及表格转换

2.5 绘制K线图

2.6 添加均线图

2.7 添加每日成交量柱形图


1 股票K线图知识了解

下图所示为“贵州茅台”股票的日线级别的K线图:

K线图中的柱形通常称为“K线”,因为形似蜡烛,所以也称为蜡烛图。

K线是根据股票的4个价格绘制的:

        开盘价(当天上午9:30开始交易时的价格)、

        收盘价(当天下午3:00结束交易时的价格)、

        最高价(当天股价波动中的最高价)、

        最低价(当天股价波动中的最低价)。

这4个价格分别简称为“高”“开”“低”“收”

K线分为两种:

        如果当天的收盘价高于开盘价,即当天的价格上涨,称为阳线,通常绘制成红色;

        如果当天的收盘价低于开盘价,即当天的价格下跌,则称为阴线,通常绘制成绿色;

        补充说一句,在美国的股票市场上,反而是用红色代表跌,用绿色代表涨。

K线图中的折线称为“均线”

均线分为5日均线(MA5)、10日均线(MA10)、20日均线(MA20)等,其绘制原理是对一定时期内股票的收盘价求平均值。

例如,要绘制5日均线,就要先计算最近连续5个交易日收盘价的平均值,具体的计算公式如下,其中Close1为当天的收盘价,Close2为前一天的收盘价,依次类推。

根据上述公式,每个交易日都能算出一个5日均价,再把多个交易日的5日均价连成一条平滑的曲线,就是5日均线。10日均线和20日均线也是用类似的原理绘制的。

2 用Python绘制股票K线图

2.1 安装绘制K线图的mpl_finance库

命令行窗口或者Jupyter Notebook:

pip install https://github.com/matplotlib/mpl_finance/archive/master.zip

2.2 引入相关库

import tushare as ts
import matplotlib.pyplot as plt
import mpl_finance as mpf
import seaborn as sns

2.3 用Tushare库获取股票基本数据

通过Tushare库获取股票代码为“000002”的股票“万科A”在2019-06-01至2019-09-30的股价数据,代码如下。

df = ts.get_k_data('000002','2019-06-01','2019-09-30')

获取到的数据部分截图如下。

2.4 日期格式调整及表格转换

因为绘制K线图的candlestick_ochl()函数只能读取数组格式的数据,并且其中的日期数据要为特定的数字格式,所以需要将前面获取的股票基本数据调整一下,代码如下。

# 导入调整日期格式涉及的两个库
from matplotlib.pylab import date2num
import datetime

# 将Tushare库中获取到的日期数据转换成candlestick_ochl()函数可读取的格式
def date_to_num(dates):
    num_time = []
    for date in dates:
        date_time = datetime.datetime.strptime(date,'%Y-%m-%d')
        num_date = date2num(date_time)
        num_time.append(num_date)
    return num_time

# 将DataFrame转换为二维数组,并利用date_to_num()函数转换日期格式
df_arr = df.values  #将DataFrame格式的数据转换为二维数组
# df_arr
df_arr[:,0] = date_to_num(df_arr[:,0])  #将二维数组中的日期转换成数字格式

查看调整后的部分数据:

可以看到DataFrame格式的二维表格变为二维数组,且date列的内容由文本格式的日期变为数字格式的日期。

2.5 绘制K线图

fig,ax = plt.subplots(figsize=(15,6))
mpf.candlestick_ochl(ax,df_arr,width=0.6,colorup='r',colordown='g',alpha=1.0)
plt.grid() #显示网格
ax.xaxis_date()  #设置x轴的刻度格式为常规日期格式

2.6 添加均线图

以添加5日均线和10日均线为例,首先通过如下代码构造5日均线和10日均线的数据。

df['MA5'] = df['close'].rolling(5).mean()
df['MA10'] = df['close'].rolling(10).mean()

通过rolling()函数和mean()函数可以直接算出均线数据,若要计算20日或30日均线的数据,只需将rolling()函数中的参数换成20或30。

查看此时数据:

可以看到,代表5日均线数据的MA5列前4行为空值,这是因为5日均线数据是取连续5个交易日的收盘价来计算平均值,而前4行数据不足,也就无法计算,所以为空值;同理,MA10列的前9行也为空值,到第10行才开始有数据。

获取到5日均线和10日均线的数据后,即可将其绘制成图表,代码如下。

plt.rcParams['font.sans-serif'] = ['SimHei']  #设置正常显示中文
fig,ax = plt.subplots(figsize=(15,6))
mpf.candlestick_ochl(ax,df_arr,width=0.6,colorup='r',colordown='g',alpha=1.0)
plt.plot(df_arr[:,0],df['MA5'])
plt.plot(df_arr[:,0],df['MA10'])

plt.grid()
ax.xaxis_date()

plt.title('万科A')
plt.xlabel('日期')
plt.ylabel('价格')

2.7 添加每日成交量柱形图

在商业实战中,与股票K线图、均线图一同出现的往往还有每日成交量柱形图。下面利用绘制多图的知识点,在一张画布中绘制两张子图,第1张子图包含K线图和均线图,第2张子图为每日成交量柱形图,代码如下。

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'])
ax1.plot(df_arr[:,0],df['MA10'])

ax1.grid()
ax1.xaxis_date()
ax1.set_title('万科A',fontsize=16)
ax1.set_ylabel('价格',fontsize=16)

# 绘制每日成交量图
ax2.bar(df_arr[:,0],df_arr[:,5])
ax2.set_xlabel('日期',fontsize=16)
ax2.set_ylabel('成交量',fontsize=16)
ax1.grid()
ax1.xaxis_date()

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐