使用pandas绘制股票均线【从零入门量化六】

前面的系列文章,有朋友反映技能树提升太快,看不明白。所以从这篇开始,加入一些基础的技能点。让学习的曲线更平滑一些。
做量化交易,首先需要能够对金融时序数据进行处理,pandas是Python中最常用,也是最好用的时序处理工具包。这里我们以绘制茅台的股价均线为例,展示pandas的处理方法。

技能点:

  • 1 金融数据获取:使用tushare下载股票历史日线数据
  • 2 把日期字符串转换成时间类型
  • 3 使用pandas计算股票的N日均线,并绘制出来

一、使用tushare下载股票日线数据

《使用pandas绘制股票均线【从零入门量化六】》 tushare.pro

1.1 安装Tushare

Tushare是一个第三方的数据采集工具包,提供了各类金融的数据的采集,而且是免费使用的。我们的开发语言是Python,开发环境是Anaconda,如果不了解怎么安装环境,可以看前面我的文章:搞金融的同学三小时快速入门python

安装了Python的开发环境anaconda后,我们需要安装tushare,在命令行运行:

pip install tushare

1.2 申请账号

如果网络顺畅,几秒钟就能安装好了。

到tushare.pro这个网站注册一个账号,系统会分配给你一个Token,这是在代码中会用到的。

《使用pandas绘制股票均线【从零入门量化六】》 Token

1.3 下载数据

申请好Token后,我们开始下载股票的日线数据,以茅台为例。

import  tushare as ts
import pandas  as pd
import datetime

#设置pandas的打印范围参数
pd.set_option('display.max_colwidth',500)
pd.set_option('display.max_columns', None)

# 设置tushare pro的token并获取连接
ts.set_token('e65dada543********************************9f1984c9ba75')
pro = ts.pro_api()
# 设定获取日线行情的初始日期和终止日期,其中终止日期设定为昨天。
start_dt = '20100101'
time_temp = datetime.datetime.now() - datetime.timedelta(days=1)
end_dt = time_temp.strftime('%Y%m%d')
stock = '600519.SH'
# 获取单个股票的日线行情
df = pro.daily(ts_code=stock, start_date=start_dt, end_date=end_dt)
# 显示数据行数
c_len = df.shape[0]
print(c_len)
# 显示出来前面几行数据
print(df.head())

1.4 显示结果

《使用pandas绘制股票均线【从零入门量化六】》 显示行情数据

这里面有高开低收,还有前一天的收盘价,当日变动价格,收益百分比等数据。

二、处理日期数据

因为股票的行情数据是时序数据,和时间的关系很密切,所以我们希望把时间作为数据的索引。tushare给我们返回的数据中,trade_date是字符串格式,我们需要先将它转换为系统能识别的时间类型格式,然后把trade_date设置为数据的索引。

# pandas有个专门把字符串转为时间格式的函数,to_datetime。第一个参数是原始数据,第二个参数是原始数据的格式
df['trade_date'] = pd.to_datetime(df['trade_date'],format='%Y%m%d')
# 把trade_date设置为索引
df.set_index('trade_date',inplace=True)

三、使用pandas计算股票的N日均线,并绘制出来

3.1 Pandas的rolling操作

pandas为我们提供了rolling函数,用来对某个区间的数据进行滚动的统计操作。比如,我们希望以5天为区间,滚动对一列[A1,A2,A3,A4,A5,A6,A7,A8,A9,A10]的数据进行做平均统计得到B列,那么A5对应的B5=(A1+A2+A3+A4+A5)/5。

3.2 使用rolling函数计算均线

#因为Tushare返回的数据是按照日期倒序排列的,我们先把数据按照日期颠倒一下,变成正序排列
df = df.sort_values("trade_date",ascending=True)
#计算30日均线
df["MA_30"] = df["close"].rolling(window=30).mean()
#计算60均线
df["MA_60"] = df["close"].rolling(window=60).mean()
#计算180日均线
df["MA_180"] = df["close"].rolling(window=180).mean()
#显示数据
print(df.head(50))
#保存数据
df.to_csv("maotai.csv",encoding='utf-8')

3.3 绘制均线

#使用均线和收盘价绘制图形
df[["close","MA_30","MA_60","MA_180"]].plot()
#设置标题
plt.title("maotai")
#保存图片
plt.savefig("maotai.png")
#显示图片
plt.show()

《使用pandas绘制股票均线【从零入门量化六】》 茅台的走势图

到这里,我们就已经能够Get到前面的技能点了:

  • 1 金融数据获取:使用tushare下载股票历史日线数据
  • 2 把日期字符串转换成时间类型
  • 3 使用pandas计算股票的N日均线,并绘制出来

系列文章请看:

克服贪婪和恐惧的方式:量化交易【从零入门量化一】

什么是量化交易系统,目前有哪些解决方案?【从零入门量化二】

搞金融的同学三小时快速入门python【从零入门量化三】

零投入打造量化交易系统【从零入门量化四】

以DualThrust为例回测我们的第一个策略【从零入门量化五】

使用pandas绘制股票均线【从零入门量化六】

《使用pandas绘制股票均线【从零入门量化六】》 image

    原文作者:AI二师兄
    原文地址: https://www.jianshu.com/p/c1bb016d1f37
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞