期权
初始化
本页所有示例均假设已完成以下初始化:
from tigeropen.quote.quote_client import QuoteClient
from tigeropen.tiger_open_config import TigerOpenClientConfig
client_config = TigerOpenClientConfig(props_path='your_config_directory_path')
quote_client = QuoteClient(client_config)详见准备工作。
获取期权到期日
QuoteClient.get_option_expirations(symbols, market=None)
说明
获取期权到期日
参数
| 参量名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | list[str] | Yes | 正股资产符号列表,最多 30 只。对于香港合约,使用 get_option_symbols 提供的符号,格式为 "CODE.HK" |
| market | tigeropen.common.consts.Market | No | 市场,US/HK,默认 None |
返回
pandas.DataFrame
各 column 的含义如下:
| 参量名 | 类型 | 描述 |
|---|---|---|
| symbol | str | 证券代码 |
| option_symbol | str | 期权代码(如指数期权可能与 symbol 不同) |
| date | str | 到日期 YYYY-MM-DD 格式的字符串 |
| timestamp | int | 到期日,精确到毫秒的时间戳 |
| period_tag | str | 期权周期标签,m 为月期权,w 为周期权 |
示例
from tigeropen.common.consts import Market
expiration = quote_client.get_option_expirations(symbols=['AAPL'], market=Market.US)
#for HK contracts
#expirationHK = quote_client.get_option_expirations(symbols=["MET.HK"],market=Market.HK)
print(expiration.head())返回示例
symbol option_symbol date timestamp period_tag
0 AAPL AAPL 2025-11-14 1763096400000 w
1 AAPL AAPL 2025-11-21 1763701200000 m
2 AAPL AAPL 2025-11-28 1764306000000 w
3 AAPL AAPL 2025-12-05 1764910800000 w
4 AAPL AAPL 2025-12-12 1765515600000 w
5 AAPL AAPL 2025-12-19 1766120400000 m
关于指数的特殊期权符号
标普 500 .SPX: 月度期权符号是 SPX, 周期权和季度期权的符号都是 SPXW
纳斯达克 100 : 月期权 NDX, 周期权 NDXP
VIX 指数 : 月期权 VIX, 周期权: VIXW
请求频率
基础限流为 60 次/分钟。
获取期权实时行情
QuoteClient.get_option_briefs(identifiers, market=None, timezone=None)
说明
获取期权实时行情
参数
| 参量名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| identifiers | list[str] | Yes | 期权代码列表,最多 30 只 |
| market | tigeropen.common.consts.Market | No | 请求级市场,US:美股 HK:港股。省略时,只要任一解析出的正股代码以 .HK 结尾,整个请求使用 HK;否则服务端默认 US。请勿在同一请求混合 US/HK 合约。 |
| timezone | str | No | 时区, 如 'US/Eastern', 'Asia/Hong_Kong' |
返回
pandas.DataFrame
各 column 的含义如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| identifier | str | 期权代码 |
| symbol | str | 股票代码 |
| expiry | int | 到期时间(毫秒,当天 0 点) |
| strike | float | 行权价 |
| put_call | str | 方向 (PUT/CALL) |
| multiplier | int | 乘数,美股期权默认 100 |
| ask_price | float | 卖盘价格 |
| ask_size | int | 卖盘数量 |
| bid_price | float | 买盘价格 |
| bid_size | int | 买盘数量 |
| pre_close | float | 前一交易日收盘价 |
| latest_price | float | 最新价格 |
| latest_time | int | 最新成交时间,毫秒时间戳 |
| volume | int | 成交量 |
| open_interest | int | 未平仓量 |
| open | float | 开盘价 |
| high | float | 最高价 |
| low | float | 最低价 |
| change | float | 涨跌额 |
| rates_bonds | float | 一年期美国国债利率,每天更新一次,如:0.0078 表示实际利率为:0.78% |
| volatility | str | 历史波动率 |
| mid_price | float | 中间价 |
| mid_timestamp | int | 中间价时间戳 |
| mark_price | float | 标记价 |
| mark_timestamp | int | 标记价时间戳 |
| pre_mark_price | float | 昨标记价 |
| selling_return | float | 卖出年化收益 |
示例
from tigeropen.common.consts import Market
briefs = quote_client.get_option_briefs(['AAPL 230317C00135000'], market=Market.US)
# 港股期权
# briefs = quote_client.get_option_briefs(['TCH.HK 230317C00135000'], market=Market.HK)返回示例
identifier symbol expiry strike put_call multiplier ask_price open \
NVDA 260116C00100000 NVDA 1768539600000 100.0 CALL 100 79.05 65 \
ask_size bid_price bid_size pre_close latest_price latest_time volume open_interest \
78.0 178 78.7 78.2 None 36 84175 78.09 \
high low rates_bonds volatility change
79.57 77.89 0.036165 29.29% -0.5
请求频率
基础限流为 120 次/分钟。
获取期权链
QuoteClient.get_option_chain(symbol, expiry, option_filter=None, return_greek_value=None, market=None, timezone=None, **kwargs)
期权链 Greeks 已废弃
期权链请求中的 Greeks 返回开关、Greeks 筛选字段/模型,以及返回字段
delta、gamma、theta、vega、rho均已废弃。相关值每日更新,时效性不足以支持盘中使用,请勿用于实时交易决策。请使用期权计算器,并传入当前标的价格、期权价格、波动率、利率和到期时间等市场输入进行计算。
说明
获取期权链
参数
| 参量名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbol | str | Yes | 期权对应的股票代码 |
| expiry | str 或 int | Yes | 期权到期日,毫秒单位的数字时间戳或日期字符串,如 1705640400000 或 '2024-01-19' |
| option_filter | tigeropen.quote.domain.filter.OptionFilter | No | 过滤参数,可选 |
| return_greek_value | bool | No | 已废弃。是否返回希腊值,默认不返回 |
| market | tigeropen.common.consts.Market | No | 请求级市场,支持 US/HK。省略时,正股代码以 .HK 结尾则使用 HK,否则服务端默认 US。 |
| timezone | str | No | 时区,如 'US/Eastern', 'Asia/Hong_Kong' |
过滤参数:
各未废弃筛选指标除 in_the_money 外,使用时均对应 _min 后缀(范围最小值)或 _max 后缀(范围最大值)。delta_min、theta_max 等 Greeks 筛选字段已废弃。
OptionFilter 可筛选指标如下:
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| implied_volatility | float | No | 隐含波动率, 反映市场预期的未来股价波动情况, 隐含波动率越高, 说明预期股价波动越剧烈. |
| in_the_money | bool | No | 是否价内 |
| open_interest | int | No | 未平仓量, 每个交易日完结时市场参与者手上尚未平仓的合约数. 反映市场的深度和流动性. |
| delta | float | No | 已废弃。delta 范围筛选 |
| gamma | float | No | 已废弃。gamma 范围筛选 |
| theta | float | No | 已废弃。theta 范围筛选 |
| vega | float | No | 已废弃。vega 范围筛选 |
| rho | float | No | 已废弃。rho 范围筛选 |
返回
pandas.DataFrame
| 字段名 | 类型 | 描述 |
|---|---|---|
| identifier | str | 期权代码 |
| symbol | str | 期权对应的正股代码 |
| expiry | int | 期权到期日,毫秒级别的时间戳 |
| strike | float | 行权价 |
| put_call | str | 期权的方向 |
| multiplier | int | 乘数 |
| ask_price | float | 卖价 |
| ask_size | int | 卖量 |
| bid_price | float | 买价 |
| bid_size | int | 买量 |
| pre_close | float | 前收价 |
| latest_price | float | 最新价 |
| last_timestamp | int | 最新成交时间戳(毫秒) |
| volume | int | 成交量 |
| open_interest | int | 未平仓数量 |
| implied_vol | float | 隐含波动率,反映市场对标的资产未来波动幅度的预期 |
| delta | float | 已废弃。期权链返回的 delta |
| gamma | float | 已废弃。期权链返回的 gamma |
| theta | float | 已废弃。期权链返回的 theta |
| vega | float | 已废弃。期权链返回的 vega |
| rho | float | 已废弃。期权链返回的 rho |
示例
import pandas as pd
from tigeropen.common.consts import Market
from tigeropen.quote.domain.filter import OptionFilter
option_chain = quote_client.get_option_chain(symbol='AAPL', expiry='2024-01-19', market=Market.US)
# 港股期权
# option_chains = quote_client.get_option_chain(symbol='TCH.HK', expiry='2024-06-27', market='HK')
print(option_chain)
# 可定义 OptionFilter 进行过滤
option_filter = OptionFilter(implied_volatility_min=0.5, implied_volatility_max=0.9,
open_interest_min=100, in_the_money=True)
option_chain = quote_client.get_option_chain('AAPL', '2023-01-20', option_filter=option_filter, market=Market.US)
print(option_chain)
# 也可直接用未废弃的指标名称过滤
option_chain = quote_client.get_option_chain('AAPL', '2023-01-20', implied_volatility_min=0.5, open_interest_min=200, market=Market.US)
# 转换 expiry 时间格式
option_chain['expiry_date'] = pd.to_datetime(option_chain['expiry'], unit='ms').dt.tz_localize('UTC').dt.tz_convert('US/Eastern')返回示例
symbol expiry identifier strike put_call volume latest_price \
0 AAPL 1689912000000 AAPL 230721C00095000 95.0 CALL 0 80.47
1 AAPL 1689912000000 AAPL 230721C00100000 100.0 CALL 0 73.50
pre_close open_interest multiplier implied_vol delta gamma theta vega \
80.47 117 100 0.989442 0.957255 0.001332 -0.061754 0.059986 \
76.85 206 100 0.903816 0.955884 0.001497 -0.058678 0.060930 \
rho expiry_date
0.133840 2023-07-21 00:00:00-04:00
0.141341 2023-07-21 00:00:00-04:00
请求频率
基础限流为 60 次/分钟。
获取期权深度行情
QuoteClient.get_option_depth(identifiers: list[str], market=Market.US, timezone=None)
说明
获取期权的深度行情数据。支持持美国和香港市场期权
参数
| 参量名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| identifiers | list[str] | Yes | 期权代码列表,最多 30 只,如 ['AAPL 220128C000175000']. 格式说明 |
| market | tigeropen.common.consts.Market | No | 市场,US/HK,默认 Market.US |
| timezone | str | No | 时区,默认值为 'US/Eastern', 港股期权需要传 'Asia/Hong_Kong' |
返回
dict
结构如下:
| 参量名 | 类型 | 描述 |
|---|---|---|
| identifier | str | 期权符号 |
| asks | list[tuple] | 卖盘信息 |
| bids | list[tuple] | 买盘信息 |
asks 和 bids 中的每一项为一个元组,元组的元素组成为 (price, volume, timestamp, code)
示例
from tigeropen.common.consts import Market
from tigeropen.common.util.contract_utils import get_option_identifier
# 或 client_config = get_client_config(props_path='tiger_openapi_config.properties 文件的目录路径')
identifier = 'AAPL 240119P00134000'
# 或由四要素生成
# identifier = get_option_identifier('AAPL', '20240119', 'PUT', 134)
result = quote_client.get_option_depth([identifier], market=Market.US)
print(result)返回示例
单个标的
{'identifier': 'ADBE 240816C00560000',
'asks': [(18.3, 36, 1719852973090, 'PHLX'), (18.3, 19, 1719852973090, 'EDGX'), (18.3, 14, 1719852972660, 'MPRL'), (18.3, 14, 1719852972512, 'BOX'), (18.3, 13, 1719852973090, 'EMLD'), (18.3, 12, 1719852973090, 'MIAX'), (18.3, 11, 1719852969837, 'ISE'), (18.3, 10, 1719852973487, 'AMEX'), (18.3, 10, 1719852973090, 'CBOE'), (18.3, 7, 1719852973090, 'GEM'), (18.3, 7, 1719852969591, 'MCRY'), (18.3, 7, 1719852969585, 'BZX'), (18.3, 6, 1719852969647, 'NSDQ'), (18.3, 4, 1719852973525, 'ARCA'), (18.3, 3, 1719852972512, 'MEMX'), (18.3, 3, 1719852969818, 'C2'), (18.3, 2, 1719852973422, 'BX')],
'bids': [(17.9, 8, 1719852972512, 'BOX'), (17.9, 7, 1719852973487, 'AMEX'), (17.9, 6, 1719852973090, 'EMLD'), (17.9, 6, 1719852972660, 'MPRL'), (17.9, 6, 1719852969837, 'ISE'), (17.9, 5, 1719852973422, 'BX'), (17.9, 5, 1719852973090, 'PHLX'), (17.9, 5, 1719852969647, 'NSDQ'), (17.9, 5, 1719852969591, 'MCRY'), (17.9, 4, 1719852973090, 'EDGX'), (17.9, 4, 1719852973090, 'MIAX'), (17.9, 3, 1719852973525, 'ARCA'), (17.9, 2, 1719852973090, 'CBOE'), (17.9, 2, 1719852973090, 'GEM'), (17.9, 2, 1719852969818, 'C2'), (17.9, 1, 1719852969585, 'BZX'), (17.85, 6, 1719852972512, 'MEMX')]
}
多个标的
{'ADBE 240816C00560000':
{'identifier': 'ADBE 240816C00560000',
'asks': [(18.3, 36, 1719852973090, 'PHLX'), (18.3, 19, 1719852973090, 'EDGX'), (18.3, 14, 1719852972660, 'MPRL'), (18.3, 14, 1719852972512, 'BOX'), (18.3, 13, 1719852973090, 'EMLD'), (18.3, 12, 1719852973090, 'MIAX'), (18.3, 11, 1719852969837, 'ISE'), (18.3, 10, 1719852973487, 'AMEX'), (18.3, 10, 1719852973090, 'CBOE'), (18.3, 7, 1719852973090, 'GEM'), (18.3, 7, 1719852969591, 'MCRY'), (18.3, 7, 1719852969585, 'BZX'), (18.3, 6, 1719852969647, 'NSDQ'), (18.3, 4, 1719852973525, 'ARCA'), (18.3, 3, 1719852972512, 'MEMX'), (18.3, 3, 1719852969818, 'C2'), (18.3, 2, 1719852973422, 'BX')],
'bids': [(17.9, 8, 1719852972512, 'BOX'), (17.9, 7, 1719852973487, 'AMEX'), (17.9, 6, 1719852973090, 'EMLD'), (17.9, 6, 1719852972660, 'MPRL'), (17.9, 6, 1719852969837, 'ISE'), (17.9, 5, 1719852973422, 'BX'), (17.9, 5, 1719852973090, 'PHLX'), (17.9, 5, 1719852969647, 'NSDQ'), (17.9, 5, 1719852969591, 'MCRY'), (17.9, 4, 1719852973090, 'EDGX'), (17.9, 4, 1719852973090, 'MIAX'), (17.9, 3, 1719852973525, 'ARCA'), (17.9, 2, 1719852973090, 'CBOE'), (17.9, 2, 1719852973090, 'GEM'), (17.9, 2, 1719852969818, 'C2'), (17.9, 1, 1719852969585, 'BZX'), (17.85, 6, 1719852972512, 'MEMX')]},
'ADBE 240816P00560000':
{'identifier': 'ADBE 240816P00560000',
'asks': [(17.45, 6, 1719863999000, 'BOX'), (17.45, 5, 1719863999000, 'EMLD'), (17.45, 5, 1719863999000, 'PHLX'), (17.45, 1, 1719863999000, 'CBOE'), (17.45, 1, 1719863999000, 'ISE'), (17.45, 1, 1719863999000, 'ARCA'), (17.45, 1, 1719863999000, 'MPRL'), (17.45, 1, 1719863999000, 'NSDQ'), (17.45, 1, 1719863999000, 'BX'), (17.45, 1, 1719863999000, 'C2'), (17.45, 1, 1719863999000, 'BZX'), (21.65, 4, 1719863999000, 'EDGX'), (22.0, 2, 1719863999000, 'AMEX'), (27.3, 1, 1719863999000, 'GEM'), (27.5, 1, 1719863999000, 'MIAX'), (28.0, 1, 1719863999000, 'MCRY'), (0.0, 0, 1719864000000, 'MEMX')],
'bids': [(17.05, 6, 1719863999000, 'ISE'), (17.05, 5, 1719863999000, 'BOX'), (17.05, 5, 1719863999000, 'PHLX'), (17.05, 3, 1719863999000, 'MCRY'), (17.05, 2, 1719863999000, 'ARCA'), (17.05, 2, 1719863999000, 'MPRL'), (17.05, 2, 1719863999000, 'NSDQ'), (17.05, 2, 1719863999000, 'BX'), (17.05, 2, 1719863999000, 'BZX'), (17.05, 1, 1719863999000, 'AMEX'), (17.05, 1, 1719863999000, 'CBOE'), (17.05, 1, 1719863999000, 'GEM'), (17.05, 1, 1719863999000, 'C2'), (15.6, 1, 1719863999000, 'EDGX'), (15.5, 1, 1719863999000, 'MIAX'), (11.95, 1, 1719863999000, 'EMLD'), (0.0, 0, 1719864000000, 'MEMX')]}
}
获取期权逐笔成交
QuoteClient.get_option_trade_ticks(identifiers, timezone=None)
说明
获取期权的逐笔成交数据
参数
| 参量名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| identifiers | list[str] | Yes | 期权代码列表,最多 30 只,如 ['AAPL 220128C000175000']. 格式说明 |
| timezone | str | No | 时区,如 'US/Eastern', 'Asia/Hong_Kong' |
返回
pandas.DataFrame
结构如下:
| 参量名 | 类型 | 描述 |
|---|---|---|
| symbol | str | 期权对应的正股代码 |
| expiry | int | 期权到期时间(13 位毫秒时间戳) |
| put_call | str | 期权方向 |
| strike | float | 行权价 |
| time | int | 成交时间 |
| price | float | 成交价格 |
| volume | int | 成交量 |
示例
from tigeropen.common.util.contract_utils import get_option_identifier
identifier = 'AAPL 240119P00134000'
# 或由四要素生成
# identifier = get_option_identifier('AAPL', '20240119', 'PUT', 134)
option_trade_ticks = quote_client.get_option_trade_ticks([identifier])返回示例
identifier symbol expiry put_call strike time price volume
0 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640701803177 9.38 9
1 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640701803177 9.38 1
2 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640701803846 9.46 7
3 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640701806266 9.55 1
4 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640701918302 9.08 1
.. ... ... ... ... ... ... ... ...
111 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640722112754 8.91 25
112 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640723067491 9.00 4
113 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640723585351 8.85 4
114 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640724302670 9.13 2
115 AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1640724600973 8.85 1
请求频率
基础限流为 120 次/分钟。
获取期权 K 线
QuoteClient.get_option_bars(identifiers, begin_time=-1, end_time=4070880000000, period=BarPeriod.DAY, limit=None, sort_dir=None, market=None, timezone=None)
说明
获取期权 K 线数据
参数
| 参量名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| identifiers | list[str] | Yes | 期权代码列表, 单次上限 30 只, 如 ['AAPL 220128C000175000'],格式说明 |
| begin_time | str 或 int | No | 开始时间,毫秒级时间戳或日期字符串,如 1643346000000 或 '2019-01-01',默认 -1(无限制) |
| end_time | str 或 int | No | 结束时间,毫秒级时间戳或日期字符串,如 1643346000000 或 '2019-01-01',默认 4070880000000(无限制) |
| period | tigeropen.common.consts.BarPeriod | No | K 线类型,取值范围(DAY:日 K,ONE_MINUTE:1 分钟,FIVE_MINUTES:5 分钟,HALF_HOUR:30 分钟,ONE_HOUR:60 分钟) |
| limit | int | No | 每个期权返回的 K 线数量 |
| sort_dir | tigeropen.common.consts.SortDirection | No | 排序顺序,枚举 ASC/DESC ,默认 ASC |
| market | tigeropen.common.consts.Market | No | 请求级市场,US:美股 HK:港股。省略时,只要任一 identifier 的正股代码以 .HK 结尾,整个请求使用 HK;否则服务端默认 US。请勿混合 US/HK 合约。 |
| timezone | str | No | 时区,如 'US/Eastern', 'Asia/Hong_Kong' |
返回
pandas.DataFrame
结构如下:
| 参量名 | 类型 | 描述 |
|---|---|---|
| identifier | str | 期权代码 |
| symbol | str | 期权对应的正股代码 |
| expiry | int | 到期日,毫秒级时间戳 |
| put_call | str | 期权方向 |
| strike | float | 行权价 |
| time | int | Bar 对应的时间,毫秒级时间戳 |
| open | float | 开盘价 |
| high | float | 最高价 |
| low | float | 最低价 |
| close | float | 收盘价 |
| volume | int | 成交量 |
| open_interest | int | 未平仓数量 |
示例
import pandas as pd
from tigeropen.common.consts import BarPeriod, Market
from tigeropen.common.util.contract_utils import get_option_identifier
identifier = 'AAPL 190104P00134000'
# 或由四要素生成
# identifier = get_option_identifier('AAPL', '20190104', 'PUT', 134)
bars = quote_client.get_option_bars([identifier],period = BarPeriod.DAY, market=Market.US)
print(bars)
# 转换 time 时间格式
bars['expiry_date'] = pd.to_datetime(bars['expiry'], unit='ms').dt.tz_localize('UTC').dt.tz_convert('US/Eastern')
bars['time_date'] = pd.to_datetime(bars['time'], unit='ms').dt.tz_localize('UTC').dt.tz_convert('US/Eastern')返回示例
identifier symbol expiry put_call strike time open high \
AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1639026000000 8.92 9.80 \ AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1639112400000 9.05 10.80 \ AAPL 220128C00175000 AAPL 1643346000000 CALL 175.0 1639371600000 11.70 12.50 \
low close volume open_interest expiry_date time_date
8.00 8.20 364 0 2022-01-28 00:00:00-05:00 2021-12-09 00:00:00-05:00
7.80 10.80 277 177 2022-01-28 00:00:00-05:00 2021-12-10 00:00:00-05:00
8.72 8.75 304 328 2022-01-28 00:00:00-05:00 2021-12-13 00:00:00-05:00
请求频率
基础限流为 60 次/分钟。
获取期权分时数据
QuoteClient.get_option_timeline(self, identifiers: Union[str, list[str]], market:Optional[Union[Market, str]] = None, begin_time: Optional[Union[str, int]] = None, timezone: Optional[str] = None)
SDK 签名将 market 默认设为 None,但服务端要求显式传入 US 或 HK;调用时不要省略。
说明
获取期权的分时数据
参数
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| identifiers | list[str] | Yes | 期权代码列表, 单次上限 30 只, 如 ['AAPL 220128C000175000'],格式说明 |
| market | Market | Yes | 市场,支持 US/HK;SDK 默认值为 None,但服务端要求提供,省略会返回参数错误。 |
| begin_time | int 或 str | No | 起始时间,毫秒级时间戳或日期字符串 |
| timezone | str | No | 时区,如 'US/Eastern', 'Asia/Hong_Kong' |
返回
| 字段 | 类型 | 说明 |
|---|---|---|
| identifier | str | 期权符号 |
| symbol | str | 股票代码 |
| put_call | str | 看多或看空(CALL/PUT) |
| expiry | int | 到期时间 |
| strike | float | 行权价 |
| pre_close | float | 昨日收盘价 |
| volume | int | 成交量 |
| avg_price | float | 平均成交价格 |
| price | float | 最新价格 |
| time | int | 当前分时时间 |
示例
from tigeropen.common.consts import BarPeriod, Market
from tigeropen.common.util.contract_utils import get_option_identifier
identifier = 'TCH.HK 250929C00510000'
# 或由四要素生成
# identifier = get_option_identifier('TCH.HK', '20190104', 'PUT', 134)
result = quote_client.get_option_timeline([identifier], market=Market.HK)
print(result)
返回示例
identifier symbol expiry put_call strike pre_close price \
0 TCH.HK250929C00510000 TCH.HK 1759075200000 CALL 510.00 29.36 29.36 \
1 TCH.HK250929C00510000 TCH.HK 1759075200000 CALL 510.00 29.36 29.36 \
2 TCH.HK250929C00510000 TCH.HK 1759075200000 CALL 510.00 29.36 29.36 \
avg_price time volume
29.360000 1750901400000 0
29.360000 1750901460000 0
29.360000 1750901520000 0
获取港股期权代码
QuoteClient.get_option_symbols(market = Market.HK, lang = None)
说明
获取港股期权的代码, 比如 00700 的代码为 TCH.HK
参数
| 参量名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| market | tigeropen.common.consts.Market | No | Market.HK |
| lang | Language | No | 返回信息的语言;省略时使用 QuoteClient 的客户端配置语言,未配置时为 en_US |
返回
pandas.DataFrame
结构如下:
| 参量名 | 类型 | 描述 |
|---|---|---|
| symbol | str | 期权代码,如 TCH.HK |
| name | str | 名称 |
| underlying_symbol | str | 港股股票代码 如 00700 |
示例
from tigeropen.common.util.contract_utils import get_option_identifier
result = quote_client.get_option_symbols()
print(result)返回示例
symbol name underlying_symbol
0 ALC.HK ALC 02600
1 CRG.HK CRG 00390
2 PAI.HK PAI 02318
3 XCC.HK XCC 00939
4 XTW.HK XTW 00788
5 SHL.HK SHL 00968
6 GHL.HK GHL 00868
7 HEX.HK HEX 00388
8 ACC.HK ACC 00914
9 STC.HK STC 02888
获取期权分析指标
QuoteClient.get_option_analysis(symbols, period=OptionAnalysisPeriod.FIFTY_TWO_WEEK, market=None, require_volatility_list=None, lang=None)
说明
获取期权分析指标,包括隐含波动率、历史波动率、IV/HV 比率、看涨看跌比率、IV 百分位、IV 排名等数据。
参数
| 参量名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | List[str] 或 List[dict] | Yes | 股票代码列表,最多 10 只。可以是字符串列表如 ["AAPL", "TSLA"],或字典列表如 [{"symbol": "AAPL", "period": "26week"}],或混合格式 |
| period | tigeropen.common.consts.OptionAnalysisPeriod | No | 分析周期,默认 FIFTY_TWO_WEEK。可选值:THREE_YEAR、FIFTY_TWO_WEEK、TWENTY_SIX_WEEK、THIRTEEN_WEEK |
| market | tigeropen.common.consts.Market | No | 市场,如 Market.US、Market.HK |
| require_volatility_list | bool | No | 是否返回波动率列表数据(历史波动率、隐含波动率等时间序列) |
| lang | Language | No | 返回信息的语言;省略时使用客户端配置的语言 |
返回
List[OptionAnalysis] 对象列表,每个对象结构如下:
| 属性名 | 类型 | 描述 |
|---|---|---|
| symbol | str | 股票代码 |
| implied_vol_30_days | float | 标的资产的隐含波动率。 对期权链上部分期权的隐含波动率进行综合加权计算,得到的值即为该标的资产的 IV。它反映的是未来 30 天内期权链整体的波动情况,这个数据对正股也有参考作用。 |
| his_volatility | float | 标的资产的历史波动率。 它反映的是过去 30 天内,标的资产的实际波动情况,用于衡量标的资产偏离其平均价格的程度。 |
| iv_his_v_ratio | float | 隐含波动率/历史波动率 比值 |
| call_put_ratio | float | 看涨看跌比率 |
| iv_metric | IVMetric | 隐含波动率指标对象 |
| volatility_list | List[VolatilityListItem] | 波动率列表,仅在 require_volatility_list=True 时返回 |
IVMetric 对象结构:
| 属性名 | 类型 | 描述 |
|---|---|---|
| period | str | 分析周期,如 "52week"、"26week" |
| percentile | float | 指定 period 内的隐含波动率百分位,小数形式,范围为 0–1。 |
| rank | float | 指定 period 内的隐含波动率排名,小数形式,范围为 0–1。 |
VolatilityListItem 对象结构(require_volatility_list=True 时返回):
| 属性名 | 类型 | 描述 |
|---|---|---|
| implied_vol | float | 隐含波动率 |
| percentile | float | IV 百分位,小数形式,范围为 0–1 |
| rank | float | IV 排名,小数形式,范围为 0–1 |
| his_volatility | float | 历史波动率 |
| timestamp | int | 时间戳,精确到毫秒 |
示例
from tigeropen.common.consts import Market, OptionAnalysisPeriod
# 使用枚举指定周期
result = quote_client.get_option_analysis(
symbols=['AAPL', 'TSLA'],
period=OptionAnalysisPeriod.FIFTY_TWO_WEEK,
market=Market.US
)
print(result)
# 为不同股票指定不同周期
result = quote_client.get_option_analysis(
symbols=[
{"symbol": "AAPL", "period": "52week"},
{"symbol": "TSLA", "period": "26week"}
],
market=Market.US
)
# 返回波动率列表数据
result = quote_client.get_option_analysis(
symbols=['AAPL'],
period=OptionAnalysisPeriod.FIFTY_TWO_WEEK,
market=Market.US,
require_volatility_list=True
)
for item in result:
print(item.symbol, item.volatility_list)返回示例
[OptionAnalysis({"symbol": "AAPL", "implied_vol_30_days": 0.3071, "his_volatility": 0.1967, "iv_his_v_ratio": 1.5617, "call_put_ratio": 0.0, "iv_metric": IVMetric({"period": "52week", "percentile": 0.527363184079602, "rank": 0.18213875790384876})}),
OptionAnalysis({"symbol": "TSLA", "implied_vol_30_days": 0.5162, "his_volatility": 0.3603, "iv_his_v_ratio": 1.4328, "call_put_ratio": 0.0, "iv_metric": IVMetric({"period": "52week", "percentile": 0.08, "rank": 0.04194153521422974})})]
require_volatility_list=True 时返回示例:
[OptionAnalysis({"symbol": "AAPL", "implied_vol_30_days": 0.3071, "his_volatility": 0.1967, "iv_his_v_ratio": 1.5617, "call_put_ratio": 0.0, "iv_metric": IVMetric({"period": "52week", "percentile": 0.527, "rank": 0.182}), "volatility_list": [VolatilityListItem({"implied_vol": 0.3012, "percentile": 0.512, "rank": 0.175, "his_volatility": 0.1923, "timestamp": 1709856000000}), VolatilityListItem({"implied_vol": 0.2985, "percentile": 0.498, "rank": 0.168, "his_volatility": 0.1901, "timestamp": 1709769600000})]})]
请求频率
基础限流为 60 次/分钟。
期权计算器
在 sdk 代码路径下 tigeropen/examples/option_helpers/helpers.py , 提供了期权计算工具,可用于期权希腊值计算、期权价格计算、隐含波动率计算。 相关算法基于 quantlib 库,使用前需要先安装:pip install quantlib==1.40
本地计算结果中:delta 表示期权理论价值对标的价格变化的敏感度;gamma 表示 delta 对标的价格变化的敏感度;theta 表示期权理论价值对时间流逝的敏感度;vega 表示期权理论价值对隐含波动率变化的敏感度;rho 表示期权理论价值对无风险利率变化的敏感度。
使用方式 1,在代码中引用
FDAmericanDividendOptionHelper 为美式期权计算类(包括美股期权,港股期权, ETF期权都使用此类) FDEuropeanDividendOptionHelper 为欧式期权计算类(指数期权使用此类)
import QuantLib as ql
from tigeropen.examples.option_helpers.helpers import FDAmericanDividendOptionHelper
# 根据期权价格计算隐含波动率:
ql.Settings.instance().evaluationDate = ql.Date(19, 4, 2022)
helper = FDAmericanDividendOptionHelper(option_type=ql.Option.Call,
underlying=985,
strike=990,
risk_free_rate=0.017,
dividend_rate=0,
volatility=0, # 隐含波动率临时设置为0
settlement_date=ql.Date(14, 4, 2022),
expiration_date=ql.Date(22, 4, 2022))
# 计算隐含波动率,参数为期权价格,可用盘口价(ask,bid)计算. (ask + bid) / 2
volatility = helper.implied_volatility(33.6148)
helper.update_implied_volatility(volatility)
print(f'implied volatility:{volatility}')
print(f'value:{helper.NPV()}')
print(f'delta:{helper.delta()}')
print(f'gamma:{helper.gamma()}')
print(f'theta:{helper.theta()}')
print(f'vega:{helper.vega()}')
print(f'rho:{helper.rho()}')
# 直接使用隐含波动率计算期权价格:
ql.Settings.instance().evaluationDate = ql.Date(19, 4, 2022)
helper = FDAmericanDividendOptionHelper(option_type=ql.Option.Call, # PUT/CALL
underlying=985, # 结算日股价
strike=990, # 行权价
risk_free_rate=0.017, # 无风险利率
dividend_rate=0, # 股息率
volatility=0.6153, # 隐含波动率
settlement_date=ql.Date(14, 4, 2022), # 结算日期
expiration_date=ql.Date(22, 4, 2022)) # 期权到期日
print(f'value:{helper.NPV()}')
print(f'delta:{helper.delta()}')
print(f'gamma:{helper.gamma()}')
print(f'theta:{helper.theta()}')
print(f'vega:{helper.vega()}')
print(f'rho:{helper.rho()}')
使用方式 2,作为脚本命令调用
假设将 tigeropen/examples/option_helpers/helpers.py 保存在当前目录
# 计算期权价格
python helpers.py -t PUT -e '2022-05-20' -s 2022-04-24 -p 215 -u 215.52 -r 0.0078 -v 0.5919
# 根据期权价格计算隐含波动率. -n 指定期权价格
python helpers.py -t CALL -e '2022-04-22' -s 2022-04-14 -p 990 -u 985 -r 0.017 -n 33.6148
# 根据期权盘口数据计算隐含波动率.(使用 ask bid 的均值作为期权价格)
python helpers.py -t CALL -e '2022-04-22' -s 2022-04-14 -p 990 -u 985 -r 0.017 -a 35 -b 36
# 查看命令帮助
python helpers.py -h
期权指标计算工具
本工具封装好了 sdk 的请求,直接传入期权代码,即可请求并计算期权希腊值,买入盈利概率,卖出年化等指标。
代码路径 tigeropen/examples/option_helpers/util.py
示例:
import QuantLib as ql
from tigeropen.tiger_open_config import TigerOpenClientConfig
from tigeropen.examples.option_helpers.util import OptionUtil
client_config = TigerOpenClientConfig(props_path='.config/')
quote_client = QuoteClient(client_config)
trade_client = TradeClient(client_config)
option_util = OptionUtil(quote_client, trade_client)
# Calculate metrics for specific options
identifiers = ['TSLA 260220C00385000']
# Example 1: Return as DataFrame
print("Example 1: Return as DataFrame")
metrics_df = option_util.get_option_metrics(identifiers, return_type='dataframe')
print(f"\n{metrics_df}")
# Example 2: Return as List of OptionMetric objects
print("Example 2: Return as List of OptionMetric objects")
metrics_list = option_util.get_option_metrics(identifiers, return_type='list')
for metric in metrics_list:
print(metric)
print(f" Greeks: delta={metric.delta}, gamma={metric.gamma}, "
f"theta={metric.theta}, vega={metric.vega}")
print(f" Risk: implied_vol={metric.implied_vol}, leverage={metric.leverage_ratio}")
print(f" Probability: profit_prob={metric.profit_probability}")
Updated 5 days ago
