tushare模块的应用

一、简介以及环境安装

TuShare是一个著名的免费、开源的python财经数据接口包。其官网主页为:TuShare -财经数据接口包。该接口包如今提供了大量的金融数据,涵盖了股票、基本面、宏观、新闻的等诸多类别数据(具体请自行查看官网),并还在不断更新中。TuShare可以基本满足量化初学者的回测需求

环境安装:pip install tushare。如果是老版本升级,可以用升级命令pip install tushare --upgrade3,在python中导入包:import tushare as ts

二.Tushare的使用

如何用tushare获取股票行情数据,使用的是ts.get_hist_data()函数或者ts.get_k_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分钟 =15分钟 =30分钟 =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:换手率[注:指数无此项]

案例应用:

使用tushare包获取某股票(贵州茅台)的历史行情数据。

#获取k线数据,加载至DataFrame中
df = ts.get_k_data("",start="1988-01-01")
#将从Tushare中获取的数据存储至本地
df.to_csv("600519.csv")
#将原数据中的时间作为行索引,并将字符串类型的时间序列化成时间对象类型
df = pd.read_csv("600519.csv", index_col='date',parse_dates=['date'])[['open','close','high','low']] # index_col将某一列的数据作为源数据的索引,parse_dates解析为时间类型

输出该股票所有收盘比开盘上涨3%以上的日期。

#输出该股票所有收盘比开盘上涨3%以上的日期。
b_indexs = (df['close'] - df['open'])/df['open']>0.03
b_indexs # 返回布尔值,可以将这组布尔值作为行索引
df[b_indexs].index # 获得符合条件的日期即行索引
"""
输出结果DatetimeIndex(['2001-08-27', '2001-08-28', '2001-09-10', '2001-12-21',
'2002-01-18', '2002-01-31', '2003-01-14', '2003-10-29',
'2004-01-05', '2004-01-14',
...
'2018-09-18', '2018-09-26', '2018-10-19', '2018-10-31',
'2018-11-13', '2018-12-28', '2019-01-15', '2019-02-11',
'2019-03-01', '2019-03-18'],
dtype='datetime64[ns]', name='date', length=295, freq=None)"""

输出该股票所有开盘比前日收盘跌幅超过2%的日期。

condition = (df['open']-df['close'].shift(1))/df['close'].shift(1)<=-0.02  # shift(1) 表示这一列整体向下偏移一位
df[condition].index 执行结果为:
DatetimeIndex(['2001-09-12', '2002-06-26', '2002-12-13', '2004-07-01',
'2004-10-29', '2006-08-21', '2006-08-23', '2007-01-25',
'2007-02-01', '2007-02-06', '2007-03-19', '2007-05-21',
'2007-05-30', '2007-06-05', '2007-07-27', '2007-09-05',
'2007-09-10', '2008-03-13', '2008-03-17', '2008-03-25',
'2008-03-27', '2008-04-22', '2008-04-23', '2008-04-29',
'2008-05-13', '2008-06-10', '2008-06-13', '2008-06-24',
'2008-06-27', '2008-08-11', '2008-08-19', '2008-09-23',
'2008-10-10', '2008-10-15', '2008-10-16', '2008-10-20',
'2008-10-23', '2008-10-27', '2008-11-06', '2008-11-12',
'2008-11-20', '2008-11-21', '2008-12-02', '2009-02-27',
'2009-03-25', '2009-08-13', '2010-04-26', '2010-04-30',
'2011-08-05', '2012-03-27', '2012-08-10', '2012-11-22',
'2012-12-04', '2012-12-24', '2013-01-16', '2013-01-25',
'2013-09-02', '2014-04-25', '2015-01-19', '2015-05-25',
'2015-07-03', '2015-07-08', '2015-07-13', '2015-08-24',
'2015-09-02', '2015-09-15', '2017-11-17', '2018-02-06',
'2018-02-09', '2018-03-23', '2018-03-28', '2018-07-11',
'2018-10-11', '2018-10-24', '2018-10-25', '2018-10-29',
'2018-10-30'],
dtype='datetime64[ns]', name='date', freq=None)

假如我从2010年1月1日开始,每月第一个交易日买入1手股票,每年最后一个交易日卖出所有股票,到今天为止,我的收益如何?

price_last = df['open'][-1]
df = df['':''] #剔除首尾无用的数据
#Pandas提供了resample函数用便捷的方式对时间序列进行重采样,根据时间粒度的变大或者变小分为降采样和升采样:
df_monthly = df.resample("M").first()
df_yearly = df.resample("A").last()[:-1] #去除最后一年
cost_money = 0
hold = 0 #每年持有的股票
for year in range(2010, 2019): cost_money -= df_monthly.loc[str(year)]['open'].sum()*100
hold += len(df_monthly[str(year)]['open']) * 100
if year != 2019:
cost_money += df_yearly[str(year)]['open'][0] * hold
hold = 0 #每年持有的股票
cost_money += hold * price_last print(cost_money)
上一篇:CUDA 计算线程索引的一般公式


下一篇:struts2视频学习笔记 13-14(自定义局部和全局类型转换器(转换Date格式))