错误代码
错误代码表示某个请求或客户端状态不满足要求。和系统信息码不同,错误代码通常需要你修改合约字段、权限、请求顺序或连接状态。
常见错误代码
Section titled “常见错误代码”| 代码 | 常见含义 | 排查方向 |
|---|---|---|
200 | 未找到证券定义 | 检查 Contract 字段、交易所、到期日、行权价、primaryExchange、localSymbol 或 conId。 |
300 | 找不到对应 tickerId | 常见于取消一个没有成功建立的行情订阅。 |
354 | 没有订阅请求的行情 | 常见于普通行情权限不足。 |
501 | 已连接 | 避免重复调用 connect()。 |
504 | 未连接 | 请求发送前没有完成连接或连接已断开。 |
518 | 发送合约详情请求失败 | 通常是连接或客户端状态问题。 |
10089 | API 行情需要额外订阅 | 合约能识别,但账户没有对应 API 行情权限。 |
10167 | 显示延迟市场数据 | 实时行情不可用,但延迟行情可用且正在返回。 |
10168 | 行情没有订阅且延迟未启用 | 当前请求既没有实时权限,也没有启用可用延迟行情。 |
不同产品和账户权限下,错误文字可能是中文或英文。代码值更适合作为程序判断依据。
真实错误样本
Section titled “真实错误样本”无效合约详情请求:
ERROR=reqId=99101;code=200;msg=未找到该请求的证券定义这说明 TWS 没有识别这组 Contract 字段。应先回到合约详情章节,补充或修正 symbol、secType、exchange、currency、primaryExchange、localSymbol、到期日、行权价等字段。
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() | 订单保护、价格、权限、合约状态 |
| 取消失败 | 原请求是否成功建立 | reqId 或 orderId 是否写错 |
错误处理代码要保留原始 reqId、错误码和错误文本,不要只把它翻译成一句“请求失败”。