diff --git a/README.md b/README.md index de373be1..4df299d9 100644 --- a/README.md +++ b/README.md @@ -63,8 +63,8 @@ Quick Start 设定历史数据的时间: - In [5]: ts.get_hist_data('600848',start='2015-01-05',end='2015-01-09') - Out[5]: + ts.get_hist_data('600848',start='2015-01-05',end='2015-01-09') + open high close low volume p_change ma5 ma10 \ date 2015-01-05 11.160 11.390 11.260 10.890 46383.57 1.26 11.156 11.212 @@ -81,9 +81,17 @@ Quick Start 2015-01-09 11.682 58792.43 60665.93 107924.27 1.54 +**复权历史数据** +获取历史复权数据,分为前复权和后复权数据,接口提供股票上市以来所有历史数据,默认为前复权。如果不设定开始和结束日期,则返回近一年的复权数据,从性能上考虑,推荐设定开始日期和结束日期,而且最好不要超过一年以上,获取到数据后,请及时在本地存储。 + + ts.get_h_data('002337') #前复权 + ts.get_h_data('002337',autype='hfq') #后复权 + ts.get_h_data('002337',autype=None) #不复权 + ts.get_h_data('002337',start='2015-01-01',end='2015-03-16') #两个日期之间的前复权数据 + + **Example 2.** 一次性获取最近一个日交易日所有股票的交易数据(结果显示速度取决于网速) - import tushare as ts ts.get_today_all() @@ -119,9 +127,10 @@ Quick Start **Example 3.** 获取历史分笔数据 - In [1]: import tushare as ts - In [2]: df = ts.get_tick_data('600848',date='2014-01-09') - In [3]: df.head(10) + import tushare as ts + + df = ts.get_tick_data('600848',date='2014-01-09') + df.head(10) 结果显示: >成交时间、成交价格、价格变动,成交手、成交金额(元),买卖类型 @@ -142,24 +151,20 @@ Quick Start **Example 4.** 获取实时交易数据(Realtime Quotes Data) - In [1]:import tushare as ts - In [2]:ts.get_realtime_quotes('000581') #Single stock symbol + df = ts.get_realtime_quotes('000581') #Single stock symbol + df[['code','name','price','bid','ask','volume','amount','time']] 结果显示: >名称、开盘价、昨价、现价、最高、最低、买入价、卖出价、成交量、成交金额...more in docs - Out[2]: - name open pre_close price high low bid ask volume \ - 0 威孚高科 31.50 31.38 30.25 31.63 30.08 30.25 30.27 10148935 - amount ... a2_p a3_v a3_p a4_v a4_p a5_v a5_p \ - 0 314310351.22 ... 30.29 2 30.30 234 30.31 19 30.32 \ - date time code - 0 2015-01-14 14:30:46 000581 + + code name price bid ask volume amount time + 0 000581 威孚高科 31.15 31.14 31.15 8183020 253494991.16 11:30:36 请求多个股票方法(一次最好不要超过30个): - In [3]:ts.get_realtime_quotes(['600848','000980','000981']) #symbols from a list - In [4]:ts.get_realtime_quotes(df['code'].tail(10)) #from a Series + ts.get_realtime_quotes(['600848','000980','000981']) #symbols from a list + ts.get_realtime_quotes(df['code'].tail(10)) #from a Series 更多文档 @@ -169,6 +174,15 @@ Quick Start Change Logs ------ +0.2.0 2015/03/17 +======= + + - 新增历史复权数据接口 + - 新增即时滚动新闻、信息地雷数据 + - 新增沪深300指数成股份及动态权重、 + - 新增上证50指数成份股 + - 修改历史行情数据类型为float + 0.1.9 2015/02/06 ======== - 增加分类数据 @@ -182,18 +196,18 @@ Change Logs 0.1.5 2015/01/26 ===== -- 增加了基本面数据的获取 +- 增加基本面数据接口 - 发布一版使用手册,开通[TuShare docs](http://tushare.waditu.com)网站 0.1.3 2015/01/13 === -- 增加了实时交易数据的获取 +- 增加实时交易数据的获取 - Done for crawling Realtime Quotes data 0.1.1 2015/01/11 === -- 增加了tick数据的获取 +- 增加tick数据的获取 0.1.0 2014/12/01 === diff --git a/docs/classifying.rst b/docs/classifying.rst index 4a4902a7..088eaed3 100644 --- a/docs/classifying.rst +++ b/docs/classifying.rst @@ -58,7 +58,7 @@ 概念分类 -------- -返回股票概念的分类数据,现实的二级市场交易中,经常会已概念来炒作,在数据分析过程中,可根据概念分类监测资金等信息的变动情况。本接口是一次性在线获取数据,调用接口时会有一定的延时,请在数据返回后自行将数据进行及时存储。sina财经提供的概念分类信息大致如下图所示: +返回股票概念的分类数据,现实的二级市场交易中,经常会以"概念"来炒作,在数据分析过程中,可根据概念分类监测资金等信息的变动情况。本接口是一次性在线获取数据,调用接口时会有一定的延时,请在数据返回后自行将数据进行及时存储。sina财经提供的概念分类信息大致如下图所示: .. figure:: _static/cpt.png :alt: @@ -212,14 +212,47 @@ 9 300010 立思辰 10 300011 鼎汉技术 -风险警示板分类 --------------- +沪深300成份股和权重 +------------------- -获取风险警示板股票数据,即查找所有st股票 +获取沪深300当前成份股及所占权重 -参数说明: +返回值说明: -- **file\_path**:文件路径,默认为None即由TuShare提供,可以设定自己的股票文件路径。 +- **code** :股票代码 +- **name** :股票名称 +- **date** :日期 +- **weight**:权重 + +调用方法: + +:: + + import tushare as ts + + ts.get_hs300s() + +结果显示: + +:: + + code name date weight + 0 000001 平安银行 2015-03-02 0.93 + 1 000002 万科A 2015-03-02 1.43 + 2 000009 中国宝安 2015-03-02 0.27 + 3 000024 招商地产 2015-03-02 0.30 + 4 000027 深圳能源 2015-03-02 0.10 + 5 000039 中集集团 2015-03-02 0.20 + 6 000060 中金岭南 2015-03-02 0.18 + 7 000061 农 产 品 2015-03-02 0.21 + 8 000063 中兴通讯 2015-03-02 0.46 + 9 000069 华侨城A 2015-03-02 0.33 + 10 000100 TCL集团 2015-03-02 0.51 + +上证50成份股 +------------ + +获取上证50成份股 返回值说明: @@ -232,21 +265,21 @@ import tushare as ts - ts.get_st_classified() + ts.get_sz50s() 结果显示: :: code name - 0 000033 *ST新都 - 1 000403 ST生化 - 2 000504 *ST传媒 - 3 000520 *ST凤凰 - 4 000557 *ST广夏 - 5 000594 *ST国恒 - 6 000659 *ST中富 - 7 000755 *ST三维 - 8 000779 *ST派神 - 9 000822 *ST海化 - 10 002006 *ST精功 + 0 600000 浦发银行 + 1 600010 包钢股份 + 2 600015 华夏银行 + 3 600016 民生银行 + 4 600018 上港集团 + 5 600028 中国石化 + 6 600030 中信证券 + 7 600036 招商银行 + 8 600048 保利地产 + 9 600050 中国联通 + 10 600089 特变电工 diff --git a/docs/fundamental.rst b/docs/fundamental.rst index 8183740f..1ae49a86 100644 --- a/docs/fundamental.rst +++ b/docs/fundamental.rst @@ -20,8 +20,8 @@ 本模块数据全部来自sina财经,由于财务数据项目比较多,所以拆分成了几个表,使用时可以通过股票代码合并在一起,也可以独立使用。数据在获取时,需要一页一页的抓取,所以需要一点等待时间,最后会合并成一个大表。 -沪深股票列表 ------------- +股票列表 +-------- 获取沪深上市公司基本情况。属性包括: diff --git a/docs/preface.rst b/docs/preface.rst index fc02bcd8..95483cdd 100644 --- a/docs/preface.rst +++ b/docs/preface.rst @@ -2,27 +2,23 @@ .. currentmodule:: tushare +.. highlightlang:: python + 前言 ==== -   大概一年以前,几个朋友和同事偶尔跟我聊到股票的数据问题,因为大多是搞开发的,所以希望能从技术的角度获取一些数据并加以分析,看是否能通过数据的量化分析发现一些影响股价涨跌的"蛛丝马迹"。从那以后,我收集整理了一些数据接口,正好那段时间因个人兴趣正在学习数据分析,利用python -pandas包做了一些实践,由于个人比较喜欢pandas这个工具,通过DataFrame结构化的数据配合Python语言本身的编程功能很容易实现处理和分析,所以近来把之前收集来的股票等财经数据接口都封装成函数实现了便捷抓取,返回的数据基本都是DataFrame格式,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。 +**TuShare是一个免费、开源的python财经数据接口包。**\ 主要实现对股票等金融数据从\ **数据采集**\ 、\ **清洗加工** +到 +**数据存储**\ 的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据。考虑到python +pandas包在金融量化分析中体现出的优势,TuShare返回的绝大部分的数据格式都是pandas +DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。 -   TuShare不是一个有多么高大上的东西,也没有多少技术含量,实现相对简单,当前版本只是提供经过初步处理的数据,调用和使用非常非常简单,目的就是为做金融分析的人提供便捷、干净的数据,仅此而已。所有的数据都来自各大门户网站,尤其是sina财经,所以特别感谢新浪。如果在使用过程碰到数据源地址发生变更或者数据结构变化造成错误,请自行查找和修改,或者通过**Email:jimmysoa@sina.cn +TuShare的数据主要来源于新浪财经、凤凰财经等各大门户网站,如果在使用过程碰到数据源地址发生变更或者数据结构变化造成错误,请自行查找和修改,或者通过\ **Email:jimmysoa@sina.cn QQ:52799046** 联系我,如果有什么好的建议和意见,也请及时联系我,在此谢过。 -   对于后期的愿景,其实TuShare也是向往着走向“高大上”的^\_^,比如把期货等金融数据也纳入进来,另外,最关键是要做一些**数据模型** -,为做量化分析的朋友,为怀揣着金融梦想立志成为Quant的朋友提供一些帮助。所以,欢迎有着同样兴趣的朋友加入进来,一起做点“让数据产生价值”的事,一起让自己的想法变成有着实际载体的具体实现。 - -   如果您精于业务勤于研究,却对程序编码和获取其他重要数据无暇顾及,欢迎随时联系。TEL:138-1140-5077 - -用途 ----- - -TuShare主要完成了对股票等金融数据从\ **数据采集**\ 、\ **数据清洗和加工** -到 -`数据存储 <#id33>`__\ 的过程,满足金融量化分析师和学习数据分析的人在数据获取方面的需求。 +TuShare的产生完全是本人业余兴趣和学习新鲜事物的结果,以免费和开源的形式分享出来,希望对有需求的人有所帮助。如果您觉得TuShare好用,在\ `GitHub `__\ 里对TuShare点一下\ **Star**\ 来就算是对她的支持,如果您也想参与其中,欢迎Fork和提交Pull +Requests. .. figure:: _static/main_pic_min.png :alt: diff --git a/docs/storing.rst b/docs/storing.rst index d33d716f..1bb07538 100644 --- a/docs/storing.rst +++ b/docs/storing.rst @@ -16,7 +16,7 @@ - 存入MySQL等关系型数据库 - 存入NoSQL数据库 -csv文件 +CSV文件 ------- pandas的DataFrame和Series对象提供了直接保存csv文件格式的方法,通过参数设定,轻松将数据内容保存在本地磁盘。 diff --git a/docs/trading.rst b/docs/trading.rst index bd524a08..073e1ef6 100644 --- a/docs/trading.rst +++ b/docs/trading.rst @@ -2,6 +2,7 @@ .. currentmodule:: tushare +.. highlightlang:: python 交易数据 ======== @@ -119,6 +120,56 @@ ts.get_hist_data('zxb')#获取中小板指数k线数据 ts.get_hist_data('cyb')#获取创业板指数k线数据 +复权历史数据 +------------ + +获取历史复权数据,分为前复权和后复权数据,接口提供股票上市以来所有历史数据,默认为前复权。如果不设定开始和结束日期,则返回近一年的复权数据,从性能上考虑,推荐设定开始日期和结束日期,而且最好不要超过一年以上。获取到数据后,请及时在本地存储。 + +:: + + ts.get_h_data('002337') #前复权 + ts.get_h_data('002337',autype='hfq') #后复权 + ts.get_h_data('002337',autype=None) #不复权 + ts.get_h_data('002337',start='2015-01-01',end='2015-03-16') #两个日期之间的前复权数据 + +参数说明: + +- **code**:string,股票代码 e.g. 600848 +- **start**:string,开始日期 format:YYYY-MM-DD 为空时取当前日期 +- **end**:string,结束日期 format:YYYY-MM-DD 为空时取去年今日 +- **autype**:string,复权类型,qfq-前复权 hfq-后复权 + None-不复权,默认为qfq +- **retry\_count** : int, 默认3,如遇网络等问题重复执行的次数 +- **pause** : int, 默认 + 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题 + +返回值说明: + +- **date** : 交易日期 (index) +- **open** : 开盘价 +- **high** : 最高价 +- **close** : 收盘价 +- **low** : 最低价 +- **volumn** : 成交量 +- **amount** : 成交金额 + +结果: + +:: + + open high close low volumn amount + date + 2015-03-16 13.27 13.45 13.39 13.00 81212976 1073862784 + 2015-03-13 13.04 13.38 13.37 13.00 40548836 532739744 + 2015-03-12 13.29 13.95 13.28 12.96 71505720 962979904 + 2015-03-11 13.35 13.48 13.15 13.00 59110248 780300736 + 2015-03-10 13.16 13.67 13.59 12.72 105753088 1393819776 + 2015-03-09 13.77 14.73 14.13 13.70 139091552 1994454656 + 2015-03-06 12.17 13.39 13.39 12.17 89486704 1167752960 + 2015-03-05 12.79 12.80 12.17 12.08 26040832 966927360 + 2015-03-04 13.96 13.96 13.30 12.58 26636174 1060270720 + 2015-03-03 12.17 13.10 13.10 12.05 19290366 733336768 + 实时行情 -------- diff --git a/test/classifying_test.py b/test/classifying_test.py index 24211af4..e8424311 100644 --- a/test/classifying_test.py +++ b/test/classifying_test.py @@ -1,11 +1,11 @@ # -*- coding:utf-8 -*- -import tushare as ts +import tushare.stock.classifying as ts if __name__ == '__main__': -# print ts.get_area_classifyed() -# print ts.get_gem_classifyed() -# print ts.get_sme_classifyed() - print ts.get_st_classifyed() -# print ts.get_industry_classifyed() -# print ts.get_concept_classifyed() \ No newline at end of file +# print ts.get_area_classified() +# print ts.get_gem_classified() +# print ts.get_sme_classified() +# print ts.get_st_classified() +# print ts.get_industry_classified() + print ts.get_concept_classified() \ No newline at end of file diff --git a/test/news_test.py b/test/news_test.py index a575cd06..af56dd24 100644 --- a/test/news_test.py +++ b/test/news_test.py @@ -3,8 +3,13 @@ import tushare.stock.newsevent as ns if __name__ == '__main__': - df = ns.get_latest_news(2,show_content=True) + df = ns.get_latest_news(5,show_content=False) print df - - url = df.ix[0,'url'] - print ns.latest_content(url) \ No newline at end of file + +# url = df.ix[0,'url'] +# print ns.latest_content(url) + +# nts = ns.get_notices('600848') +# # print nts +# url = nts.ix[0,'url'] +# print ns.notice_content(url) \ No newline at end of file diff --git a/test/trading_test.py b/test/trading_test.py index aaf23d1e..c6d8b40b 100644 --- a/test/trading_test.py +++ b/test/trading_test.py @@ -9,4 +9,4 @@ # print td.get_realtime_quotes(['600848','000980','000981']) # df = td.get_today_all() # print td.get_realtime_quotes(df['code'].tail(10)) - print ts.get_hist_data('600848') \ No newline at end of file + print ts.get_hist_data('600848',start='2015-02-25') \ No newline at end of file diff --git a/tushare/stock/classifying.py b/tushare/stock/classifying.py index 0b0c7a27..2bc9b47b 100644 --- a/tushare/stock/classifying.py +++ b/tushare/stock/classifying.py @@ -207,6 +207,4 @@ def get_sz50s(): return df except Exception as er: print str(er) - -if __name__ == '__main__': - print get_sz50s() \ No newline at end of file + \ No newline at end of file diff --git a/tushare/stock/trading.py b/tushare/stock/trading.py index ca00ab85..fc218290 100644 --- a/tushare/stock/trading.py +++ b/tushare/stock/trading.py @@ -82,6 +82,7 @@ def get_hist_data(code=None, start=None, end=None, df = df[df.date <= end] if (code in ct.INDEX_LABELS) & (ktype in ct.K_MIN_LABELS): df = df.drop('turnover', axis=1) + df = df.set_index('date') return df raise IOError("%s获取失败,请检查网络和URL:%s" % (code, url)) @@ -252,7 +253,7 @@ def get_h_data(code, start=None, end=None, autype='qfq', end:string 结束日期 format:YYYY-MM-DD 为空时取去年今日 autype:string - 复权类型,qfq-前复权 hfq-后复权 no-不复权,默认为qfq + 复权类型,qfq-前复权 hfq-后复权 None-不复权,默认为qfq retry_count : int, 默认 3 如遇网络等问题重复执行的次数 pause : int, 默认 0 @@ -378,7 +379,3 @@ def code_to_symbol(code): return '' else: return 'sh%s'%code if code[:1] == '6' else 'sz%s'%code - - -if __name__ == '__main__': - print get_h_data('600848') \ No newline at end of file diff --git a/whats_new.md b/whats_new.md index cf99ed38..0053e4ad 100644 --- a/whats_new.md +++ b/whats_new.md @@ -13,6 +13,11 @@ 3、修改get\_hist_data()接口 -- 取消了date作为index列 - 修改数值型数据的dtype为float +4、新增历史复权数据接口get\_h_data + +- 前复权(默认) +- 后复权 +- 不复权 +