跳转到内容

错误代码

错误代码表示某个请求或客户端状态不满足要求。和系统信息码不同,错误代码通常需要你修改合约字段、权限、请求顺序或连接状态。

代码常见含义排查方向
200未找到证券定义检查 Contract 字段、交易所、到期日、行权价、primaryExchangelocalSymbolconId
300找不到对应 tickerId常见于取消一个没有成功建立的行情订阅。
354没有订阅请求的行情常见于普通行情权限不足。
501已连接避免重复调用 connect()
504未连接请求发送前没有完成连接或连接已断开。
518发送合约详情请求失败通常是连接或客户端状态问题。
10089API 行情需要额外订阅合约能识别,但账户没有对应 API 行情权限。
10167显示延迟市场数据实时行情不可用,但延迟行情可用且正在返回。
10168行情没有订阅且延迟未启用当前请求既没有实时权限,也没有启用可用延迟行情。

不同产品和账户权限下,错误文字可能是中文或英文。代码值更适合作为程序判断依据。

无效合约详情请求:

ERROR=reqId=99101;code=200;msg=未找到该请求的证券定义

这说明 TWS 没有识别这组 Contract 字段。应先回到合约详情章节,补充或修正 symbolsecTypeexchangecurrencyprimaryExchangelocalSymbol、到期日、行权价等字段。

AAPL 行情订阅:

ERROR=reqId=99102;code=10089;msg=请求的市场数据对于API来说需要额外订阅。点击“市场数据连接”对话框中的链接获取更多详情。:AAPL NASDAQ.NMS/TOP/ALL

这说明 AAPL 合约字段可被 TWS 识别,但账户通过 API 获取该行情需要额外订阅。

如果请求实时行情且延迟行情未启用,也可能看到:

ERROR=reqId=99102;code=10168;msg=请求的市场数据没有订阅。延迟市场数据未启用。

这仍然属于行情权限或行情类型问题,不是合约定义错误。

取消未建立的行情订阅:

ERROR=reqId=99102;code=300;msg=无法使用tickerId找到EId::99102

这是因为前面的行情订阅没有成功建立,随后调用 cancelMktData(99102) 时,TWS 找不到这个有效订阅。

场景先查什么再查什么
合约详情失败Contract 字段TWS 是否能搜索到该合约
行情失败行情权限合约详情是否能返回
下单失败openOrder()orderStatus()error()订单保护、价格、权限、合约状态
取消失败原请求是否成功建立reqIdorderId 是否写错

错误处理代码要保留原始 reqId、错误码和错误文本,不要只把它翻译成一句“请求失败”。