在 TWS 中查找合约详情
写 API 代码前,先在 TWS 界面中确认合约,是排查合约歧义最直观的方法。尤其是期权、期货、债券、外汇和同名股票,单靠代码容易填错字段。
官方文档也建议从 TWS 本身确认合约描述:在 TWS 中双击某个合约,或右键合约后进入 Contract Info -> Description 查看合约描述;需要更完整信息时,可以进入 Contract Info -> Details。
什么时候需要看 TWS 界面
Section titled “什么时候需要看 TWS 界面”| 场景 | 为什么要看界面 |
|---|---|
| 搜索结果有多个同名代码 | 确认哪一个才是要交易或查询的合约 |
| 股票代码跨市场重复 | 确认主要交易所、币种和产品类型 |
| 期权合约无法返回 | 核对到期日、行权价、看涨/看跌、乘数和交易类别 |
| 期货合约无法返回 | 核对合约月份、交易所、本地代码和交易类别 |
| API 返回歧义错误 | 用界面信息补足 primaryExchange、localSymbol 或 tradingClass |
| 下单前做人工确认 | 确认代码不是看错市场、看错币种或看错到期月份 |
TWS 界面适合人工确认,API 适合程序验证。两者结合,最不容易写错。
在界面里要确认什么
Section titled “在界面里要确认什么”| TWS 中看到的信息 | API 字段 | 说明 |
|---|---|---|
| 标的代码 | symbol | 股票代码、外汇基础货币、期货根代码、期权底层代码 |
| 产品类型 | secType | 股票、期权、期货、外汇等 |
| 交易所 / 路由 | exchange | 股票常见 SMART,外汇常见 IDEALPRO |
| 主要交易所 | primaryExchange | 股票消除歧义常用,不要写成 SMART |
| 币种 | currency | 美股通常 USD,港股通常 HKD |
| 到期日 / 合约月份 | lastTradeDateOrContractMonth | 期权、期货、期货期权常用 |
| 行权价 | strike | 期权字段 |
| 看涨/看跌 | right | C 或 P |
| 合约乘数 | multiplier | 美股股票期权常见 100,其他产品要以实际合约为准 |
| 本地代码 | localSymbol | 交易所或 TWS 显示用代码 |
| 交易类别 | tradingClass | 期权链、交易规则和部分产品区分时很有用 |
| 合约 ID | conId | IBKR 合约 ID,最适合程序保存 |
股票通常只需要确认代码、币种和主要交易所。期权和期货还要确认到期日、行权价、乘数、本地代码和交易类别。
建议操作流程
Section titled “建议操作流程”- 在 TWS 搜索框输入标的代码,例如
AAPL。 - 选择正确产品类型,例如股票、期权、期货或外汇。
- 在报价行、期权链或合约列表中选中目标合约。
- 双击合约,或右键进入
Contract Info -> Description。 - 记录交易所、币种、主要交易所、到期日、乘数、本地代码等字段。
- 回到代码中构造
Contract。 - 再用
reqContractDetails()验证 API 返回的conId和界面信息是否一致。
界面路径可能随 TWS 版本和布局略有不同,但核心思路不变:先在 TWS 中选中唯一合约,再把看到的信息翻译成 Contract 字段。
AAPL 对照示例
Section titled “AAPL 对照示例”如果你在 TWS 里确认的是 AAPL 美股股票,代码里可以先这样写:
from ibapi.contract import Contract
contract = Contract()contract.symbol = "AAPL" # TWS 中看到的股票代码contract.secType = "STK" # 股票contract.exchange = "SMART" # 美股常用智能路由contract.currency = "USD" # 美股计价币种用 reqContractDetails() 检查后,TWS 模拟账户返回:
CONNECTED=TrueREQUEST_SENT=TrueCONTRACT_DETAILS_END_RECEIVED=TrueCONTRACT_DETAILS_ROW_COUNT=1SEC_TYPE_COUNTS=STK:1EXCHANGE_COUNTS=SMART:1PRIMARY_EXCHANGE_COUNTS=NASDAQ:1FIRST_CONID=265598FIRST_SYMBOL=AAPLFIRST_LOCAL_SYMBOL=AAPLFIRST_TRADING_CLASS=NMSFIRST_LONG_NAME=APPLE INCFIRST_MIN_TICK=0.01FIRST_TIME_ZONE_ID=US/EasternFIRST_MARKET_NAME=NMSFIRST_VALID_EXCHANGES=SMART,AMEX,NYSE,CBOE,PHLX,ISE,CHX,ARCA,NASDAQ,DRCTEDGE,BEX,BATS,EDGEA,BYX,IEX,EDGX,FOXRIVER,PEARL,NYSENAT,LTSE,MEMX,IBEOS,OVERNIGHT,TPLUS0,PSX,T24XINFO_CODES=2104,2106,2158NON_INFO_ERROR_COUNT=0IS_CONNECTED_AFTER_DISCONNECT=False这说明界面选择和 API 合约定义一致:AAPL 被定位为 1 条股票合约,主要交易所是 NASDAQ,交易类别是 NMS。
为什么还要用 API 验证
Section titled “为什么还要用 API 验证”TWS 界面适合人工确认,但程序最终依赖 API 字段。界面确认后,仍建议运行 reqContractDetails(),把返回的 conId、primaryExchange、tradingClass、validExchanges 保存下来。
这些字段在请求行情、历史数据、最小报价单位、期权链、订单校验时都很有用。
TWS 能下单的合约,API 一定能定位吗?
Section titled “TWS 能下单的合约,API 一定能定位吗?”通常可以,但 API 字段必须足够明确。界面里你点选的是唯一合约,代码里如果字段太少,可能会得到多个匹配或错误合约。
股票一定要填 primaryExchange 吗?
Section titled “股票一定要填 primaryExchange 吗?”不一定。常见美股用 SMART + USD 往往能查到,但遇到同代码歧义时,应补 primaryExchange。primaryExchange 表示主要挂牌交易所,不能写成 SMART。
可以直接复制 TWS 的本地代码吗?
Section titled “可以直接复制 TWS 的本地代码吗?”可以辅助使用,但不建议只依赖 localSymbol。更稳妥的是查出 conId 后保存,并同时保留 symbol、secType、currency 等便于人读的字段。
需要保留界面记录吗?
Section titled “需要保留界面记录吗?”不是必须。文档和代码真正依赖的是字段。只有在团队培训、客服排查或记录某个复杂期权/期货合约时,保留界面记录才有额外价值。