CME 事件合约
CME 事件合约在 TWS API 中通常以期货期权形式暴露,常见 secType 是 FOP。交易所不一定总是 CME,也可能跟随底层期货市场使用 CBOT、COMEX、NYMEX 等。和 ForecastEx 不同,CME 事件合约更接近期货期权模型,因此到期日、乘数、交易类别和本地代码更重要。
基础合约形态
Section titled “基础合约形态”from ibapi.contract import Contract
def cme_event_contract(): contract = Contract() contract.symbol = "MET" # 示例根代码 contract.secType = "FOP" # 期货期权 contract.exchange = "CME" # CME 交易所 contract.currency = "USD" return contract这个最小写法只适合演示字段结构。真实请求时,通常还需要 lastTradeDateOrContractMonth、strike、right、multiplier、tradingClass 或 localSymbol。
| 字段 | 中文含义 | 写法说明 |
|---|---|---|
symbol | CME 根代码 | 不是完整合约唯一标识。 |
secType | 证券类型 | CME 事件合约常见为 FOP。 |
exchange | 交易所 | 可能是 CME、CBOT、COMEX、NYMEX 等。 |
lastTradeDateOrContractMonth | 到期日或合约月份 | 期货期权类合约通常需要。 |
strike | 行权价 | 用来区分事件结果或价格层级。 |
right | 方向 | C 或 P,以合约详情为准。 |
multiplier | 乘数 | 影响订单名义金额和风险。 |
localSymbol | 本地代码 | 适合从 TWS 合约详情读取后直接用于验证。 |
为什么不能只写根代码
Section titled “为什么不能只写根代码”股票 AAPL 加上 STK/SMART/USD 往往可以解析成一个明确标的;但期货期权和事件合约不是这样。只写根代码时,TWS 可能不知道你要哪一个到期日、哪一个事件结果、哪一个行权价。
开发时建议先用 TWS 手工找到一条具体合约,再把合约详情中的字段转成代码。
contract = Contract()contract.conId = 123456789 # 使用合约详情返回的 conIdcontract.exchange = "CME"如果已经拿到 conId,请求行情或下单时通常更稳定。但也要注意:conId 对应的合约过期后,不能继续当作有效合约使用。
TWS 模拟账户可以正常连接 API,但用宽泛 CME 示例字段请求合约详情时没有返回明细,也没有非信息类错误:
REQ_SENT=CME_MET_BROAD;reqId=95193;symbol=MET;secType=FOP;exchange=CMEDETAIL_END_CME_MET_BROAD=FalseDETAIL_ROWS_CME_MET_BROAD=0NON_INFO_ERROR_COUNT=0这说明宽泛 MET/FOP/CME 不一定能直接解析成唯一事件合约。CME 事件合约文档应以字段解释和确认流程为主:先在 TWS 中找到具体事件合约,再把到期日、行权价、方向、交易所、本地代码或 conId 放入 API 请求。