跳转到内容

CME 事件合约

CME 事件合约在 TWS API 中通常以期货期权形式暴露,常见 secTypeFOP。交易所不一定总是 CME,也可能跟随底层期货市场使用 CBOTCOMEXNYMEX 等。和 ForecastEx 不同,CME 事件合约更接近期货期权模型,因此到期日、乘数、交易类别和本地代码更重要。

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

这个最小写法只适合演示字段结构。真实请求时,通常还需要 lastTradeDateOrContractMonthstrikerightmultipliertradingClasslocalSymbol

字段中文含义写法说明
symbolCME 根代码不是完整合约唯一标识。
secType证券类型CME 事件合约常见为 FOP
exchange交易所可能是 CMECBOTCOMEXNYMEX 等。
lastTradeDateOrContractMonth到期日或合约月份期货期权类合约通常需要。
strike行权价用来区分事件结果或价格层级。
right方向CP,以合约详情为准。
multiplier乘数影响订单名义金额和风险。
localSymbol本地代码适合从 TWS 合约详情读取后直接用于验证。

股票 AAPL 加上 STK/SMART/USD 往往可以解析成一个明确标的;但期货期权和事件合约不是这样。只写根代码时,TWS 可能不知道你要哪一个到期日、哪一个事件结果、哪一个行权价。

开发时建议先用 TWS 手工找到一条具体合约,再把合约详情中的字段转成代码。

contract = Contract()
contract.conId = 123456789 # 使用合约详情返回的 conId
contract.exchange = "CME"

如果已经拿到 conId,请求行情或下单时通常更稳定。但也要注意:conId 对应的合约过期后,不能继续当作有效合约使用。

TWS 模拟账户可以正常连接 API,但用宽泛 CME 示例字段请求合约详情时没有返回明细,也没有非信息类错误:

REQ_SENT=CME_MET_BROAD;reqId=95193;symbol=MET;secType=FOP;exchange=CME
DETAIL_END_CME_MET_BROAD=False
DETAIL_ROWS_CME_MET_BROAD=0
NON_INFO_ERROR_COUNT=0

这说明宽泛 MET/FOP/CME 不一定能直接解析成唯一事件合约。CME 事件合约文档应以字段解释和确认流程为主:先在 TWS 中找到具体事件合约,再把到期日、行权价、方向、交易所、本地代码或 conId 放入 API 请求。