总览
期权希腊值不是单独的股票行情字段。TWS API 需要先定位一个具体期权合约,然后通过一档行情或期权计算接口,把 delta、gamma、vega、theta、隐含波动率等结果返回到 tickOptionComputation() 回调。
官方参考:Option Greeks
新手最容易卡在两个地方:
- 期权合约必须足够完整,只写
symbol="AAPL"和secType="OPT"不够。 - 实时期权 Greeks 需要同时具备期权本身和标的合约的市场数据订阅;模型计算接口则更依赖合约是否有效。
| 场景 | 请求接口 | 主要回调 | 用途 |
|---|---|---|---|
| 请求实时期权 Greeks | reqMktData() | tickOptionComputation() | 订阅真实期权行情及模型值。 |
| 接收期权数据 | 由 TWS 推送 | tickOptionComputation() | 读取 delta、gamma、vega、theta、iv、option price 等字段。 |
| 计算期权价格 | calculateOptionPrice() | tickOptionComputation() | 给定波动率和标的价格,计算理论期权价格。 |
| 计算隐含波动率 | calculateImpliedVolatility() | tickOptionComputation() | 给定期权价格和标的价格,反推隐含波动率。 |
期权合约字段
Section titled “期权合约字段”| 字段 | 示例 | 中文说明 |
|---|---|---|
symbol | AAPL | 标的代码。 |
secType | OPT | 表示股票期权。 |
exchange | SMART | 交易所或智能路由。 |
currency | USD | 币种。 |
lastTradeDateOrContractMonth | 20260615 | 到期日或合约月份。 |
strike | 300.0 | 行权价。 |
right | C / P | C 是看涨期权,P 是看跌期权。 |
multiplier | 100 | 合约乘数,美股期权常见为 100。 |
tradingClass | AAPL | 交易类别,期权链返回中会提供。 |
Python 合约示例
Section titled “Python 合约示例”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实际开发中,不建议手写到期日和行权价。更稳妥的流程是:
- 先用
reqContractDetails()找到标的股票的conId。 - 再用
reqSecDefOptParams()获取可用到期日、行权价、交易所和tradingClass。 - 构造具体期权合约后,再用
reqContractDetails()确认它能唯一匹配。 - 合约详情确认成功后,再请求 Greeks 或计算价格。
AAPL 期权链参数可以返回,并且可以从期权链中构造出一个能被 reqContractDetails() 唯一识别的具体期权合约:
CONNECTED=TrueSECDEF_END=TrueAAPL_OPTION_ROWS=20SELECTED_OPTION=symbol=AAPL;expiry=20260615;strike=300.0;right=C;exchange=SMART;tradingClass=AAPLOPTION_CONTRACT_DETAILS=1OPTION_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.0GREEKS=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=NoneERROR=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 比股票一档行情更依赖合约定位。建议先把“期权链 → 合约详情 → 行情/计算”三步拆开测试,不要一开始就把它和交易策略、订单逻辑写在一起。