
Tushare接口与Token配置
Tushare是一个免费开源的Python财经数据接口包,提供股票、基金、期货等金融数据。要获取A股数据,首先需注册Tushare账号,并在个人主页获取Token。安装tushare库,通过pip install tushare完成。配置Token后调用pro接口,采用标准化的数据表结构,极大简化数据获取流程。Token是访问数据的凭证,需妥善保管,避免泄露。
获取股票列表与基本信息
上市公司基本信息是数据获取的基础。通过pro.stock_basic()可以获取当前所有A股股票列表,包含股票代码、名称、行业、上市日期等。参数exchange='SSE'可筛选上交所,'SZSE'为深交所,list_status='L'表示上市状态,'D'为退市,'P'为暂停。该接口适合获取全市场股票池。示例代码:
import tushare as ts
pro = ts.pro_api('你的Token')
df = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,market,list_date')
返回的DataFrame可直接用于后续分析。

获取历史日线行情
历史日线数据是量化交易的基础,通过pro.daily()接口获取日线行情,包含开高低收价、成交量、成交额等。参数包括ts_code(股票代码)或trade_date(交易日期)。一次最多获取6000条数据,若需长周期,需分次循环获取。该接口提供未复权数据,对于除权除息需使用复权因子进行前复权或后复权。示例:
df = pro.daily(ts_code='000001.SZ', start_date='20200101', end_date='20231231')
字段说明:trade_date, open, high, low, close, pre_close, change, pct_chg, vol, amount。其中pct_chg为涨跌幅,vol单位为手,amount为千元。
复权因子的使用
股票分红送股会改变股价连续性,复权处理是必要步骤。Tushare提供复权因子接口pro.adj_factor(),返回每只股票每日的复权因子。前复权计算公式为:前复权价 = 未复权价 * 当前因子 / 当日因子,当前因子为最新交易日的复权因子。使用复权数据可准确计算收益率。示例代码:
adj = pro.adj_factor(ts_code='000001.SZ', start_date='20200101', end_date='20231231')
df = df.merge(adj, on='trade_date')
df['adj_close'] = df['close'] * df['adj_factor'] / df['adj_factor'].iloc[-1]
获取财务指标数据
财务数据反映公司质地,通过pro.fina_indicator()获取财务指标,包括每股收益、净资产收益率、毛利率等。参数可指定周期(年报、季报),需按公告日期过滤。该接口适合基本面选股。示例:
df = pro.fina_indicator(ts_code='000001.SZ', start_date='20200101', end_date='20231231', fields='ts_code,ann_date,end_date,eps,roe,grossprofit_margin')
注意财务数据有披露延迟,需根据公告日期使用ann_date。
实时行情数据获取
实时行情用于盘中监控,Tushare提供pro.realtime_quote()接口,需积分达到一定等级(2000分以上)。该接口返回当前最新交易信息,包括最新价、涨跌幅、买卖五档等。对于量化交易,实时数据可用于高频交易策略。示例代码:
df = pro.realtime_quote(ts_code='000001.SZ', src='sina')
如果积分不够,可使用新浪或腾讯的免费接口,但准确性稍逊。
交易日历与工具函数
trade_cal接口返回交易日历,便于判断是否为交易日。常用函数为pro.trade_cal(exchange='SSE', start_date='20240101', end_date='20241231'),返回is_open字段。在数据获取时,可结合日历避开非交易日,提高效率。
数据缓存与本地存储
频繁调用API有流量限制,建议将数据缓存到本地。使用pandas的to_csv或to_pickle存储,或使用SQLite数据库。在策略回测时,一次性获取所有数据并保存,避免重复请求。对于大容量数据,使用分块下载,并合理利用Tushare的积分制度。
实战案例分析
考虑构建一个简单的双均线策略:使用日线数据,计算5日和20日均线。若5日上穿20日则买入,下穿则卖出。数据获取与策略流程如下:
获取平安银行(000001.SZ)近两年日线数据;
合并复权因子,计算前复权收盘价;
计算均线并生成信号;
计算策略收益率与基准对比。示例代码:
import pandas as pd
import numpy as np
stock_code = '000001.SZ'
df = get_daily(stock_code, '2022-01-01', '2024-12-31') # 自定义函数
df['ma5'] = df['adj_close'].rolling(5).mean()
df['ma20'] = df['adj_close'].rolling(20).mean()
df['signal'] = np.where(df['ma5'] > df['ma20'], 1, 0)
df['position'] = df['signal'].diff()
获取数据的过程是策略成功的一半。
常见问题与解决策略
Token未生效:检查是否正确复制,网络设置。数据返回空:检查股票代码格式,交易日是否开市,参数是否在允许范围。积分限制:多数接口有分钟级访问限制,如每分钟500次,必要时使用time.sleep()。
数据更新的自动化
通过配置定时任务(如cron)每日自动抓取增量数据,并存储至数据库,保持本地数据更新。使用Tushare的每日指标接口(如pro.daily_basic)可获取市净率、市盈率等指标。自动化能够为量化策略提供稳定的数据源。
Tushare为A股数据获取提供了便捷渠道,覆盖行情、财务、宏观等多维度。通过Python的灵活调用,可以构建个人量化研究的数据基础。掌握Token配置、接口参数和复权处理是关键,配合数据缓存即可高效利用。