金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据
财经数据接口包tushare的使用(一)
Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据、年度季度报表数据、实时分笔数据、历史分笔数据,本文对tushare的用法,已经存在的一些问题做一些介绍。
一:安装tushare
为避免由于依赖包缺失导致安装失败,请先安装anaconda,百度网盘地址:
链接:http://pan.baidu.com/s/1qYDQUGs 密码:6wq8
安装直接一直下一步即可
安装完成之后,anaconda会自动配置环境变量,直接就可以用了,cmd打开命令行窗口,使用命令
pip install tushare
即可安装tushar
二:tushare的使用
1、获取历史数据之 get_hist_data
参数说明:
• code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)
• start:开始日期,格式YYYY-MM-DD
• end:结束日期,格式YYYY-MM-DD
• ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
• retry_count:当网络异常后重试次数,默认为3
• pause:重试时停顿秒数,默认为0
返回值说明:
• date:日期
• open:开盘价
• high:最高价
• close:收盘价
• low:最低价
• volume:成交量
• price_change:价格变动
• p_change:涨跌幅
• ma5:5日均价
• ma10:10日均价
• ma20:20日均价
• v_ma5:5日均量
• v_ma10:10日均量
• v_ma20:20日均量
• turnover:换手率[注:指数无此项]
调用方法:
例一:
import tushare as ts
data=ts.get_hist_data(‘300032’)
print(data)
结果展示:
open high close low volume price_change p_change \
date
2018-12-04 16.80 17.15 17.09 16.70 52382.91 0.25 1.49
2018-12-03 17.00 17.22 16.84 16.62 53706.54 0.58 3.57
2018-11-30 16.30 16.39 16.26 15.72 39473.33 0.04 0.25
2018-11-29 17.05 17.09 16.22 16.20 43111.44 -0.68 -4.02
2018-11-28 16.70 16.94 16.90 16.20 45034.68 0.23 1.38
2018-11-27 16.77 16.88 16.67 16.52 34464.46 0.15 0.91
2018-11-26 16.75 16.95 16.52 16.11 34463.00 -0.18 -1.08
2018-11-23 18.01 18.02 16.70 16.60 77016.79 -1.20 -6.70
2018-11-22 18.25 18.27 17.90 17.86 47241.00 -0.15 -0.83
2018-11-21 18.00 18.17 18.05 17.77 68355.30 -0.33 -1.79
ma5 ma10 ma20 v_ma5 v_ma10 v_ma20
date
2018-12-04 16.662 16.915 17.569 46741.78 49524.95 74213.35
2018-12-03 16.578 17.044 17.603 43158.09 55527.30 76015.06
2018-11-30 16.514 17.249 17.666 39309.38 59021.37 78567.25
2018-11-29 16.602 17.503 17.748 46818.07 66538.81 82437.55
2018-11-28 16.938 17.792 17.800 47643.99 78491.83 84790.15
2018-11-27 17.168 17.943 17.812 52308.11 87770.77 86009.69
2018-11-26 17.510 18.066 17.819 67896.51 93372.31 87098.74
2018-11-23 17.984 18.203 17.831 78733.36 97700.81 87289.41
2018-11-22 18.404 18.273 17.846 86259.55 94334.13 85500.81
2018-11-21 18.646 18.239 17.799 109339.68 96096.54 85845.67
2018-11-20 18.718 18.223 17.773 123233.42 98901.76 84578.53
2018-11-19 18.622 18.162 17.736 118848.10 96502.82 82182.74
请读者注意,文档中的注释并不准确,使用该接口并不能获取股票自上市以来的所有日线数据,例如这里举的例子,金龙机电这只股票(2009年12月25日上市)。
请再看例子:
例二:
import tushare as ts
data=ts.get_hist_data('',start='2018-11-28',end='2018-12-01')
print(data)
返回结果是:
open high close low volume price_change p_change \
date
2018-11-30 16.30 16.39 16.26 15.72 39473.33 0.04 0.25
2018-11-29 17.05 17.09 16.22 16.20 43111.44 -0.68 -4.02
2018-11-28 16.70 16.94 16.90 16.20 45034.68 0.23 1.38 ma5 ma10 ma20 v_ma5 v_ma10 v_ma20
date
2018-11-30 16.514 17.249 17.666 39309.38 59021.37 78567.25
2018-11-29 16.602 17.503 17.748 46818.07 66538.81 82437.55
2018-11-28 16.938 17.792 17.800 47643.99 78491.83 84790.15
2、获取历史数据之 get_h_data
作者提供另外一个函数get_h_data用于获取股票历史数据,该函数的调用网页文档没有给出例子,在这里依然用上面的例子来作测试:
例三:
import tushare as ts
data=ts.get_h_data(‘300032’)
print(data)
返回结果:
[Getting data:] open high close low volume amount
date
2018-11-30 16.30 16.39 16.26 15.72 3947333.0 63721274.0
2018-11-29 17.05 17.09 16.22 16.20 4311144.0 72000288.0
2018-11-28 16.70 16.94 16.90 16.20 4503468.0 75076700.0
在不指定开始时间和结束时间时,该函数默认返回最近一年的日线数据,返回的数据与get_hist_data不同的是,该函数只返回开盘价(open)、最高价(high)、收盘价(close)、最低价(low)、成交量(volume)、成交金额(amount)六列
同样的,测试一下该接口能不能获取更早一些的数据:
import tushare as ts
data=ts.get_h_data('',start='2018-11-28',end='2018-12-01')
print(data)
返回结果:
[Getting data:] open high close low volume amount
date
2018-11-30 16.30 16.39 16.26 15.72 3947333.0 63721274.0
2018-11-29 17.05 17.09 16.22 16.20 4311144.0 72000288.0
2018-11-28 16.70 16.94 16.90 16.20 4503468.0 75076700.0
可以看到,相比于get_hist_data,该函数能够返回较早一些的数据,但没有换手率,均线数据这些指标,当然,我们可以获取到数据之后,自己写个脚本计算均线这些信息,但是如果要自己计算换手率,就必须知道股票的市值是多少,这两个函数都没有返回关于股票市值的信息,因此如果要自己计算换手率,就得从其他地方获取股票每个交易日的市值信息。
3、获取历史数据之:get_k_data
作者提供了第三个获取K线数据的函数,get_k_data,参数与get_hist_data相同。
例四:
import tushare as ts
data=ts.get_k_data('')
print(data)
返回结果:
date open close high low volume code
0 2018-02-26 5.455 6.543 6.543 5.455 666.0 603712
1 2018-02-27 7.203 7.203 7.203 7.203 372.0 603712
2 2018-02-28 7.922 7.922 7.922 7.922 425.0 603712
3 2018-03-01 8.711 8.711 8.711 8.711 882.0 603712
4 2018-03-02 9.580 9.580 9.580 9.580 3754.0 603712
与前两个函数相比,这个函数获取数据的速度很明显要快很多,而且可以返回每一只股票从上市开始到当前交易日的所有日线数据,这个有点是前两个函数都不具备的,读者可以自己验证一下,get_h_data可以返回比get_hist_data更早一些的数据,但是对于有些股票依然不能获取很早的数据,更重要的是,如果批量3000多只股票的数据,前两个都不如get_k_data稳定,我一开始搜集数据的时候,为了获取更全面的数据,用的是get_hist_data,但是批量获取,反反复复跑脚本,没有一次是能够将数据完整获取完的,每一次都是中途就挂了,读者可以自己测试一下,间隔时间长一些应该没问题,不过我后来已经知道其他的解决办法,既能够获取全面的数据,同时也不必担心速度的问题,怎么获取一样会在微信公众号【数据之佳】介绍,这里先介绍tushare
4、获取实时行情数据 get_today_all()
返回值说明:
• code:代码
• name:名称
• changepercent:涨跌幅
• trade:现价
• open:开盘价
• high:最高价
• low:最低价
• settlement:昨日收盘价
• volume:成交量
• turnoverratio:换手率
• amount:成交量
• per:市盈率
• pb:市净率
• mktcap:总市值
• nmc:流通市值
该函数没有参数,直接调用即可
测试:
例五:
import tushare as ts
data=ts.get_today_all()
print(data)
返回值:
[Getting data:]############################################################
code name changepercent trade open high low settlement \
0 603999 读者传媒 9.945 5.97 5.41 5.97 5.35 5.43
1 603998 方盛制药 -2.293 5.54 5.52 5.60 5.47 5.67
2 603997 继峰股份 -2.036 8.18 8.29 8.29 8.15 8.35
...
volume turnoverratio amount per pb \
0 17473309.0 7.58390 100935110.0 45.573 2.025
1 5109486.0 1.20168 28242031.0 39.571 2.280
2 1192200.0 0.18924 9790259.0 17.783 2.878
...
mktcap nmc
0 3.438720e+05 1.375488e+05
1 2.374237e+05 2.355590e+05
2 5.232329e+05 5.153400e+05
...
[3634 rows x 15 columns]
限于篇幅,这里只贴出前三行数据,get_today_all()获取了所有股票的当前行情数据,但是获取一次数据的耗时比较长,读者可以自己在实时行情和盘后自己测试一下,看看会不会挂,整体延时有多久等等
5、历史分笔数据之:get_tick_data
参数说明:
code:股票代码,即6位数字代码
date:日期,格式YYYY-MM-DD
retry_count : int, 默认3,如遇网络等问题重复执行的次数
pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
该函数返回指定日期的历史分笔数据,但由于历史分笔数据很耗空间,所以一般服务器都不会存储很长时间的历史分笔数据,该接口也一样,并不能获取从上市以来的所有日期的分笔数据。
例六:
import tushare as ts
data=ts.get_tick_data(‘300032’,’2017-11-01’)
print(data)
返回结果:
time price change volume amount type
0 15:00:03 14.05 -0.01 371 521255 卖盘
1 14:57:03 14.06 0.01 1 1406 买盘
2 14:56:57 14.05 – 92 129260 卖盘
3 14:56:54 14.05 – 20 28100 卖盘
……
1526 09:30:36 14.10 -0.02 159 224190 中性盘
1527 09:30:06 14.12 14.12 7 9884 买盘
[1528 rows x 6 columns]
6、实时分笔数据之 get_realtime_quotes
参数说明:
• symbols:6位数字股票代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板) 可输入的类型:str、list、set或者pandas的Series对象
例八:
import tushare as ts
data=ts.get_realtime_quotes('')
print(data)
name open pre_close price high low bid ask volume \
0 七一二 16.700 17.090 16.800 16.950 16.600 16.760 16.800 2561622 amount ... a2_p a3_v a3_p a4_v a4_p a5_v a5_p \
0 42952410.000 ... 16.810 88 16.820 63 16.830 10 16.840 date time code
0 2018-12-05 13:48:15 603712 [1 rows x 33 columns]
该接口返回的数据量较小,还是比较快的,读者可以自己在实时行情中和盘后自己测试一下
7、当日历史分笔之 get_today_ticks
参数说明:
code:股票代码,即6位数字代码
retry_count : int, 默认3,如遇网络等问题重复执行的次数
pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
例九
import tushare as ts
data=ts.get_today_ticks('')
print(data)
返回值
[Getting data:]##########################
time price pchange change volume amount type
0 13:49:35 16.77 -1.87 0.00 7 11739 买盘
1 13:49:32 16.77 -1.87 -0.01 30 50310 卖盘
2 13:49:11 16.78 -1.81 0.00 7 11746 买盘
3 13:49:08 16.78 -1.81 0.00 2 3356 买盘
4 13:49:02 16.78 -1.81 0.00 5 8390 买盘
5 13:48:47 16.78 -1.81 -0.02 10 16780 卖盘
该接口返回当前日期,当前时刻的所有粉笔成交数据,相比于上一个接口,速度慢很多,也请读者自己测试
7、大单交易数据之 get_sina_dd
获取大单交易数据,默认为大于等于400手,数据来源于新浪财经。
参数说明:
• code:股票代码,即6位数字代码
• date:日期,格式YYYY-MM-DD
• vol:手数,默认为400手,输入数值型参数
• retry_count : int, 默认3,如遇网络等问题重复执行的次数
• pause : int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
返回值说明:
• code:代码
• name:名称
• time:时间
• price:当前价格
• volume:成交手
• preprice :上一笔价格
• type:买卖类型【买盘、卖盘、中性盘】
例10:
import tushare as ts
data=ts.get_sina_dd(‘300032’,’2017-11-1’)
print(data)
返回值
code name time price volume preprice type
0 300032 金龙机电 14:45:54 13.97 91900 14.00 卖盘
1 300032 金龙机电 10:51:36 14.10 57488 14.11 卖盘
2 300032 金龙机电 10:19:42 14.05 50000 14.06 卖盘
3 300032 金龙机电 09:38:36 14.03 42800 14.02 买盘
借助于tushare,其实我们已经可以做一些量化分析和策略了,但是tushare在实际使用中,有一些不经如人意的地方,我在使用中遇到的问题,同时也自己优化了一一些地方,实在不满意的数据,从其他地方用自己想办法获取,对于tushare已经可以做得很好的就不洗自己再去做了,想要了解怎样获取更全面的数据,学习如何将机器学习算法和数据分析方法运用到自己的量化模型当中,请关注微信公众号【数据之佳】,我们将不定期更新文章
---------------------
金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据的更多相关文章
- python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据
python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...
- python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学
首发于:python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=431 本文 ...
- Python 单元测试框架系列:聊聊 Python 的单元测试框架(一):unittest
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Python获取股票历史、实时数据与更新到数据库
要做量化投资,数据是基础,正所谓"巧妇难为无米之炊" 在免费数据方面,各大网站的财经板块其实已提供相应的api,如新浪.雅虎.搜狐...可以通过urlopen相应格式的网址获取数据 ...
- 用python+tushare获取股票前复权后复权行情数据
接口名称 :pro_bar 接口说明 :复权行情通过通用行情接口实现,利用Tushare Pro提供的复权因子进行计算,目前暂时只在SDK中提供支持,http方式无法调取. Python SDK版本要 ...
- Jmeter系列(31)- 获取并使用 JDBC Request 返回的数据
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 Jmeter 使用 JDBC R ...
- Python股票分析系列——系列介绍和获取股票数据.p1
本系列转载自youtuber sentdex博主的教程视频内容 https://www.youtube.com/watch?v=19yyasfGLhk&index=4&list=PLQ ...
- Python量化投资知识总结贴
Ricequant 量化社区的初衷让各位爱好量化的人士可以碰撞思维,在分享和争辩中学习到有用且实战的量化知识.有赖于各位在社区中贡献满满的干货以及有质量的讨论,从编程入门教学到技术指标再到多因子选股. ...
- 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)
注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...
随机推荐
- 当Linux用尽内存
Mulyadi Santosa 也许你很少面临这一情况,但是一旦如此,你一定知道出什么错了:可用内存不足或者说内存用尽(OOM).结果非常典型:你不能再分配内存,内核会杀掉一个任务(一般是正在运行那个 ...
- 【Head First Java 读书笔记】(四)对象的行为
状态影响行为,行为影响状态 对象有状态和行为 类所描述的是对象知道什么和执行什么. 同一类型的每个对象能够有不同的方法行为吗? 任一类的每个实例都带有相同的方法,但是方法可以根据实例变量的值来表现不同 ...
- POJ - 2109 Power of Cryptography(高精度log+二分)
Current work in cryptography involves (among other things) large prime numbers and computing powers ...
- Spring注解:Enable相关注解
@EnableXXX:可以用于取代xml配置中的一些配置,被该注解所标注的类,其中被@Bean标注的方法,一般就用于返回和EnableXXX的XXX相关的Bean,Bean中一般有XXX相关的注解 同 ...
- 尝鲜.net core2.1 ——编写一个global tool
本文内容参考微软工程师Nate McMaster的博文.NET Core 2.1 Global Tools 用过npm开发都知道,npm包都可以以全局的方式安装,例如安装一个http-server服务 ...
- 使用JMeter测试基于WebSocket协议的服务
使用JMeter测试基于WebSocket协议的服务 :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba( ...
- 阿里云RDS外网无法访问解决办法
为了安全起见,阿里云的RDS数据库设置只能内网连接,那么为了方便查询数据,我每次都去连接内网服务器远程桌面. 这次我因为网络问题,远程桌面非常不稳定,一会掉线一会掉线,只能另想办法. 同事那里有个批处 ...
- Visual Studio 2015 开发 ASP.NET 5
在以往微软发布或更新 Visual Studio 版本时,我们开发 ASP.NET 应用程序,带给我们的变化其实并不是很大,或者说你根本就感受不到变化,你感受到的只是下载安装了几个 G 的 Updat ...
- MongoVue 破解治标不治本
MongoVue 破解治标不治本 ---------解决燃眉之急 注册表中查找B1159E65-821C3-21C5-CE21-34A484D54444中的子项4FF78130 ,删除其下的三个子项 ...
- 神经网络中的感受野(Receptive Field)
在机器视觉领域的深度神经网络中有一个概念叫做感受野,用来表示网络内部的不同位置的神经元对原图像的感受范围的大小.神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和po ...