跳转到内容

总览

期权希腊值不是单独的股票行情字段。TWS API 需要先定位一个具体期权合约,然后通过一档行情或期权计算接口,把 delta、gamma、vega、theta、隐含波动率等结果返回到 tickOptionComputation() 回调。

官方参考:Option Greeks

新手最容易卡在两个地方:

  • 期权合约必须足够完整,只写 symbol="AAPL"secType="OPT" 不够。
  • 实时期权 Greeks 需要同时具备期权本身和标的合约的市场数据订阅;模型计算接口则更依赖合约是否有效。
场景请求接口主要回调用途
请求实时期权 GreeksreqMktData()tickOptionComputation()订阅真实期权行情及模型值。
接收期权数据由 TWS 推送tickOptionComputation()读取 delta、gamma、vega、theta、iv、option price 等字段。
计算期权价格calculateOptionPrice()tickOptionComputation()给定波动率和标的价格,计算理论期权价格。
计算隐含波动率calculateImpliedVolatility()tickOptionComputation()给定期权价格和标的价格,反推隐含波动率。
字段示例中文说明
symbolAAPL标的代码。
secTypeOPT表示股票期权。
exchangeSMART交易所或智能路由。
currencyUSD币种。
lastTradeDateOrContractMonth20260615到期日或合约月份。
strike300.0行权价。
rightC / PC 是看涨期权,P 是看跌期权。
multiplier100合约乘数,美股期权常见为 100。
tradingClassAAPL交易类别,期权链返回中会提供。
from ibapi.contract import Contract
def aapl_call_option() -> Contract:
"""构造一个 AAPL 看涨期权合约。实际项目中到期日和行权价应来自期权链。"""
contract = Contract()
contract.symbol = "AAPL"
contract.secType = "OPT"
contract.exchange = "SMART"
contract.currency = "USD"
contract.lastTradeDateOrContractMonth = "20260615"
contract.strike = 300.0
contract.right = "C"
contract.multiplier = "100"
contract.tradingClass = "AAPL"
return contract

实际开发中,不建议手写到期日和行权价。更稳妥的流程是:

  1. 先用 reqContractDetails() 找到标的股票的 conId
  2. 再用 reqSecDefOptParams() 获取可用到期日、行权价、交易所和 tradingClass
  3. 构造具体期权合约后,再用 reqContractDetails() 确认它能唯一匹配。
  4. 合约详情确认成功后,再请求 Greeks 或计算价格。

AAPL 期权链参数可以返回,并且可以从期权链中构造出一个能被 reqContractDetails() 唯一识别的具体期权合约:

CONNECTED=True
SECDEF_END=True
AAPL_OPTION_ROWS=20
SELECTED_OPTION=symbol=AAPL;expiry=20260615;strike=300.0;right=C;exchange=SMART;tradingClass=AAPL
OPTION_CONTRACT_DETAILS=1
OPTION_DETAIL=conId=888142962;localSymbol=AAPL 260615C00300000;tradingClass=AAPL;exchange=SMART;lastTradeDateOrContractMonth=20260615;strike=300.0;right=C;multiplier=100

模型计算接口也能返回 tickOptionComputation()

GREEKS=reqId=97604;tickType=53;iv=1.308927;delta=None;gamma=None;vega=None;theta=None;optPrice=10.0;undPrice=300.0
GREEKS=reqId=97603;tickType=53;iv=0.25;delta=0.506375;gamma=0.083872;vega=0.076269;theta=-0.659189;optPrice=1.926125;undPrice=300.0

实时行情 Greeks 请求可能先收到部分回调,但如果账号没有对应期权市场数据订阅,仍会收到权限错误:

GREEKS=reqId=97602;tickType=13;iv=0.193789;delta=0.044579;gamma=0.018394;vega=0.02568;theta=-0.066035;optPrice=0.093621;undPrice=None
ERROR=reqId=97602;code=354;msg=未订阅所请求的市场数据...:延迟市场数据可用。:AAPL JUN 15 '26 300 Call/TOP/ALL

所以本组结论要分开看:期权链和模型计算可以返回;实时行情 Greeks 是否完整、稳定返回,仍取决于期权市场数据订阅。

错误码含义处理方式
200未找到证券定义检查到期日、行权价、right、交易所、tradingClass 和乘数。
354市场数据订阅不足检查期权行情权限、标的行情权限和 API 行情权限。
没有 tickOptionComputation() 或字段为 None没有真实订阅、权限不足、模型无法给出该字段或等待时间太短先确认合约详情,再确认行情权限和消息线程。
返回 UNSET某个字段在这次回调中不可用不要把 UNSET 当作 0。

期权 Greeks 比股票一档行情更依赖合约定位。建议先把“期权链 → 合约详情 → 行情/计算”三步拆开测试,不要一开始就把它和交易策略、订单逻辑写在一起。