Python绘制股票K线图

news/2024/10/23 19:18:41/

目录

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()

 

 


http://www.ppmy.cn/news/130847.html

相关文章

【数据挖掘】K-Means 一维数据聚类分析示例

文章目录 K-Means 一维数据计算示例 数据样本 及 初始值K-Means 一维数据 距离计算方式K-Means 算法 步骤第一次迭代 : 步骤 ( 1 ) 计算距离第一次迭代 : 步骤 ( 2 ) 聚类分组第一次迭代 : 步骤 ( 3 ) 计算中心值第二次迭代 : 步骤 ( 1 ) 计算距离第二次迭代 : 步骤 ( 2 ) 聚类…

统计学习方法——K近邻模型

0. 写在前面 在这一讲的讨论班中,我们将要讨论一下K近邻模型。可能有人会说,K近邻模型有什么好写的,那分明就是一个最简单的机器学习模型,哦,不,连机器学习也算不上的算法吧。但是这里,我想提醒…

1到20的阶乘和是多少 php,20的阶乘(1到20的阶乘和结果)

如果不是电脑编程的问题 貌似只能使用计算器得到结果了吧 把计算器的显示位数调大一些 然后1的阶乘加到20的阶乘 即1!+2!+3!+…+20!=2561327494111820313 #include void main() { int i,n,sum; n=1;sum=0; for(i=1;i 和是:2561327494111820300。zd 以下是版通过C进行的计权算…

【机器学习】快速有效理解 K-Means 算法

什么是 K-Means ? 学习 K-Means 之前,大家首先需要对聚类有一个概念. 我们都知道,机器学习可以划分为 3 类:监督学习、无监督学习、强化学习. 无监督学习指的是数据没有标签,也就是说我们只有数据的特征,但并不知道这些数据都是什么,无监督学习算法或者是模型需要从这样的数…

K210学习记录(3)——kmodel生成与使用

0、引言 2022更新说明:这块芯片水太深,能不碰最好别碰,官方当时留的资料实在太少(或者说我太菜)。 如果要调用最新的nncase工具箱所支持的算子,最好采用嘉楠自家工具链VScode进行开发。不建议采用迦南官方…

机器学习(2): K-means (k均值) 聚类算法 小结

目录 1 聚类简介 2 k-means算法流程 3 利用k-means 对数据进行聚类 4 利用K-means进行图像分割 5 小结 参考资料 1 聚类简介 在无监督学习中,训练样本的标记信息是未知的,我们的目标是通过对无标记训练样本的学习来解释数据的内在性质及规律&…

S32K系列S32K144学习笔记——CAN

一用S32K144苦似海,道友,能不用,千万不去用。 本例程基以下如图所示接口操作,MCU为S32K144,开发平台S32DSworkspace 功能描述:CAN0通信 CAN0_EN–>PB15 如有错误,麻烦帮忙指出,谢…

Android 65K问题之65K来源探究

65K问题相信不少人都遇到过,65K即65536,关于这个值,是怎么来的?本文进行探究! 1Unable to execute dex: method ID not in [0, 0xffff]: 65536PS:本文只是纯探索一下这个65K的来源,仅此而已。 到底是65k还是…