问题描述
/
解决方案
在 ptrade 量化平台中调用 tushare 数据时遇到 ConnectionError: HTTPConnectionPool(host='10.5.42.71', port=7171)... Connection refused 错误,通常是因为策略运行环境无法连接到券商部署的 tushare 内网代理服务。
以下是详细的原因分析及解决方案:
一、 错误原因分析
- 券商 tushare 服务异常或维护:错误信息中的 IP
10.5.42.71是一个局域网(内网)IP。为了安全,ptrade 平台通常是物理隔离的,无法直接访问外网。券商会在内网搭建一个 tushare 的数据镜像或代理服务。如果该服务宕机、重启或正在维护,就会提示Connection refused(连接被拒绝)。 - 权限未开通:部分券商对 tushare 接口的调用有白名单限制,如果您的账户未申请开通该权限,网络层可能会直接拒绝连接。
- 调用的库不匹配:ptrade 环境中通常预装了
tushare和xcsc-tushare。如果调用方式不符合券商的定制规范,也可能导致请求路由失败。
二、 解决方案
1. 联系券商技术支持(首选)
由于这是明确的内网服务端拒绝连接错误,作为普通用户无法在代码层面修复网络。建议直接截图该报错信息,发送给您的券商客户经理或 ptrade 技术支持群,询问:“内网的 tushare 数据服务(10.5.42.71:7171)是否宕机或需要特殊权限?”
2. 检查代码导入方式
部分券商要求使用特定的包名来调用内网 tushare,请检查您的代码,尝试将 import tushare as ts 替换为券商定制的包(如果券商有相关文档说明):
# 尝试使用 ptrade 环境内置的定制版 tushare
import xcsc_tushare as ts
3. 使用 ptrade 原生 API 替代(强烈推荐)
在 ptrade 这种封闭的实盘/回测环境中,强烈建议优先使用 ptrade 自带的原生 API。原生 API 直接读取柜台或本地极速行情源,速度更快、稳定性极高,且不会出现第三方服务宕机的问题。
以下是常见 tushare 功能的 ptrade 原生 API 替代方案:
场景 A:获取历史 K 线数据
- tushare 方式:
ts.pro_bar() - ptrade 替代:使用
get_history()或get_price()
# 获取恒生电子过去5天的日线收盘价
df = get_history(5, '1d', 'close', security_list='600570.SS', fq='pre')
场景 B:获取股票基础信息/列表
- tushare 方式:
pro.stock_basic() - ptrade 替代:使用
get_Ashares()和get_stock_info()
# 获取当前所有A股代码列表
stock_list = get_Ashares()
# 获取单只股票基础信息(如上市日期)
info = get_stock_info('600570.SS', field=['stock_name', 'listed_date'])
场景 C:获取财务数据
- tushare 方式:
pro.balancesheet(),pro.income()等 - ptrade 替代:使用
get_fundamentals()
# 获取资产负债表中的总资产
fund_data = get_fundamentals('600570.SS', 'balance_statement', 'total_assets')
总结
遇到该错误请先向券商报障。为了保证量化策略在实盘中的健壮性,建议逐步将策略中依赖 tushare 的数据获取逻辑,迁移到 ptrade 官方提供的 get_history、get_fundamentals 等原生接口上。