tushare模块的应用

一.TuShare简介和环境安装

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

  环境安装:pip install tushare。网络

  若是是老版本升级,能够用升级命令   pip install tushare --upgrade3 app

  在python中导入包:import tushare as ts函数

二.Tushare的应用

  咱们主要仍是应该掌握如何用tushare获取股票行情数据,使用的是ts.get_hist_data()函数或者ts.get_k_data()函数。输入参数为:post

  code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)spa

        start:开始日期,格式YYYY-MM-DD3d

        end:结束日期,格式YYYY-MM-DDcode

        ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D对象

        retry_count:当网络异常后重试次数,默认为3blog

        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:换手率[注:指数无此项]

案例应用_1:

  (1) . 使用tushare包获取某股票的历史行情数据。
#获取k线数据,加载至DataFrame中,这个是茅台的股票
df = ts.get_k_data("600519",start="1999-01-01")
#将从Tushare中获取的数据存储至本地
df.to_csv("600519.csv")
#将原数据中的时间做为行索引,并将字符串类型的时间序列化成时间对象类型,而且给显示索引
df = pd.read_csv("600519.csv", index_col='date',parse_dates=['date'])[['open','close','high','low']]
 
  (2) . 输出该股票全部收盘比开盘上涨3%以上的日期。
#指定条件输出该股票全部收盘比开盘上涨3%以上的日期。
condition = (df['close']-df['open'])/df['open']>0.03
#获取知足条件的行索引
df.loc[condition].index

 

  (4) . 输出该股票全部开盘比前日收盘跌幅超过2%的日期。
# 由于是与前日作对比,
# shift(1)  行索引不变,值向下移动一位
condition = (df['open']-df['close'].shift(1))/df['close'].shift(1)<=-0.02
condittion
df[condition].index

 condittion :                                                    

 

df[condition].index

  (5) . 假如我从2010年1月1日开始,每个月第一个交易日买入1手股票,每一年最后一个交易日卖出全部股票,到今天为止,个人收益如何?
price_last = df['open'][-1]
df = df['2010-01':'2019-01'] #剔除首尾无用的数据
#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)

 

 

案例应用_2:

  (1) . 使用tushare包获取某股票的历史行情数据
df = pd.read_csv("600519.csv",index_col='date', parse_dates=['date'])[['open','close','low','high']]
  (2) . 使用pandas包计算该股票历史数据的5日均线和60日均线
df['ma5']=df['open'].rolling(5).mean()
df['ma30']=df['open'].rolling(30).mean()
什么是均线?
    对于每个交易日,均可以计算出前N天的移动平均值,而后把这些移动平均值连起来,成为一条线,就叫作N日移动平均线。移动平均线经常使用线有5天、10天、30天、60天、120天和240天的指标。
   5天和10天的是短线操做的参照指标,称作日均线指标;
   30天和60天的是中期均线指标,称作季均线指标;
   120天和240天的是长期均线指标,称作年均线指标。
均线计算方法:MA=(C1+C2+C3+...+Cn)/N C:某日收盘价 N:移动平均周期(天数)
  (3) . 使用matplotlib包可视化历史数据的收盘价和两条均线
plt.plot(df[['close','ma5','ma30']].iloc[:100])
  (4) . 分析输出全部金叉日期和死叉日期
sr1 = df['ma5'] < df['ma30']
sr2 = df['ma5'] >= df['ma30']
death_cross = df[sr1 & sr2.shift(1)].index
golden_cross = df[~(sr1 | sr2.shift(1))].index
股票分析技术中的金叉和死叉,能够简单解释为: 分析指标中的两根线,一根为短期内的指标线(ma5),另外一根为较长时间的指标线(ma30)。 若是短期的指标线方向拐头向上,而且穿过了较长时间的指标线,这种状态叫“金叉”; 若是短期的指标线方向拐头向下,而且穿过了较长时间的指标线,这种状态叫“死叉”; 通常状况下,出现金叉后,操做趋向买入;死叉则趋向卖出。固然,金叉和死叉只是分析指标之一,要和其余不少指标配合使用,才能增长操做的准确性
 
  (5) . 若是我从假如我从2010年1月1日开始,初始资金为100000元,金叉尽可能买入,死叉所有卖出,则到今天为止,个人炒股收益率如何?
first_money = 100000
money = first_money
hold = 0#持有多少股
sr1 = pd.Series(1, index=golden_cross)
sr2 = pd.Series(0, index=death_cross)
#根据时间排序
sr = sr1.append(sr2).sort_index()

for i in range(0, len(sr)):
    p = df['open'][sr.index[i]]
    if sr.iloc[i] == 1:
        #金叉
        buy = (money // (100 * p))
        hold += buy*100
        money -= buy*100*p
    else:
        money += hold * p
        hold = 0

        
p = df['open'][-1]
now_money = hold * p + money

print(now_money - first_money)