python量化分析---使用python获取股票历史数据和实时分笔数据
财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据、年度季度报表数据、实时分笔数据、历史分笔数据,本文对tushare的用法,已经存在的一些问题做一些介绍。 一:安装tushare 为避免由于依赖包缺失导致安装失败,请先安装anaconda,百度网盘地址:链接:http://pan.baidu.com/s/1qYDQUGs密码:6wq8安装直接一直下一步即可安装完成之后,anaconda会自动配置环境变量,直接就可以用了,cmd打开命令行窗口,使用命令pip install tushare即可安装tushare 二:tushare的使用 1、获取历史数据之get_hist_data 参数说明: •code:股票代码,即6位数字代码,或者指数代码(sh=上证指数sz=深圳成指hs300=沪深300指数sz50=上证50zxb=中小板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:换手率[注:指数无此项] 调用方法:例一: importtushareasts data=ts.get_hist_data(‘300032’) print(data) 结果展示: openhighcloselowvolumeprice_changep_change\ date 2017-11-2213.8913.9613.9513.7719670.56-0.02-0.14 2017-11-2113.9713.9813.9713.7723196.87-0.01-0.07 2017-11-2013.9014.0213.9813.6823114.100.010.07 2017-11-1713.8713.9713.9713.6739828.910.000.00 2017-11-1613.9814.0913.9713.8618029.02-0.04-0.29 2017-11-1514.3714.3714.0113.8831731.32-0.37-2.57 2017-11-1414.0014.4314.3814.0049168.370.322.28 ma5ma10ma20v_ma5v_ma10v_ma20turnover date 2017-11-2213.96814.04614.04424767.8926789.3328602.290.26 2017-11-2113.98014.04814.05427180.0427617.6028540.550.31 2017-11-2014.06214.04314.06432374.3428650.4828455.200.31 2017-11-1714.07814.03814.08331644.0529352.3228141.070.53 2017-11-1614.11414.03914.09928582.5729823.2227169.730.24 2017-11-1514.12414.04214.11828810.7630467.9127007.470.42 2017-11-1414.11614.04614.13228055.1630117.3826536.150.66 请读者注意,文档中的注释并不准确,使用该接口并不能获取股票自上市以来的所有日线数据,例如这里举的例子,金龙机电这只股票(2009年12月25日上市)。请再看例子:例二: importtushareasts data=ts.get_hist_data(‘300032’,start=’2011-01-01’,end=’2011-05-01’) print(data) 返回结果是: EmptyDataFrame Columns:[open,high,close,low,volume,price_change,p_change,ma5,ma10,ma20,v_ma5,v_ma10,v_ma20,turnover] Index:[] 可以看到,这几行代码返回的数据为一个空的dataframe,这是网页文章中没有详细说明的问题在这里指出。如何解决这个问题,请关注微信公众号【数据之佳】,注意是才子佳人的佳,该公众号分享量化分析模型,讲解一些比较好的模型,工具等等,tushare的使用公众号中有更详细的介绍。公众号也会讲解如何用其他方式获取更稳定可靠的数据 2、获取历史数据之get_h_data作者提供另外一个函数get_h_data用于获取股票历史数据,该函数的调用网页文档没有给出例子,在这里依然用上面的例子来作测试:例三: importtushareasts data=ts.get_h_data(‘300032’) print(data) 返回结果: openhighcloselowvolumeamount date 2017-11-2213.8913.9613.9513.771967056.027282987.0 2017-11-2113.9713.9813.9713.772319687.032194061.0 2017-11-2013.9014.0213.9813.682311410.032033838.0 2017-11-1713.8713.9713.9713.673982891.054911258.0 …… 2016-11-2417.3117.4217.1717.153799600.066045345.0 2016-11-2317.3717.5117.2717.245008208.087687070.0 2016-11-2217.3717.4117.4017.204536796.079050365.0 [246rowsx6columns] 在不指定开始时间和结束时间时,该函数默认返回最近一年的日线数据,返回的数据与get_hist_data不同的是,该函数只返回开盘价(open)、最高价(high)、收盘价(close)、最低价(low)、成交量(volume)、成交金额(amount)六列同样的,测试一下该接口能不能获取更早一些的数据: importtushareasts data=ts.get_h_data(‘300032’,start=’2011-01-01’,end=’2011-05-01’) print(data) 返回结果: [Gettingdata:]#openhighcloselowvolumeamount date 2011-04-2914.1814.4114.4113.96444287.010930304.0 2011-04-2814.6014.6614.1013.862550197.063069508.0 2011-04-2714.5014.6714.4414.26457503.011427143.0 2011-04-2614.8214.8214.4114.31628685.015732398.…… 2011-01-0413.1413.2313.2112.841099825.024814884.0 [77rowsx6columns] 可以看到,相比于get_hist_data,该函数能够返回较早一些的数据,但没有换手率,均线数据这些指标,当然,我们可以获取到数据之后,自己写个脚本计算均线这些信息,但是如果要自己计算换手率,就必须知道股票的市值是多少,这两个函数都没有返回关于股票市值的信息,因此如果要自己计算换手率,就得从其他地方获取股票每个交易日的市值信息。 3、获取历史数据之:get_k_data作者提供了第三个获取K线数据的函数,get_k_data,参数与get_hist_data相同。 例四: importtushareasts data=ts.get_k_data(‘300032’) print(data) 返回结果: dateopenclosehighlowvolumecode 02015-02-0212.91413.74214.08612.91456295.0300032 12015-02-0313.74214.37714.50013.74263588.0300032 22015-02-0414.41214.51014.76113.79135558.0300032 32015-02-0514.52014.47114.75114.22434088.0300032 42015-02-0614.64814.34314.64813.84535039.0300032 52015-02-0914.37214.06214.54913.90424195.0300032 与前两个函数相比,这个函数获取数据的速度很明显要快很多,而且可以返回每一只股票从上市开始到当前交易日的所有日线数据,这个有点是前两个函数都不具备的,读者可以自己验证一下,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:流通市值 该函数没有参数,直接调用即可测试:例五: importtushareasts data=ts.get_today_all() print(data) 返回值: [Gettingdata:]############################################################codenamechangepercenttradeopenhighlowsettlement\ 0603999读者传媒-0.6227.998.038.117.928.04 1603998方盛制药-2.53512.6913.0013.1312.5813.02 2603997继峰股份-1.52911.5911.7711.8611.5011.77 …… volumeturnoverratioamountperpbmktcap\ 02208414.00.9585117697355.027.5522.7594.602240e+05 12733900.01.0156534976989.079.3135.4715.468584e+05 21848500.01.0809921572699.019.6444.4287.301700e+05 nmc 01.840896e+05 13.415859e+05 21.981890e+05 ……. [3446rowsx15columns] 限于篇幅,这里只贴出前三行数据,get_today_all()获取了所有股票的当前行情数据,但是获取一次数据的耗时比较长,读者可以自己在实时行情和盘后自己测试一下,看看会不会挂,整体延时有多久等等 5、历史分笔数据之:get_tick_data参数说明: code:股票代码,即6位数字代码 date:日期,格式YYYY-MM-DD retry_count:int,默认3,如遇网络等问题重复执行的次数 pause:int,默认0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 该函数返回指定日期的历史分笔数据,但由于历史分笔数据很耗空间,所以一般服务器都不会存储很长时间的历史分笔数据,该接口也一样,并不能获取从上市以来的所有日期的分笔数据。例六: importtushareasts data=ts.get_tick_data(‘300032’,’2017-11-01’) print(data) 返回结果: timepricechangevolumeamounttype 015:00:0314.05-0.01371521255卖盘 114:57:0314.060.0111406买盘 214:56:5714.05–92129260卖盘 314:56:5414.05–2028100卖盘 …… 152609:30:3614.10-0.02159224190中性盘 152709:30:0614.1214.1279884买盘 [1528rowsx6columns] 6、实时分笔数据之get_realtime_quotes 参数说明: •symbols:6位数字股票代码,或者指数代码(sh=上证指数sz=深圳成指hs300=沪深300指数sz50=上证50zxb=中小板cyb=创业板)可输入的类型:str、list、set或者pandas的Series对象 例八: importtushareasts data=ts.get_realtime_quotes(‘300032’) print(data) nameopenpre_closepricehighlowbidaskvolume\ 0金龙机电13.89013.97013.95013.96013.77013.94013.9501967056 amount…a2_pa3_va3_pa4_va4_pa5_va5_p\ 027282987.240…13.96074113.97054713.98033213.990 datetimecode 02017-11-2216:28:03300032 [1rowsx33columns] 该接口返回的数据量较小,还是比较快的,读者可以自己在实时行情中和盘后自己测试一下 7、当日历史分笔之get_today_ticks参数说明: code:股票代码,即6位数字代码 retry_count:int,默认3,如遇网络等问题重复执行的次数 pause:int,默认0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 例九 importtushareasts data=ts.get_today_ticks(‘300032’) print(data) 返回值 [Gettingdata:]#################timepricepchangechangevolumeamounttype 015:00:0314.36+2.790.009381346968卖盘 114:57:0014.36+2.790.0122872卖盘 214:56:5714.35+2.72-0.012739463卖盘 …… 98409:25:0313.89-0.570.0027375030 [985rowsx7columns] 该接口返回当前日期,当前时刻的所有粉笔成交数据,相比于上一个接口,速度慢很多,也请读者自己测试 8、大单交易数据之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:买卖类型【买盘、卖盘、中性盘】 例十: importtushareasts data=ts.get_sina_dd(‘300032’,’2017-11-1’) print(data) 返回值 codenametimepricevolumeprepricetype 0300032金龙机电14:45:5413.979190014.00卖盘 1300032金龙机电10:51:3614.105748814.11卖盘 2300032金龙机电10:19:4214.055000014.06卖盘 3300032金龙机电09:38:3614.034280014.02买盘 借助于tushare,其实我们已经可以做一些量化分析和策略了,但是tushare在实际使用中,有一些不经如人意的地方,我在使用中遇到的问题,同时也自己优化了一一些地方,实在不满意的数据,从其他地方用自己想办法获取,对于tushare已经可以做得很好的就不用自己再去做了。 本文链接:http://blog.csdn.net/wolf1132/article/details/78606945