请求期权希腊值
请求期权希腊值使用的仍然是 reqMktData()。区别在于合约必须是具体的期权合约,TWS 才能在 tickOptionComputation() 回调里返回模型数据。
在请求 Greeks 前,先确认三件事:
| 检查项 | 为什么重要 |
|---|---|
期权合约能被 reqContractDetails() 找到 | 找不到合约时,请求 Greeks 会直接失败。 |
| 账号具备对应期权行情权限 | 没有权限时,可能没有 Greeks 或返回行情订阅错误。 |
程序已经收到 nextValidId() | 说明 Socket 握手完成,消息线程正在工作。 |
Python 示例
Section titled “Python 示例”from ibapi.contract import Contract
def build_option_contract() -> Contract: """示例期权合约。实际项目应先从期权链中选择到期日和行权价。""" 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
# 请求实时期权 Greeks。app.reqMktData( 97602, build_option_contract(), "", False, False, [],)| 参数 | 示例 | 中文说明 |
|---|---|---|
tickerId | 97602 | 行情请求编号,回调时用来识别是哪一个期权。 |
contract | build_option_contract() | 具体期权合约。 |
genericTickList | "" | 期权 Greeks 不需要额外 generic tick 才能触发模型回调。 |
snapshot | False | False 表示流式订阅。 |
regulatorySnapshot | False | 不请求监管快照。 |
mktDataOptions | [] | 通常留空。 |
Greeks 请求本质上是行情订阅。不需要继续接收时,应主动取消:
app.cancelMktData(97602)如果请求因为合约或权限问题没有真正建立,取消时可能收到 300。这种情况通常不是新错误,而是前面的订阅没有成功。
AAPL 期权链可以返回,并且能构造出一个可识别的 AAPL 看涨期权合约:
SECDEF_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实时 Greeks 请求发送后,账号可能收到部分 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因此,代码结构和合约定位已经能到达 TWS;真实行情 Greeks 是否完整返回,取决于标的和期权的市场数据权限。实际使用时,应先从 TWS 合约详情窗口或 reqContractDetails() 返回中确认一个具体期权合约,再请求 Greeks。