错误处理与恢复

本页目录

先区分运行故障、即时交易结果和后续柜台回报,再决定检查什么、是否需要停止操作。

错误信息在哪里看#

问题读取位置下一步
账户验证、连接或查询故障捕获 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("已停止")

应用应检查异常和交易返回值,不能只依靠日志判断操作是否成功。调用方式错误应修正程序,而非不断重连。

联系我们

微信扫一扫