问题描述
解决方案
PTrade 策略中调用 Tushare 数据说明
根据 PTrade API 文档的“支持的三方库”列表,PTrade 平台是支持 Tushare 库的。
您可以在策略代码中导入并使用 Tushare,但需要注意运行环境的网络限制和数据源的稳定性。
1. 支持的版本
根据文档,PTrade 环境中预装了以下 Tushare 相关库:
- tushare: 版本 1.2.48
- xcsc-tushare: 版本 1.0.0
2. 代码调用示例
您可以在 initialize 或其他函数中导入并初始化 Tushare。由于 Tushare Pro 接口需要 Token,您需要拥有自己的 Tushare 账号。
import tushare as ts
def initialize(context):
# 设置 Tushare Token (请替换为您自己的 Token)
# 注意:不要在实盘代码中明文暴露重要 Token,建议仅在研究环境测试
token = 'YOUR_TUSHARE_TOKEN'
try:
ts.set_token(token)
pro = ts.pro_api()
# 示例:获取某只股票的基础信息
# 注意:这需要网络连接,回测或实盘环境可能受限
df = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
log.info(df.head())
except Exception as e:
log.info("Tushare 调用失败,可能是网络限制或 Token 错误: %s" % e)
def handle_data(context, data):
pass
3. 关键注意事项(非常重要)
虽然库已安装,但在实际使用中存在以下限制,强烈建议优先使用 PTrade 自带的数据 API:
- 网络限制(最主要问题):
- 研究环境:通常可以访问外网,调用 Tushare 接口一般没有问题。
- 回测/实盘环境:为了安全和性能,服务器通常禁止访问外网。这意味着 Tushare 的 HTTP 请求会被防火墙拦截,导致策略报错或卡死。
- 数据一致性:
- Tushare 的数据与 PTrade 内部的回测引擎数据(如
get_history)可能存在除权、停牌处理上的细微差异,混合使用可能导致信号漂移。
- Tushare 的数据与 PTrade 内部的回测引擎数据(如
- 速度与效率:
- PTrade 的原生 API(如
get_history,get_fundamentals)直接从本地或内网高速服务器读取数据,速度远快于通过网络请求 Tushare 接口。
- PTrade 的原生 API(如
4. 替代方案:使用 PTrade 原生 API
如果您需要获取行情或财务数据,建议直接使用 PTrade 提供的接口,无需联网且与回测系统完美兼容:
- 获取历史行情:使用
get_history()或get_price()。 - 获取财务数据:使用
get_fundamentals()。 - 获取股票信息:使用
get_stock_info()。
原生 API 示例:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 替代 Tushare 获取行情
# 获取过去 5 天的收盘价
history_df = get_history(5, '1d', 'close', g.security)
log.info(history_df)
Q&A
Q: 为什么我在回测时调用 Tushare 报错连接超时?
A: PTrade 的回测和实盘运行容器通常是与外网隔离的(沙箱环境),无法发送 HTTP 请求到 Tushare 服务器。Tushare 仅推荐在“研究”模块中用于数据分析,不建议在策略运行逻辑中使用。
Q: PTrade 自带的数据够用吗?
A: PTrade 提供了完整的行情数据(日线、分钟、Tick)、财务数据(三大表)、以及基础信息(行业、概念、股本等),基本覆盖了 Tushare 的常用功能,且针对量化交易做了清洗和优化。
Q: 如何查看当前环境支持的所有第三方库?
A: 您可以查阅 PTrade 官方文档的“支持的三方库”章节,或者在研究环境中运行 pip list 命令来查看已安装的库及其版本。