跳转到内容

在 TWS 中查找合约详情

写 API 代码前,先在 TWS 界面中确认合约,是排查合约歧义最直观的方法。尤其是期权、期货、债券、外汇和同名股票,单靠代码容易填错字段。

官方文档也建议从 TWS 本身确认合约描述:在 TWS 中双击某个合约,或右键合约后进入 Contract Info -> Description 查看合约描述;需要更完整信息时,可以进入 Contract Info -> Details

场景为什么要看界面
搜索结果有多个同名代码确认哪一个才是要交易或查询的合约
股票代码跨市场重复确认主要交易所、币种和产品类型
期权合约无法返回核对到期日、行权价、看涨/看跌、乘数和交易类别
期货合约无法返回核对合约月份、交易所、本地代码和交易类别
API 返回歧义错误用界面信息补足 primaryExchangelocalSymboltradingClass
下单前做人工确认确认代码不是看错市场、看错币种或看错到期月份

TWS 界面适合人工确认,API 适合程序验证。两者结合,最不容易写错。

TWS 中看到的信息API 字段说明
标的代码symbol股票代码、外汇基础货币、期货根代码、期权底层代码
产品类型secType股票、期权、期货、外汇等
交易所 / 路由exchange股票常见 SMART,外汇常见 IDEALPRO
主要交易所primaryExchange股票消除歧义常用,不要写成 SMART
币种currency美股通常 USD,港股通常 HKD
到期日 / 合约月份lastTradeDateOrContractMonth期权、期货、期货期权常用
行权价strike期权字段
看涨/看跌rightCP
合约乘数multiplier美股股票期权常见 100,其他产品要以实际合约为准
本地代码localSymbol交易所或 TWS 显示用代码
交易类别tradingClass期权链、交易规则和部分产品区分时很有用
合约 IDconIdIBKR 合约 ID,最适合程序保存

股票通常只需要确认代码、币种和主要交易所。期权和期货还要确认到期日、行权价、乘数、本地代码和交易类别。

  1. 在 TWS 搜索框输入标的代码,例如 AAPL
  2. 选择正确产品类型,例如股票、期权、期货或外汇。
  3. 在报价行、期权链或合约列表中选中目标合约。
  4. 双击合约,或右键进入 Contract Info -> Description
  5. 记录交易所、币种、主要交易所、到期日、乘数、本地代码等字段。
  6. 回到代码中构造 Contract
  7. 再用 reqContractDetails() 验证 API 返回的 conId 和界面信息是否一致。

界面路径可能随 TWS 版本和布局略有不同,但核心思路不变:先在 TWS 中选中唯一合约,再把看到的信息翻译成 Contract 字段。

如果你在 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=True
REQUEST_SENT=True
CONTRACT_DETAILS_END_RECEIVED=True
CONTRACT_DETAILS_ROW_COUNT=1
SEC_TYPE_COUNTS=STK:1
EXCHANGE_COUNTS=SMART:1
PRIMARY_EXCHANGE_COUNTS=NASDAQ:1
FIRST_CONID=265598
FIRST_SYMBOL=AAPL
FIRST_LOCAL_SYMBOL=AAPL
FIRST_TRADING_CLASS=NMS
FIRST_LONG_NAME=APPLE INC
FIRST_MIN_TICK=0.01
FIRST_TIME_ZONE_ID=US/Eastern
FIRST_MARKET_NAME=NMS
FIRST_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,T24X
INFO_CODES=2104,2106,2158
NON_INFO_ERROR_COUNT=0
IS_CONNECTED_AFTER_DISCONNECT=False

这说明界面选择和 API 合约定义一致:AAPL 被定位为 1 条股票合约,主要交易所是 NASDAQ,交易类别是 NMS

TWS 界面适合人工确认,但程序最终依赖 API 字段。界面确认后,仍建议运行 reqContractDetails(),把返回的 conIdprimaryExchangetradingClassvalidExchanges 保存下来。

这些字段在请求行情、历史数据、最小报价单位、期权链、订单校验时都很有用。

TWS 能下单的合约,API 一定能定位吗?

Section titled “TWS 能下单的合约,API 一定能定位吗?”

通常可以,但 API 字段必须足够明确。界面里你点选的是唯一合约,代码里如果字段太少,可能会得到多个匹配或错误合约。

不一定。常见美股用 SMART + USD 往往能查到,但遇到同代码歧义时,应补 primaryExchangeprimaryExchange 表示主要挂牌交易所,不能写成 SMART

可以直接复制 TWS 的本地代码吗?

Section titled “可以直接复制 TWS 的本地代码吗?”

可以辅助使用,但不建议只依赖 localSymbol。更稳妥的是查出 conId 后保存,并同时保留 symbolsecTypecurrency 等便于人读的字段。

不是必须。文档和代码真正依赖的是字段。只有在团队培训、客服排查或记录某个复杂期权/期货合约时,保留界面记录才有额外价值。