Tushare+Talib基金指标分析

本文介绍python语言下的两个第三方库,Tushare(获取股票和基金数据)和Ta-Lib(用于数据指标分析),及其相关使用案例。


一、安装

  • Tushare安装
# 方式1:

pip install tushare

# 如果安装网络超时可尝试国内pip源,
# 如pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple


# 方式2:访问https://pypi.python.org/pypi/tushare/下载安装 ,
# 执行 python setup.py install


# 方式3:访问https://github.com/waditu/tushare,将项目下载或者clone到本地,
# 进入到项目的目录下,执行: python setup.py install
  • Ta-Lib安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Ta-Lib

talib以上安装若失败,出现报错error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools",则需要进入talib下载(见下图)并手动安装(到talib解压目录下cmd:pip install TA-Lib  )与电脑和python匹配的版本。另外解释器要基于自己设置的python-base目录

二、Tushare获取数据

Tushare的使用需要提前注册并获得Token,通过Token进行数据的获取,(部分数据接口需要一定的积分)。

以下仅对沪深股票和基金数据获取方式进行介绍。

  • 沪深股票

1. 股票列表获取,获取基础信息数据,包括股票代码、名称、上市日期、退市日期等。

pro = ts.pro_api('your token')

#查询当前所有正常上市交易的股票列表

data = pro.stock_basic(exchange='', list_status='L', 
       fields='ts_code,symbol,name,area,industry,list_date')

2. 获取股票日线行情数据。

pro = ts.pro_api('your token')

df = pro.daily(ts_code='000001.SZ', start_date='20180701', end_date='20180718')

#多个股票
df = pro.daily(ts_code='000001.SZ,600000.SH', start_date='20180701', end_date='20180718')

除此之外还可以获取诸如财务数据、市场参考数据等,可参见Tushare数据接口

  • 公募基金

1. 获取公募基金数据列表,包括场内和场外基金。

pro = ts.pro_api('your token')

df = pro.fund_basic(market='E')

2. 获取公募基金净值数据。

pro = ts.pro_api('your token')

df = pro.fund_nav(ts_code='165509.SZ')

3. 获取场内基金日线行情,类似股票日行情。

pro = ts.pro_api('your token')

df = pro.fund_daily(ts_code='150018.SZ', start_date='20180101', end_date='20181029')

三、Tushare数据存储至mysql

如果数据需要长期使用,尤其是历史数据,可以将提取到的数据存入本地数据库,例如MySQL。如下为python语言下tushare+pandas+sqlalchemy存储基金净值数据至mysql的代码。

import pandas as pd
import tushare as ts
from sqlalchemy import create_engine
import time
from datetime import datetime

# 基金净值
# 参数
fd_code = '161028.SZ'
start = '2019-01-01'
# end = ''
end = str(time.strftime('%Y-%m-%d',time.localtime(time.time())))

fd_filename = fd_code.replace('.', '').lower()
start_f = start.replace('-', '')
end_f = end.replace('-', '')
start_dt = datetime.strptime(start, '%Y-%m-%d')
end_dt = datetime.strptime(end, '%Y-%m-%d')

try:
    engine = create_engine('mysql+pymysql://username:password@host:port/database')
    # 注意替换上行代码中的数据库连接相关信息
    try:
        table_com = 'select * from %s' % fd_filename
        if (pd.read_sql_query(table_com, engine, index_col = 'ann_date',parse_dates = [
            'ann_date']).sort_values(by = "ann_date" , ascending=True).index[0]<=start_dt) & (
            pd.read_sql_query(table_com, engine, index_col = 'ann_date',parse_dates = [
                'ann_date']).sort_values(by = "ann_date" , ascending=True).index[-1]>=end_dt):
            df = pd.read_sql_query(table_com, engine, index_col = 'ann_date',
                                   parse_dates = ['ann_date']).sort_values(
                                   by = "ann_date" , ascending=True)[start:end]
            print('数据库读取成功!')
        else:
            print('数据库不包含给定时间!')
            aaa
    except:
        pro = ts.pro_api('your token')
        df = pro.fund_nav(ts_code = fd_code)
        engine = create_engine('mysql+pymysql://username:password@host:port/database')
        df.to_sql(name = fd_filename, con=engine, index=True, if_exists='replace', index_label='id')
        print('数据库写入成功!')
        df = pd.read_sql_query(table_com, engine, index_col = 'ann_date',
                               parse_dates = ['ann_date']).sort_values(
                               by = "ann_date" , ascending=True)[start:end]
except Exception as e:
    print(e)
    
print(len(df))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值