☰
天勤量化 tqsdk 期权功能实战:从期权行情、筛选、希腊值到波动率曲面与保证金计算
2026/10/14 17:31:25 网站建设 项目流程
  • 金融科技

【免费下载链接】tqsdk-python

天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易

项目地址:https://gitcode.com/gh_mirrors/tq/tqsdk-python
点击查看免费下载

本篇基于 tqsdk-python 仓库中的期权基础使用文档 doc/demo/option_base.rst,系统讲解 tqsdk 提供的期权全链路功能:获取期权实时行情、按条件筛选期权合约、查询实值/平值/虚值期权、计算希腊字母与隐含波动率、获取波动率曲面、期权套利下单以及 ETF 期权卖方保证金的本地计算。读完后,你可以直接使用query_options、query_atm_options、query_all_level_options等 API 完成期权筛选,并结合tqsdk.ta中的OPTION_GREEKS、OPTION_IMPV、VOLATILITY_CURVE函数对期权做定价分析,把期权逻辑落进量化策略。

本组示例默认你已经熟悉 tqsdk 的基础行情、K 线和wait_update主循环写法。第一次接触期权功能时,建议按下面的顺序阅读:

  • 先看 o10.py、o20.py,熟悉期权行情和筛选接口;
  • 再看 o30.py、o40.py、o41.py,理解实值/平值/虚值分类与希腊值计算;
  • 最后看 o60.py 到 o74.py,处理波动率曲面、套利和保证金计算。

前提说明:期权功能的适用范围

所有示例都通过TqApi(auth=TqAuth("快期账户", "账户密码"))创建 API 实例并传入快期账户认证。需要注意两点:

  1. 认证:示例中的"快期账户"、"账户密码"需要替换为你自己的快期账户信息;
  2. 行情系统限制:从 tqsdk/api.py 的源码看,query_options等合约查询接口在期货行情系统(_stock = False)下调用会抛出期货行情系统(_stock = False)不支持当前接口调用,即期权合约查询依赖天勤期货行情系统。

o10 - 获取期权实时行情

期权合约与普通期货合约一样,通过api.get_quote()获取实时行情对象。期权代码格式为交易所.标的代码-C/P-行权价(中金所股指期权使用年月格式),例如:

#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'ringo' from tqsdk import TqApi, TqAuth # 创建API实例,传入自己的快期账户 api = TqApi(auth=TqAuth("快期账户", "账户密码")) # 获取大商所豆粕期权行情 quote_m = api.get_quote("DCE.m1807-C-2450") # 获取中金所股指期权行情 quote_IO = api.get_quote("CFFEX.IO2002-C-3550") # 输出 m1807-C-2450 的最新行情时间和最新价 print(quote_m.datetime, quote_m.last_price) # 关闭api,释放资源 api.close()

示例代码见 tqsdk/demo/option_tutorial/o10.py。行情对象除了datetime、last_price等通用字段外,还包含期权特有字段,如strike_price(行权价)、option_class(CALL/PUT)、underlying_symbol(标的合约)、expire_datetime(到期时间)等,这些字段在后面的筛选、希腊值计算和保证金计算中都会用到。

o20 - 查询符合要求的期权(query_options)

query_options用于按标的合约和多种条件查询期权合约列表,返回合约代码列表(SymbolList)。

from tqsdk import TqApi, TqAuth api = TqApi(auth=TqAuth("快期账户", "账户密码")) ls = api.query_options("SHFE.au2012") print(ls) # 标的为 "SHFE.au2012" 的所有期权 ls = api.query_options("SHFE.au2012", option_class="PUT") print(ls) # 标的为 "SHFE.au2012" 的看跌期权 ls = api.query_options("SHFE.au2012", option_class="PUT", expired=False) print(ls) # 标的为 "SHFE.au2012" 的看跌期权, 未下市的 ls = api.query_options("SHFE.au2012", strike_price=340) print(ls) # 标的为 "SHFE.au2012" 、行权价为 340 的期权 ls = api.query_options("SSE.000300", exchange_id="CFFEX") print(ls) # 中金所沪深300股指期权 ls = api.query_options("SSE.510300", exchange_id="SSE") print(ls) # 上交所沪深300etf期权 ls = api.query_options("SSE.510300", exchange_id="SSE", exercise_year=2020, exercise_month=12) print(ls) # 上交所沪深300etf期权, 限制条件 2020 年 12 月份行权 api.close()

示例代码见 tqsdk/demo/option_tutorial/o20.py。结合 tqsdk/api.py 中query_options的完整签名,各参数含义如下:

参数类型说明
underlying_symbolstr必填,标的合约
option_classstr可选,期权类型:CALL(看涨)/PUT(看跌)
exercise_yearint可选,最后行权日年份
exercise_monthint可选,最后行权日月份
strike_pricefloat可选,行权价格
expiredbool可选,是否下市(expired=False表示未下市)
has_Abool可选,是否含 A 系列:True只含 A 期权,False不含 A 期权,None不区分
has_MSbool可选,是否含 MS 系列:True只含 MS 系列期权,False排除 MS 系列期权,None不区分

从源码结构看,query_options内部先通过_query_options_by_underlying向合约服务发起查询,再用_get_options_filtered对结果做本地过滤,最终返回形如["SHFE.cu2012C24000", "SHFE.cu2012P24000"]的合约代码列表。同一标的对应多个交易所时(如SSE.000300对应中金所股指期权、SSE.510300对应上交所 ETF 期权),可用exchange_id等关键字参数进一步限定。

o30 - 查询平值/虚值/实值期权(query_atm_options)

query_atm_options以指定价格比对标的,按“档位”查询实值/平值/虚值期权:

from tqsdk import TqApi, TqAuth api = TqApi(auth=TqAuth("快期账户", "账户密码")) quote = api.get_quote("SHFE.au2012") # 预计输出的为以au2012现在最新价来比对的认购的平值期权,当没有符合的平值期权时返回为空,如果有返回则格式为 ["SHFE.au2012C30000"] ls = api.query_atm_options("SHFE.au2012", quote.last_price, 0, "CALL") # 预计输出的为au2012,以开盘价来比对的认购的实值3档,实值2档,实值1档期权,如果没有符合要求的期权则对应栏返回为None,如果有则返回格式例如 [None,None,"SHFE.au2012C30000"] ls = api.query_atm_options("SHFE.au2012", quote.open, [3, 2, 1], "CALL") # 预计输出的为au2012,以开盘价来比对的认购的实值1档,平值期权,虚值1档,如果没有符合要求的期权则对应栏返回为None,如果有则返回格式例如 ls = api.query_atm_options("SHFE.au2012", quote.open, [1, 0, -1], "CALL") # 预计输出的为au2012,以现在最新价来比对的认购的虚值1档期权 ls = api.query_atm_options("SHFE.au2012", quote.last_price, -1, "CALL") # 预计输出沪深300股指期权,2020年12月的虚值1档期权 ls = api.query_atm_options("SSE.000300", quote.last_price, -1, "CALL", exercise_year=2020, exercise_month=12) # 预计输出 上交所 沪深300股指ETF期权,2020年12月的虚值1档期权 ls = api.query_atm_options("SSE.510300", quote.last_price, -1, "CALL", exercise_year=2020, exercise_month=12) api.close()

示例代码见 tqsdk/demo/option_tutorial/o30.py。参数说明(源自 tqsdk/api.py 的接口文档):

  • underlying_symbol:必填,标的合约(目前每个标的只对应一个交易所的期权);
  • underlying_price:必填,标的价格,用户可输入任意值,如合约最新价、最高价、开盘价,接口以该值比对实值/平值/虚值期权;
  • price_level:必填,实值/平值/虚值档位,支持-100 ~ 100之间的整数。其中3, 2, 1, 0, -1, -2, -3分别代表实值 3 档、实值 2 档、实值 1 档、平值期权、虚值 1 档、虚值 2 档、虚值 3 档,以此类推;没有指定档位的期权时(如-100档),返回列表对应位置为None,例如price_level=[-100, 0]可能返回[None, "平值期权合约代码"];
  • option_class:必填,CALL或PUT;
  • exercise_year/exercise_month:ETF 期权、股指期权必填,期权最后行权日年/月。

平值期权的选取逻辑(接口文档明确说明):

  1. 根据用户传入参数生成一个期权列表,其中是否有与传入价格相比的平值期权并返回;
  2. 如果没有符合的平值期权,则取行权价距离传入价格绝对值相差最小的期权作为平值期权;
  3. 如果存在最近的两个期权的行权价到传入价格的绝对值最小且相等,则取虚值的那个期权作为平值期权,其他档位期权依次展开。

o40 - 计算期权的希腊字母(OPTION_GREEKS)

期权希腊值通过tqsdk.ta模块的OPTION_GREEKS函数计算,输入为期权合约与对应标的合约组成的多 K 线序列:

from tqsdk import TqApi, TqAuth from tqsdk.ta import OPTION_GREEKS api = TqApi(auth=TqAuth("快期账户", "账户密码")) # 获取指定期权行情 quote = api.get_quote("SHFE.cu2006C44000") # 获取期权和其对应标的的多合约的 kline 数据 klines = api.get_kline_serial(["SHFE.cu2006C44000", "SHFE.cu2006"], 24 * 60 * 60, 30) # 运行 OPTION_GREEKS 希腊值计算函数 greeks = OPTION_GREEKS(klines, quote, 0.025) # 输出希腊字母 print(list(greeks["delta"])) print(list(greeks["theta"])) print(list(greeks["gamma"])) print(list(greeks["vega"])) print(list(greeks["rho"])) api.close()

示例代码见 tqsdk/demo/option_tutorial/o40.py。函数签名与要点(见 tqsdk/ta.py):

OPTION_GREEKS(df, quote, r=0.025, v=None)
  • df:期权合约及对应标的合约组成的多 K 线序列(api.get_kline_serial()返回的 DataFrame)。第一个参数列表中顺序必须是期权合约在前、对应标的合约在后,否则返回序列值全为 nan。例如api.get_kline_serial(["SHFE.cu2006C44000", "SHFE.cu2006"], 60, 100);
  • quote:期权对象,必须是df中多 K 线序列里的那个期权合约对象,否则同样全为 nan;
  • r:可选,无风险利率,示例中取0.025;
  • v:可选,波动率。None(默认)时使用df序列计算出的隐含波动率;传入float时每一行使用相同的v;传入与df行数相同的pandas.Series时逐行使用对应值;
  • 返回值:与df行数相同的 DataFrame,包含delta、theta、gamma、vega、rho五列。

从 tqsdk/ta.py 的实现看,函数先校验quote是否为 OPTION 类型且与多 K 线序列中的symbol/symbol1匹配,不匹配时直接返回全 nan;匹配时则依次通过tqsdk.tafunc._get_t_series计算剩余到期时间、用get_impv求隐含波动率,再基于 Black-Scholes 框架的_get_d1、get_delta、get_theta、get_gamma、get_vega、get_rho逐列计算,多合约 K 线中的close(标的收盘价)与close1(期权收盘价)分别作为标的价与期权价参与计算。

o41 - 计算期权隐含波动率和历史波动率(OPTION_IMPV)

隐含波动率使用OPTION_IMPV函数,输入结构同上:

from tqsdk import TqApi, TqAuth from tqsdk.ta import OPTION_IMPV api = TqApi(auth=TqAuth("快期账户", "账户密码")) # 获取指定期权行情 quote = api.get_quote("SHFE.cu2006C50000") # 获取期权和对应标的的多合约 kline klines = api.get_kline_serial(["SHFE.cu2006C50000", "SHFE.cu2006"], 24 * 60 * 60, 20) # 通过 OPTION_IMPV 函数计算隐含波动率,设置无风险利率为 0.025 impv = OPTION_IMPV(klines, quote, 0.025) print(list(impv["impv"] * 100)) api.close()

示例代码见 tqsdk/demo/option_tutorial/o41.py。函数签名为OPTION_IMPV(df, quote, r=0.025)(见 tqsdk/ta.py):df、quote的要求与OPTION_GREEKS相同(期权在前、标的在后),返回包含一列impv的 DataFrame,行数与df相同,示例中乘以 100 后按百分比展示。

从 tqsdk/ta.py 的实现看:函数校验合约匹配后,先用_get_volatility基于期权历史价格计算一个历史波动率估计his_v(计算失败取nan时回退为0.3),再结合_get_t_series得到的剩余期限序列调用get_impv反解每一行的隐含波动率。

o60 - 获取期权波动率曲面(VOLATILITY_CURVE)

波动率曲面按行权价展开各档期权的隐含波动率,一次覆盖同一标的的多个期权合约:

from tqsdk import TqApi, TqAuth from tqsdk.ta import VOLATILITY_CURVE api = TqApi(auth=TqAuth("快期账户", "账户密码")) # 获取 m2112 的看跌期权 underlying = "DCE.m2101" options = api.query_options(underlying_symbol=underlying, option_class="PUT", expired=False) # 批量获取合约的行情信息, 存储结构必须为 dict, key 为合约, value 为行情数据 quote = {} for symbol in options: quote[symbol] = api.get_quote(symbol) options.append(underlying) klines = api.get_kline_serial(options, 24 * 60 * 60, 20) # 使用 VOLATILITY_CURVE 函数计算波动率曲面 vc = VOLATILITY_CURVE(klines, quote, underlying, r=0.025) print(vc) api.close()

示例代码见 tqsdk/demo/option_tutorial/o60.py。要点:

  • df:期权合约及基础标的基础合约组成的多 K 线序列(Dataframe 格式);
  • quotes:批量合约行情的 dict,key 为合约代码、value 为行情对象,例如{'SHFE.cu2101': {...}, 'SHFE.cu2101C34000': {...}},示例中先把查到的未下市看跌期权逐个get_quote存入字典;
  • underlying:基础标的合约名称,如DCE.m2101;多合约 K 线序列的合约列表中必须包含标的合约(示例中options.append(underlying)就是为了加入标的);
  • r:可选,无风险利率。

返回值是一个 DataFrame,行索引对应 K 线时间点(datetime列),列名为各档行权价。接口文档给出的预计输出形如:

datetime 2450.0 2500.0 ... 3600.0 3650.0 0 1.603382e+18 0.336557 0.314832 ... 0.231657 0.237882 1 1.603642e+18 0.353507 0.331051 ... 0.231657 0.237882

从 tqsdk/ta.py 的实现看:函数会先检查 K 线数据中是否包含基础标的合约,缺失时抛出kline 数据中未包含基础标的合约的K线数据, 请更正;然后对每个期权合约列,以标的收盘价与期权收盘价反解隐含波动率,并对单行结果做interpolate(method='linear')线性插值以平滑缺口,最终按行权价升序组织成曲面 DataFrame。

o70 - 期权套利策略(期货-期权平价套利)

下面示例演示一个经典的期货-期权平价套利:当“买入看涨期权并立即行权获得期货”的成本低于期货现价卖价时,同时买入看涨期权、卖出标的期货锁定差价。

from tqsdk import TqApi, TqAuth ''' 如果买入看涨期权构建多头期货的价格小于卖出期货价格 存在套利机会则发出双边挂单 ''' api = TqApi(auth=TqAuth("快期账户", "账号密码")) # 获取行权价为2950的MA109看涨期权的quote数据 quote_option = api.get_quote('CZCE.MA109C2950') # 获取期权对应标的期货,即MA109的quote数据 quote = api.get_quote(quote_option.underlying_symbol) # 套利机会尝试次数 times = 0 while True: api.wait_update() # 以对手价来计算买入看涨期权然后行权后的期货成本价格 option_buy = quote_option.strike_price + quote_option.ask_price1 # 判断当期货的买入1档,即卖出期货价格大于买入看涨期权的期货成本价格,形成套利空间时进行限价下单 if quote.bid_price1 > option_buy and times == 0: times += 1 # 以现在卖1档价格买入看涨期权 order_opiton = api.insert_order('CZCE.MA109C2950', "BUY", "OPEN", 1, quote_option.ask_price1) # 以现在买1档的价格卖出期货 order_future = api.insert_order(quote.underlying_symbol, "SELL", "OPEN", 1, quote.bid_price1) print("存在期货,期权套利空间尝试买入")

示例代码见 tqsdk/demo/option_tutorial/o70.py。核心逻辑:

  • quote_option.underlying_symbol直接从期权 quote 对象取得标的期货合约,再通过api.get_quote()获取期货行情;
  • 期权行权后的期货成本 = 行权价strike_price+ 期权卖一价ask_price1(对手价成交假设);
  • 当期货买一价bid_price1大于该成本、形成套利空间时,用api.insert_order()双边限价下单:按期权卖一价买入 1 手看涨期权(BUY/OPEN),按期货买一价卖出 1 手期货(SELL/OPEN);
  • times标志位保证套利机会只尝试触发一次,避免盘中重复下单。

主循环使用api.wait_update()驱动,行情每更新一次就重新判断一次价差,这是 tqsdk 事件驱动策略的标准写法。

o71 - 获取一组期权和其对应行权价

拿到一组期权合约后,常需要“合约 -> 行权价”的映射,api.get_quote_list()可以批量获取行情再遍历组装:

from tqsdk import TqApi, TqAuth ''' 获取标的对应看涨期权的期权和行权价对应列表 ''' api = TqApi(auth=TqAuth("快期账户", "账号密码")) # 获取沪深300股指期权的认购在市合约 ls = api.query_options("SSE.000300", "CALL", expired=False) # 批量获取这些合约的quote合约信息 quote_ls = api.get_quote_list(ls) option_ls = {} # 遍历quote合约信息,将合约和其对应行权价组装成字典 for i in quote_ls: option_ls[i.instrument_id] = i.strike_price print(option_ls) api.close()

示例代码见 tqsdk/demo/option_tutorial/o71.py。get_quote_list的签名见 tqsdk/api.py,接收合约代码列表返回批量 quote。这里以股指期权标的SSE.000300为例,先查认购未下市合约,再批量取行情,最终得到形如{"IO2312-C-3500": 3500.0, ...}的映射,是构建行权价维度数据(如行权价矩阵、波动率图横轴)的基础操作。

o72 - 按虚值/平值/实值分类:query_all_level_options(方法一)

query_all_level_options一次返回全部实值、平值、虚值期权三个列表,适合做期权链(Option Chain)展示:

from tqsdk import TqApi, TqAuth ''' 查询标的对应期权按虚值平值实值分类 ''' api = TqApi(auth=TqAuth("快期账户", "账户密码")) quote = api.get_quote("SHFE.au2112") in_money_options, at_money_options, out_of_money_options = api.query_all_level_options("SHFE.au2112", quote.last_price, "CALL") print(in_money_options) # 实值期权列表 print(at_money_options) # 平值期权列表 print(out_of_money_options) # 虚值期权列表 api.close()

示例代码见 tqsdk/demo/option_tutorial/o72.py。接口定义与返回规则(见 tqsdk/api.py):

  • 参数:underlying_symbol(标的合约)、underlying_price(比对价格,可任意取值,如quote.last_price)、option_class(必须是CALL或PUT,源码中会校验并抛出option_class 参数错误,option_class 必须是 'CALL' 或者 'PUT');ETF 期权、股指期权还需传exercise_year/exercise_month;同样支持has_A、has_MS过滤;
  • 返回值:三个列表,实值/平值/虚值,平值列表只包含一个元素;
  • 排序规则:看涨期权返回的实值、平值、虚值列表行权价依次递增;看跌期权则依次递减;
  • 平值选取逻辑与query_atm_options一致:先找严格平值,找不到取行权价距离价差最小的;两个行权价距离相等时取虚值的那个;
  • 从实现看,源码先通过_get_options_filtered过滤合约,再调用_get_options_sorted(options, underlying_price, option_class)排序并定位平值下标option_0_index,下标之前为实值、之后为虚值(tqsdk/api.py)。

o73 - 按到期月份筛选:query_all_level_finance_options(方法二)

针对 ETF 期权和股指期权,query_all_level_finance_options按“距离最后行权日远近”筛选月份,只查询未下市合约:

from tqsdk import TqApi, TqAuth ''' 查询标的对应期权按虚值平值实值分类 ''' api = TqApi(auth=TqAuth("快期账户", "账户密码")) quote = api.get_quote("SSE.510300") # 获取下月的上交所看涨300etf期权 in_money_options, at_money_options, out_of_money_options = api.query_all_level_finance_options("SSE.510300", quote.last_price, "CALL", nearbys=1) print(in_money_options) # 实值期权列表 print(at_money_options) # 平值期权列表 print(out_of_money_options) # 虚值期权列表 api.close()

示例代码见 tqsdk/demo/option_tutorial/o73.py。接口要点(见 tqsdk/api.py):

  • 仅支持以下标的合约:
标的代码品种
SSE.000300中金所沪深 300 股指期权(IO)标的
SSE.000852中金所中证 1000 股指期权(MO)标的
SSE.000016中金所上证 50 股指期权(HO)标的
SSE.510050上交所华夏上证 50 ETF 期权标的
SSE.510300上交所华泰柏瑞沪深 300 ETF 期权标的
SZSE.159919深交所嘉实沪深 300 ETF 期权标的
SZSE.159915深交所易方达创业板 ETF 期权标的
SZSE.159922深交所嘉实中证 500 ETF 期权标的
SSE.510500上交所南方中证 500 ETF 期权标的
  • nearbys(int 或 int 列表):将所有未下市期权按最后行权日由近到远排序,0代表当前月/最接近当前月份的未下市期权,1代表下一个到期的期权,依此类推。具体语义为:
    • ETF 期权:1代表参数0之后的下月,2代表随后的第一个季月,3代表随后的第二个季月;
    • 股指期权:1代表下月,2代表下下月,3代表随后第一个季月,4代表随后第二个季月,5代表随后第三个季月;
  • 示例中nearbys=1即获取上交所沪深 300 ETF 期权中“下月”的看涨期权,并按实值/平值/虚值三档返回列表;
  • 平值选取逻辑在此接口下有 5 步说明:按到期时间和行权价排序(看涨升序、看跌降序,实值在前虚值在后)→ 行权价去重排序 → 找与underlying_price差值最小的作为平值行权价(差相等时取行权价较大的,即虚值的那个)→ 多个月份时选取距离行权日期最近的那个(保证平值列表只有一个元素)→ 下标小于平值的为实值、大于平值的为虚值。

o74 - 本地计算 ETF 期权卖方开仓保证金

交易所公布的 ETF 期权义务仓(卖方)开仓保证金有固定公式,下面示例根据行情数据本地推算理论保证金。实际保证金请以期货公司收取的一手保证金为准:

''' 根据输入的ETF期权来查询该期权的交易所规则下的理论卖方保证金,实际情况请以期货公司收取的一手保证金为准 ''' def etf_margin_cal(symbol): quote_etf = api.get_quote(symbol) # 判断期权标的是不是ETF if quote_etf.underlying_symbol in ["SSE.510050", "SSE.510300", "SZSE.159919"]: if quote_etf.option_class == "CALL": # 认购期权虚值=Max(行权价-合约标的前收盘价,0) call_out_value = max(quote_etf.strike_price - quote_etf.underlying_quote.pre_close, 0) # 认购期权义务仓开仓保证金=[合约前结算价+Max(12%×合约标的前收盘价-认购期权虚值,7%×合约标的前收盘价)]×合约单位 call_margin = (quote_etf.pre_settlement + max(0.12 * quote_etf.underlying_quote.pre_close - call_out_value, 0.07 * quote_etf.underlying_quote.pre_close)) * quote_etf.volume_multiple return round(call_margin, 2) elif quote_etf.option_class == "PUT": # 认沽期权虚值=Max(合约标的前收盘价-行权价,0) put_out_value = max(quote_etf.underlying_quote.pre_close - quote_etf.strike_price, 0) # 认沽期权义务仓开仓保证金=Min[合约前结算价+Max(12%×合约标的前收盘价-认沽期权虚值,7%×行权价),行权价]×合约单位。 put_margin = min(quote_etf.pre_settlement + max(0.12 * quote_etf.underlying_quote.pre_close - put_out_value, 0.07 * quote_etf.strike_price), quote_etf.strike_price) * quote_etf.volume_multiple return round(put_margin, 2) else: print("输入的不是ETF期权合约") return None # 创建api api = TqApi(auth=TqAuth("快期账户", "账户密码")) # 深交所300etf期权 symbol = "SZSE.90000833" print(etf_margin_cal(symbol)) api.close()

示例代码见 tqsdk/demo/option_tutorial/o74.py。实现要点:

  • 通过quote_etf.underlying_symbol判断标的是否在支持列表中(SSE.510050上证 50 ETF、SSE.510300沪深 300 ETF、SZSE.159919嘉实沪深 300 ETF),否则提示“输入的不是ETF期权合约”并返回None;
  • 用到的行情字段:strike_price(行权价)、pre_settlement(合约前结算价)、volume_multiple(合约单位)、underlying_quote.pre_close(标的 ETF 前收盘价,通过 quote 对象的underlying_quote属性直接取得标的行情);
  • 认购义务仓保证金 =[合约前结算价 + Max(12%×合约标的前收盘价 − 认购期权虚值, 7%×合约标的前收盘价)] × 合约单位,其中认购期权虚值 =Max(行权价 − 合约标的前收盘价, 0);
  • 认沽义务仓保证金 =Min[合约前结算价 + Max(12%×合约标的前收盘价 − 认沽期权虚值, 7%×行权价), 行权价] × 合约单位,其中认沽期权虚值 =Max(合约标的前收盘价 − 行权价, 0);
  • 计算结果用round(..., 2)保留两位小数。

小结:期权功能模块速查

能力接口/函数参考实现
期权实时行情api.get_quote("DCE.m1807-C-2450")o10.py
多条件筛选期权api.query_options(...)o20.py、tqsdk/api.py#L2889
按档位查平值/实值/虚值api.query_atm_options(...)o30.py、tqsdk/api.py#L2966
希腊字母OPTION_GREEKS(df, quote, r)o40.py、tqsdk/ta.py#L2563
隐含波动率OPTION_IMPV(df, quote, r)o41.py、tqsdk/ta.py#L2674
波动率曲面VOLATILITY_CURVE(df, quotes, underlying, r)o60.py、tqsdk/ta.py#L2716
期货-期权平价套利api.wait_update()+api.insert_order()o70.py
合约-行权价映射api.get_quote_list(ls)o71.py
实值/平值/虚值三列表api.query_all_level_options(...)o72.py、tqsdk/api.py#L3183
按到期月份分类api.query_all_level_finance_options(...)o73.py、tqsdk/api.py#L3267
ETF 期权卖方保证金本地公式计算o74.py

使用时的通用注意事项:

  1. TqApi需传入TqAuth认证,示例中的账户信息请替换为自己的快期账户;
  2. 多 K 线序列(get_kline_serial传合约列表)在OPTION_GREEKS、OPTION_IMPV中要求期权合约在前、标的合约在后,且quote必须是序列中的期权合约,否则结果全为 nan;
  3. 股指期权、ETF 期权查询档位/分类接口时,多数情况需要指定exercise_year/exercise_month(ETF/股指期权必填);
  4. 保证金公式计算的是交易所规则下的理论值,实盘请以期货公司实际收取的一手保证金为准。
  • 金融科技

【免费下载链接】tqsdk-python

天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易

项目地址:https://gitcode.com/gh_mirrors/tq/tqsdk-python
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询