期权

初始化

本页所有示例均假设已完成以下初始化:

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)

说明

获取期权到期日

参数

参量名类型是否必填描述
symbolslist[str]Yes正股资产符号列表,最多 30 只。对于香港合约,使用 get_option_symbols 提供的符号,格式为 "CODE.HK"
markettigeropen.common.consts.MarketNo市场,US/HK,默认 None

返回

pandas.DataFrame

各 column 的含义如下:

参量名类型描述
symbolstr证券代码
option_symbolstr期权代码(如指数期权可能与 symbol 不同)
datestr到日期 YYYY-MM-DD 格式的字符串
timestampint到期日,精确到毫秒的时间戳
period_tagstr期权周期标签,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)

说明

获取期权实时行情

参数

参量名类型是否必填描述
identifierslist[str]Yes期权代码列表,最多 30 只
markettigeropen.common.consts.MarketNo请求级市场,US:美股 HK:港股。省略时,只要任一解析出的正股代码以 .HK 结尾,整个请求使用 HK;否则服务端默认 US。请勿在同一请求混合 US/HK 合约。
timezonestrNo时区, 如 'US/Eastern', 'Asia/Hong_Kong'

返回

pandas.DataFrame

各 column 的含义如下:

字段类型说明
identifierstr期权代码
symbolstr股票代码
expiryint到期时间(毫秒,当天 0 点)
strikefloat行权价
put_callstr方向 (PUT/CALL)
multiplierint乘数,美股期权默认 100
ask_pricefloat卖盘价格
ask_sizeint卖盘数量
bid_pricefloat买盘价格
bid_sizeint买盘数量
pre_closefloat前一交易日收盘价
latest_pricefloat最新价格
latest_timeint最新成交时间,毫秒时间戳
volumeint成交量
open_interestint未平仓量
openfloat开盘价
highfloat最高价
lowfloat最低价
changefloat涨跌额
rates_bondsfloat一年期美国国债利率,每天更新一次,如:0.0078 表示实际利率为:0.78%
volatilitystr历史波动率
mid_pricefloat中间价
mid_timestampint中间价时间戳
mark_pricefloat标记价
mark_timestampint标记价时间戳
pre_mark_pricefloat昨标记价
selling_returnfloat卖出年化收益

示例

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 筛选字段/模型,以及返回字段 deltagammathetavegarho 均已废弃。相关值每日更新,时效性不足以支持盘中使用,请勿用于实时交易决策。请使用期权计算器,并传入当前标的价格、期权价格、波动率、利率和到期时间等市场输入进行计算。

说明

获取期权链

参数

参量名类型是否必填描述
symbolstrYes期权对应的股票代码
expirystr 或 intYes期权到期日,毫秒单位的数字时间戳或日期字符串,如 1705640400000 或 '2024-01-19'
option_filtertigeropen.quote.domain.filter.OptionFilterNo过滤参数,可选
return_greek_valueboolNo已废弃。是否返回希腊值,默认不返回
markettigeropen.common.consts.MarketNo请求级市场,支持 US/HK。省略时,正股代码以 .HK 结尾则使用 HK,否则服务端默认 US。
timezonestrNo时区,如 'US/Eastern', 'Asia/Hong_Kong'

过滤参数:

各未废弃筛选指标除 in_the_money 外,使用时均对应 _min 后缀(范围最小值)或 _max 后缀(范围最大值)。delta_mintheta_max 等 Greeks 筛选字段已废弃。

OptionFilter 可筛选指标如下:

参数类型是否必填描述
implied_volatilityfloatNo隐含波动率, 反映市场预期的未来股价波动情况, 隐含波动率越高, 说明预期股价波动越剧烈.
in_the_moneyboolNo是否价内
open_interestintNo未平仓量, 每个交易日完结时市场参与者手上尚未平仓的合约数. 反映市场的深度和流动性.
deltafloatNo已废弃。delta 范围筛选
gammafloatNo已废弃。gamma 范围筛选
thetafloatNo已废弃。theta 范围筛选
vegafloatNo已废弃。vega 范围筛选
rhofloatNo已废弃。rho 范围筛选

返回

pandas.DataFrame

字段名类型描述
identifierstr期权代码
symbolstr期权对应的正股代码
expiryint期权到期日,毫秒级别的时间戳
strikefloat行权价
put_callstr期权的方向
multiplierint乘数
ask_pricefloat卖价
ask_sizeint卖量
bid_pricefloat买价
bid_sizeint买量
pre_closefloat前收价
latest_pricefloat最新价
last_timestampint最新成交时间戳(毫秒)
volumeint成交量
open_interestint未平仓数量
implied_volfloat隐含波动率,反映市场对标的资产未来波动幅度的预期
deltafloat已废弃。期权链返回的 delta
gammafloat已废弃。期权链返回的 gamma
thetafloat已废弃。期权链返回的 theta
vegafloat已废弃。期权链返回的 vega
rhofloat已废弃。期权链返回的 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)

说明

获取期权的深度行情数据。支持持美国和香港市场期权

参数

参量名类型是否必填描述
identifierslist[str]Yes期权代码列表,最多 30 只,如 ['AAPL 220128C000175000']. 格式说明
markettigeropen.common.consts.MarketNo市场,US/HK,默认 Market.US
timezonestrNo时区,默认值为 'US/Eastern', 港股期权需要传 'Asia/Hong_Kong'

返回

dict

结构如下:

参量名类型描述
identifierstr期权符号
askslist[tuple]卖盘信息
bidslist[tuple]买盘信息

asksbids 中的每一项为一个元组,元组的元素组成为 (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)

说明

获取期权的逐笔成交数据

参数

参量名类型是否必填描述
identifierslist[str]Yes期权代码列表,最多 30 只,如 ['AAPL 220128C000175000']. 格式说明
timezonestrNo时区,如 'US/Eastern', 'Asia/Hong_Kong'

返回

pandas.DataFrame

结构如下:

参量名类型描述
symbolstr期权对应的正股代码
expiryint期权到期时间(13 位毫秒时间戳)
put_callstr期权方向
strikefloat行权价
timeint成交时间
pricefloat成交价格
volumeint成交量

示例

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 线数据

参数

参量名类型是否必填描述
identifierslist[str]Yes期权代码列表, 单次上限 30 只, 如 ['AAPL 220128C000175000'],格式说明
begin_timestr 或 intNo开始时间,毫秒级时间戳或日期字符串,如 1643346000000 或 '2019-01-01',默认 -1(无限制)
end_timestr 或 intNo结束时间,毫秒级时间戳或日期字符串,如 1643346000000 或 '2019-01-01',默认 4070880000000(无限制)
periodtigeropen.common.consts.BarPeriodNoK 线类型,取值范围(DAY:日 K,ONE_MINUTE:1 分钟,FIVE_MINUTES:5 分钟,HALF_HOUR:30 分钟,ONE_HOUR:60 分钟)
limitintNo每个期权返回的 K 线数量
sort_dirtigeropen.common.consts.SortDirectionNo排序顺序,枚举 ASC/DESC ,默认 ASC
markettigeropen.common.consts.MarketNo请求级市场,US:美股 HK:港股。省略时,只要任一 identifier 的正股代码以 .HK 结尾,整个请求使用 HK;否则服务端默认 US。请勿混合 US/HK 合约。
timezonestrNo时区,如 'US/Eastern', 'Asia/Hong_Kong'

返回

pandas.DataFrame

结构如下:

参量名类型描述
identifierstr期权代码
symbolstr期权对应的正股代码
expiryint到期日,毫秒级时间戳
put_callstr期权方向
strikefloat行权价
timeintBar 对应的时间,毫秒级时间戳
openfloat开盘价
highfloat最高价
lowfloat最低价
closefloat收盘价
volumeint成交量
open_interestint未平仓数量

示例

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,但服务端要求显式传入 USHK;调用时不要省略。

说明

获取期权的分时数据

参数

参数类型是否必填描述
identifierslist[str]Yes期权代码列表, 单次上限 30 只, 如 ['AAPL 220128C000175000'],格式说明
marketMarketYes市场,支持 US/HK;SDK 默认值为 None,但服务端要求提供,省略会返回参数错误。
begin_timeint 或 strNo起始时间,毫秒级时间戳或日期字符串
timezonestrNo时区,如 'US/Eastern', 'Asia/Hong_Kong'

返回

字段类型说明
identifierstr期权符号
symbolstr股票代码
put_callstr看多或看空(CALL/PUT)
expiryint到期时间
strikefloat行权价
pre_closefloat昨日收盘价
volumeint成交量
avg_pricefloat平均成交价格
pricefloat最新价格
timeint当前分时时间

示例

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

参数

参量名类型是否必填描述
markettigeropen.common.consts.MarketNoMarket.HK
langLanguageNo返回信息的语言;省略时使用 QuoteClient 的客户端配置语言,未配置时为 en_US

返回

pandas.DataFrame

结构如下:

参量名类型描述
symbolstr期权代码,如 TCH.HK
namestr名称
underlying_symbolstr港股股票代码 如 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 排名等数据。

参数

参量名类型是否必填描述
symbolsList[str]List[dict]Yes股票代码列表,最多 10 只。可以是字符串列表如 ["AAPL", "TSLA"],或字典列表如 [{"symbol": "AAPL", "period": "26week"}],或混合格式
periodtigeropen.common.consts.OptionAnalysisPeriodNo分析周期,默认 FIFTY_TWO_WEEK。可选值:THREE_YEAR、FIFTY_TWO_WEEK、TWENTY_SIX_WEEK、THIRTEEN_WEEK
markettigeropen.common.consts.MarketNo市场,如 Market.US、Market.HK
require_volatility_listboolNo是否返回波动率列表数据(历史波动率、隐含波动率等时间序列)
langLanguageNo返回信息的语言;省略时使用客户端配置的语言

返回

List[OptionAnalysis] 对象列表,每个对象结构如下:

属性名类型描述
symbolstr股票代码
implied_vol_30_daysfloat标的资产的隐含波动率。 对期权链上部分期权的隐含波动率进行综合加权计算,得到的值即为该标的资产的 IV。它反映的是未来 30 天内期权链整体的波动情况,这个数据对正股也有参考作用。
his_volatilityfloat标的资产的历史波动率。 它反映的是过去 30 天内,标的资产的实际波动情况,用于衡量标的资产偏离其平均价格的程度。
iv_his_v_ratiofloat隐含波动率/历史波动率 比值
call_put_ratiofloat看涨看跌比率
iv_metricIVMetric隐含波动率指标对象
volatility_listList[VolatilityListItem]波动率列表,仅在 require_volatility_list=True 时返回

IVMetric 对象结构:

属性名类型描述
periodstr分析周期,如 "52week"、"26week"
percentilefloat指定 period 内的隐含波动率百分位,小数形式,范围为 0–1。
rankfloat指定 period 内的隐含波动率排名,小数形式,范围为 0–1。

VolatilityListItem 对象结构(require_volatility_list=True 时返回):

属性名类型描述
implied_volfloat隐含波动率
percentilefloatIV 百分位,小数形式,范围为 0–1
rankfloatIV 排名,小数形式,范围为 0–1
his_volatilityfloat历史波动率
timestampint时间戳,精确到毫秒

示例

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}")


Did this page help you?