接收期权数据
期权 Greeks 和模型价格通过 tickOptionComputation() 回调接收。无论数据来自 reqMktData()、calculateOptionPrice() 还是 calculateImpliedVolatility(),最终都会进入这个回调。
Python API 中的回调形式如下:
def tickOptionComputation( self, reqId, tickType, tickAttrib, impliedVol, delta, optPrice, pvDividend, gamma, vega, theta, undPrice,): ...| 字段 | 中文说明 |
|---|---|
reqId | 请求编号,对应 reqMktData()、calculateOptionPrice() 或 calculateImpliedVolatility() 的请求 ID。 |
tickType | Tick 类型,用来区分 bid/ask/last/model 等来源。 |
tickAttrib | Tick 属性对象,不同 API 版本字段可能不同。 |
impliedVol | 隐含波动率。 |
delta | 标的价格变化 1 单位时,期权价格理论变化量。 |
optPrice | 期权模型价格或对应来源的期权价格。 |
pvDividend | 预期股息现值。 |
gamma | 标的价格变化时 delta 的变化速度。 |
vega | 波动率变化时,期权价格的敏感度。 |
theta | 时间流逝对期权价格的影响。 |
undPrice | 模型使用的标的价格。 |
常见的期权计算 tick 类型如下:
tickType | 常见来源 | 中文说明 |
|---|---|---|
10 | Bid Option Computation | 买价对应的期权模型值。 |
11 | Ask Option Computation | 卖价对应的期权模型值。 |
12 | Last Option Computation | 最新成交价对应的期权模型值。 |
13 | Model Option Computation | TWS 模型计算值。 |
53 | 自定义计算请求 | 常见于 calculateOptionPrice() 或 calculateImpliedVolatility() 返回。 |
def tickOptionComputation( self, reqId, tickType, tickAttrib, impliedVol, delta, optPrice, pvDividend, gamma, vega, theta, undPrice,): """接收期权 Greeks。不要把未设置值当作 0。""" print( "reqId=", reqId, "tickType=", tickType, "iv=", impliedVol, "delta=", delta, "gamma=", gamma, "vega=", vega, "theta=", theta, "optionPrice=", optPrice, "underlyingPrice=", undPrice, )TWS API 可能用很大的哨兵值表示字段未设置。开发时应先判断字段是否有效,再参与计算。
def is_unset_number(value: float) -> bool: """判断 TWS API 常见未设置数值。""" return value is None or abs(float(value)) > 1e100不要把未设置值直接显示成 0,否则用户会误以为 delta、vega 或期权价格真的为 0。
如果同一个程序里同时请求行情 Greeks 和模型计算,建议保留请求 ID 映射:
request_names = { 97602: "实时期权 Greeks", 97603: "计算期权价格", 97604: "计算隐含波动率",}
def tickOptionComputation(self, reqId, tickType, tickAttrib, impliedVol, delta, optPrice, pvDividend, gamma, vega, theta, undPrice): name = request_names.get(reqId, "未知请求") print(name, tickType, impliedVol, delta, optPrice)这样排查日志时能知道某一行 Greeks 来自真实行情,还是来自本地模型计算请求。
参考返回样例
Section titled “参考返回样例”calculateOptionPrice() 给定 25% 波动率和 300 标的价格时,返回如下:
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.0calculateImpliedVolatility() 给定期权价格 10.0 和 300 标的价格时,返回如下:
GREEKS=reqId=97604;tickType=53;iv=1.308927;delta=None;gamma=None;vega=None;theta=None;optPrice=10.0;undPrice=300.0这里的 None 表示该计算返回没有给出对应字段,不应当显示成 0。实时行情 Greeks 如果权限不完整,可能先返回部分 Greeks,再通过 error() 返回 354 权限提示;程序应同时处理回调值和错误码。