金融量化ushare模块

1、介绍

Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集清洗加工 到 数据存储的过程,可以为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工做量,使他们更加专一于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优点,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,很是便于用pandas/NumPy/Matplotlib进行数据分析和可视化。固然,若是您习惯了用Excel或者关系型数据库作分析,您也能够经过Tushare的数据存储功能,将数据所有保存到本地后进行分析。应一些用户的请求,从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。python

 

须要强调的是,TuShare库里不单单有股票数据,而是一个综合的财经库。只是由于股票数据数据量比较大,特别锻炼数据分析能力,因此才选择股票数据练手。其他的数据也是颇有意思的,好比全国电影票房排名算法

 

使用前提数据库

  • 安装Python
  • 安装pandas
  • lxml也是必须的,正常状况下安装了Anaconda后无须单独安装,若是没有可执行:pip install lxml

建议安装Anaconda(http://www.continuum.io/downloads),一次安装包括了Python环境和所有依赖包,减小问题出现的概率。网络

 

下载安装
函数

 

版本升级
post

  • pip install tushare --upgrade

查看当前版本的方法:优化

import tushare print(tushare.__version__)

 

2、Tushare的应用

一、获取股票行情的函数

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

参数:spa

复制代码
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 pandas as pd
import numpy as np
from pandas import DataFrame,Series
import tushare as ts

# 获取k线数据,加载至DataFrame中
df = ts.get_k_data('600519',start='2000-01-01')  # 茅台
df.head()

# 将从Tushare中获取的数据存储至本地
df.to_csv('./maotai.csv')

# 将原数据中的时间做为行索引,并将字符串类型的时间序列化成时间对象类型
# index_col参数:把某一列col做为行索引index
# parse_dates:把字符串类型的时间序列化成时间对象类型
df = pd.read_csv('./maotai.csv',index_col='date',parse_dates=['date'])
df.drop(labels='Unnamed: 0',axis=1,inplace=True)
df.head()

# 分析1:输出该股票全部收盘比开盘上涨3%以上的日期
# 获取知足条件的行索引
df.loc[(df['close'] - df['open'])/df['open'] > 0.03].index

# 分析2:输出该股票全部开盘比前日收盘跌幅超过2%的日期
df.loc[(df['open'] - df['close'].shift(1)) / df['close'].shift(1) <= -0.02].index

# 分析3:假如我从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("Y").last()[:-1] # 获取每一年第最后一个交易日对应的行数据并去除最后一年
cost_money = 0
hold = 0 # 每一年持有的股票
for year in range(2010, 2020):
    
    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)
复制代码
相关文章
相关标签/搜索