先区分运行故障、即时交易结果和后续柜台回报,再决定检查什么、是否需要停止操作。
错误信息在哪里看#
| 问题 | 读取位置 | 下一步 |
|---|---|---|
| 账户验证、连接或查询故障 | 捕获 ExError,读取 str(error) | 按提示检查配置或服务状态 |
| 下单、撤单即时拒绝 | TradingResult.message | 核对参数、账户状态和可平数量 |
| 提交后收到订单拒绝 | Order.status、Order.status_msg | 通过更新循环查看订单回报 |
| 撤单异步失败 | Order.cancel_error,同时检查订单状态 | 核对订单是否仍有效或已经成交 |
| 参数或调用方式错误 | ValueError、TypeError、RuntimeError 等 | 修正参数、线程或实例生命周期 |
下单、撤单的参数或业务拒绝通常通过 TradingResult 报告;账户验证、运行故障和调用方式错误仍可能抛异常,不能只检查返回值。结果含义和订单跟踪见 下单、撤单与结果跟踪。
柜台明确拒绝认证、登录、结算确认或查询时,异常通常包含错误码和柜台原文;连接超时等故障可能只有 SDK 提示。部分异步拒单、撤单失败也只有通用提示,不保证能从 status_msg 或 cancel_error 得到详细柜台原因。
常见错误怎么处理#
| 提示或现象 | 检查与处理 |
|---|---|
| Token 无效或已重置 | 从 个人中心 复制当前有效 Token,更新本地配置 |
| 订阅已到期 | 在个人中心续费,确认权益有效后重新连接 |
| 账户已停用 | 查看账户状态或联系网站客服 |
| 尚未绑定期货账号、账号不一致 | 核对个人中心绑定值与 CtpAccount.user_id;仅使用行情无需绑定 |
| 行情请求校验失败 | 检查 SDK 版本 和系统时间 |
| CTP 认证失败 | 向期货公司核对 broker_id、AppID、AuthCode 及其适用前置 |
| CTP 登录失败 | 核对资金账号、交易密码及交易前置,并查看柜台返回的错误提示 |
| 结算确认或交易数据查询失败 | 查看异常提示,确认柜台连接和账户可用状态 |
| 多次恢复失败、账户验证暂不可用 | 检查网络和服务可用性;持续失败时联系客服 |
| 没有行情但没有异常 | 检查合约、交易时段及更新循环,见 行情排查 |
修正凭据、权益或绑定配置后重新创建 ExApi。运行期间 SDK 也会重新验证账户,启动成功不代表后续验证一定成功;重置 Token 或权益变化可能在下次验证时才被感知。
断线、超时与存量委托#
临时网络故障会自动尝试恢复;无法恢复时,以 ExError 报告。继续调用 wait_update() 才能推进更新和恢复,长时间阻塞业务代码会延迟处理。
wait_update()返回False只代表本次等待到期,不代表断线或订单失败,见 有限等待。- 交易恢复期间暂停新交易决策;恢复
READY后核对订单、成交和持仓,再继续操作。 UNKNOWN或等待超时不能作为重发依据。长期无法确认时,通过期货公司客户端等渠道核实,见 订单结果不明的处理。
验证失败、关闭实例和程序退出都不会自动撤销柜台已有委托。 认证或连接失效后,应用仍需通过可用渠道处理存量委托;不要无条件重建实例并重发订单。
捕获与记录错误#
将创建实例、查询、订阅和整个更新循环放在异常捕获范围内。下面是只读行情示例:
import time
from exsdk import ExApi, ExError
try:
with ExApi(token="YOUR_TOKEN") as api:
symbols = api.query_symbols("FUTURE", is_main=True)
if not symbols:
raise ValueError("No matching futures contracts")
quote = api.watch_quote(symbols[0])
while True:
if not api.wait_update(deadline=time.time() + 5):
continue
if quote.is_changing():
print(quote.data())
except ExError as error:
print("SDK 运行故障:", str(error))
except (ValueError, TypeError) as error:
print("检查本地参数:", str(error))
except RuntimeError as error:
print("检查调用线程和实例生命周期:", str(error))
except KeyboardInterrupt:
print("已停止")应用应检查异常和交易返回值,不能只依靠日志判断操作是否成功。调用方式错误应修正程序,而非不断重连。