miniQMT获取期权数据

miniqmt 阅读:600 2025-01-07 14:05:52 评论:0

miniQMT获取期权数据

202412311735613021849027.png

获取指定期权标的对应的期权品种列表

调用方法

from xtquant import xtdata
xtdata.get_option_undl_data(undl_code_ref)

参数

字段 类型 说明
undl_code_ref string 期权标的代码,如’510300.SH’,传空字符串时获取全部标的数据

返回

  • 指定期权标的返回的是 列表类型
  • 期权标的为空字符串返回的是 字典类型

示例

from xtquant import xtdata
print(xtdata.get_option_undl_data("510300.SH"))

获取历史期权列表

调用方法

from xtquant import xtdata
xtdata.get_option_list(undl_code, dedate, opttype, isavailable)

参数

字段 类型 说明
undl_code str 期权标的代码
dedate str 期权到期月或当前交易日期,”YYYYMM”格式为期权到期月,”YYYYMMDD”格式为获取当前日期交易的期权
opttype str 期权类型,默认值为空,”CALL”,”PUT”,为空时认购认沽都取
isavailable bool 是否可交易,当dedate的格式为”YYYYMMDD”格式为获取当前日期交易的期权时,isavailable为True时返回当前可用,为False时返回当前和历史可用

返回

  • 期权合约列表 list

示例

from xtquant import xtdata

# 获取到期月份为202101的上交所510300ETF认购合约
data = xtdata.get_option_list('510300.SH', '202101', "CALL")

# 获取20210104当天上交所510300ETF可交易的认购合约
# data = xtdata.get_option_list('510300.SH', '20210104', "CALL", True)

# 获取20210104当天上交所510300ETF已经上市的认购合约(包括退市)
# data = xtdata.get_option_list('510300.SH', '20210104', "CALL", False)

print(data)

获取指定期权品种的详细信息

调用方法

from xtquant import xtdata
xtdata.get_option_detail_data(optioncode)

参数

字段 类型 说明
optioncode str 期权代码

返回

  • 字典类型
字段 类型 说明
ExchangeID str 期权市场代码
InstrumentID str 期权代码
ProductID str 期权标的的产品ID
OpenDate - 发行日期
ExpireDate - 到期日
PreClose float 前收价格
SettlementPrice float 前结算价格
UpStopPrice float 当日涨停价
DownStopPrice float 当日跌停价
LongMarginRatio float 多头保证金率
ShortMarginRatio float 空头保证金率
PriceTick float 最小变价单位
VolumeMultiple int 合约乘数
MaxMarketOrderVolume int 涨跌停价最大下单量
MinMarketOrderVolume int 涨跌停价最小下单量
MaxLimitOrderVolume int 限价单最大下单量
MinLimitOrderVolume int 限价单最小下单量
OptUnit int 期权合约单位
MarginUnit float 期权单位保证金
OptUndlCode str 期权标的证券代码
OptUndlMarket str 期权标的证券市场
OptExercisePrice float 期权行权价
NeeqExeType str 全国股转转让类型
OptUndlRiskFreeRate float 期权标的无风险利率
OptUndlHistoryRate float 期权标的历史波动率
EndDelivDate - 期权行权终止日
optType str 期权类型

示例

from xtquant import xtdata
print(xtdata.get_option_detail_data('10002235.SHO'))

获取期权行情数据

调用方法

from xtquant import xtdata

# 下载指定合约历史行情
xtdata.download_history_data(stock_code, period, start_time='', end_time='')

# 订阅指定合约行情
xtdata.subscribe_quote(stock_code, period='', start_time='', end_time='', count=0, callback=None)

# 获取指定合约行情
xtdata.get_market_data_ex(field_list=[], stock_list=[], period='', start_time='', end_time='', count=-1, dividend_type='none', fill_data=True)

参数

xtdata.subscribe_quote

字段 类型 说明
stock_code str 股票代码
start_time str 开始时间格式YYYYMMDD/YYYYMMDDhhmmss
end_time str 结束时间
count int 数量 -1全部/n: 从结束时间向前数n个
period str 周期 分笔”tick” 分钟线”1m”/“5m” 日线”1d”

xtdata.get_market_data_ex

参数名称 类型 描述
field_list list 表示所有字段。不同的数据周期,取值范围有所不同。
stock_list list 合约代码列表
period str 数据周期,默认是当前主图周期。可选值如下: ‘tick’ (分笔线), ‘1d’ (日线), ‘1m’ (1分钟线), ‘5m’ (5分钟线), ‘15m’ (15分钟线), ‘l2quote’ (Level2行情快照), ‘l2quoteaux’ (Level2行情快照补充), ‘l2order’ (Level2逐笔委托), ‘l2transaction’ (Level2逐笔成交),’l2transactioncount’ (Level2大单统计), ‘l2orderqueue’ (Level2委买委卖队列)
start_time str 开始时间。为空时默认为最早时间。时间格式为’20201231’或’20201231093000’
end_time str 结束时间。为空时默认为最新时间。时间格式为’20201231’或’20201231235959’
count int 数据最大个数。-1表示不做个数限制
dividend_type str 复权方式,默认是当前主图复权方式。可选值包括: ‘none’ (不复权), ‘front’(前复权), ‘back’ (后复权), ‘front_ratio’ (等比前复权), ‘back_ratio’ (等比后复权)
fill_data bool 停牌填充方式

返回值

  • period为1m 5m 1dK线周期时
    • 返回dict { field1 : value1, field2 : value2, … }
    • value1, value2, … :pd.DataFrame 数据集,index为stock_list,columns为time_list
  • period为tick分笔周期时
    • 返回dict { stock1 : value1, stock2 : value2, … }
    • stock1, stock2, … :合约代码
    • value1, value2, … :np.ndarray 数据集,按数据时间戳time增序排列

示例

from xtquant import xtdata

# 订阅指定合约最新行情
xtdata.subscribe_quote('10005329.SHO', period='1d', start_time='', end_time='20231026150000', count=1, callback=None)

# 下载指定合约历史行情
xtdata.download_history_data('10005329.SHO', period="1d")  # ETF期权
xtdata.download_history_data('a2407-C-5200.DF', period="1d")  # 商品期货期权
xtdata.download_history_data('IO2312-C-3550.IF', period="1d")  # 股指期货期权

# 获取指定合约历史行情
day_data = xtdata.get_market_data_ex([], ['10005329.SHO'], period='1d', start_time='20230101', end_time='20231026', count=-1, dividend_type='front', fill_data=True)
print(day_data)

获取过期期权合约代码

调用方法

from xtquant import xtdata
xtdata.get_stock_list_in_sector(sector_name)

参数

字段 类型 说明
sector_name string 板块名称

返回值

  • list:内含成份股代码,代码形式为 ‘stockcode.market’,如 ‘000002.SZ’

示例

from xtquant import xtdata
import re

def get_option_code(market, data_type=0):
    _history_sector_dict = {
        "IF": "过期中金所",
        "SF": "过期上期所",
        "DF": "过期大商所",
        "ZF": "过期郑商所",
        "INE": "过期能源中心",
        "SHO": "过期上证期权",
        "SZO": "过期深证期权",
    }

    _sector = _history_sector_dict.get(market)
    if _sector is None:
        raise KeyError(f"不存在该市场:{market}")
    _now_sector = _sector[2:]

    if market == "SHO" or market == "SZO":
        if data_type == 0:
            _list = xtdata.get_stock_list_in_sector(_now_sector)
        elif data_type == 1:
            _list = xtdata.get_stock_list_in_sector(_sector)
        elif data_type == 2:
            _list = xtdata.get_stock_list_in_sector(_sector) + xtdata.get_stock_list_in_sector(_now_sector)
        else:
            raise KeyError(f"data_type参数错误:{data_type}")
        return _list

    if data_type == 0:
        all_list = xtdata.get_stock_list_in_sector(_now_sector)
    elif data_type == 1:
        all_list = xtdata.get_stock_list_in_sector(_sector)
    elif data_type == 2:
        all_list = xtdata.get_stock_list_in_sector(_sector) + xtdata.get_stock_list_in_sector(_now_sector)
    else:
        raise KeyError(f"data_type参数错误:{data_type}")

    _list = []
    pattern1 = r'^[A-Z]{2}\d{4}-[A-Z]-\d{4}\.[A-Z]+$'
    pattern2 = r'^[a-zA-Z]+\d+[a-zA-Z]\d+\.[A-Z]+$'
    pattern3 = r'^[a-zA-Z]+\d+-[a-zA-Z]-\d+\.[A-Z]+$'
    for i in all_list:
        if re.match(pattern1, i):
            _list.append(i)
        elif re.match(pattern2, i):
            _list.append(i)
        elif re.match(pattern3, i):
            _list.append(i)
    return _list

if __name__ == "__main__":
    xtdata.download_history_contracts()  # 下载历史合约信息

    option_code_list1 = get_option_code("IF", data_type=0)  # 获取中金所当前可交易期权合约
    option_code_list2 = get_option_code("SHO", data_type=1)  # 获取上交所已退市可交易期权合约
    option_code_list3 = get_option_code("IF", data_type=2)  # 获取中金所所有期权(包含历史)合约

    print(option_code_list1[:5])
    print("=" * 20)
    print(option_code_list2[:5])
    print("=" * 20)
    print(option_code_list3[:5])

    # 可通过xtdata.get_option_detail_data()查看合约具体信息

获取期权全推数据

调用方法

from xtquant import xtdata
xtdata.get_full_tick(code_list)

参数

字段 类型 说明
code_list list 合约列表,例如 [‘10005331.SHO’, ‘10005332.SHO’]

返回值

  • dict 数据集 { stock1 : tick1, stock2 : tick2, … }, tick字段如下:
字段 类型 说明
timetag str 时间
lastPrice float 最新价
open float 开盘价
low float 最低价
amount float 成交额
volume int 成交总量
pvolume int 原始成交总量
openInt int 持仓量
stockStatus str 证券状态
lastClose float 前收盘价
lastSettlementPrice float 前结算价
settlementPrice float 今结算价
askPrice list 多档委卖价
bidPrice list 多档委买价
askVol list 多档委卖量
bidVol list 多档委买量

示例

from xtquant import xtdata
ret_full_tick = xtdata.get_full_tick(['10005331.SHO'])
print(ret_full_tick)

期权VIX指数

VIX指数编制规则

null

  • σ:VIX/100即VIX=σ*100

  • T:到期时间

  • F:指数期权价格对应的远期指数水平

  • K0:低于F的第一个行权价

  • Ki:第i个虚值期权的行权价格;如果Ki > K0为看涨期权;如果Ki < K0为看跌期权;如果Ki=K0都选

  • null

  • ∆Ki:行权价价格————Ki附近行权价差的一半

  • R:至到期日的无风险利率

  • Q(Ki):行权价为Ki的每个期权的bid-ask价差的中点

VIX指数合约代码规则

名称 VIX指数合约代码
深圳100ETFVIX 159901VIX.SZO.VIX
创业板ETFVIX 159915VIX.SZO.VIX
沪深300ETFVIX 159919VIX.SZO.VIX
中证500ETFVIX 159922VIX.SZO.VIX
50ETFVIX 510050VIX.SHO.VIX
300ETFVIX 510300VIX.SHO.VIX
500ETFVIX 510500VIX.SHO.VIX
科创50VIX 588000VIX.SHO.VIX
科创板50VIX 588080VIX.SHO.VIX

获取VIX指数行情

202408211724208708320674.png

本文由 海星量化研究所 作者提供,转载请保留链接和署名!网址:https://qmt.hxquant.com/?id=16

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源; 2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任; 3.作者投稿可能会经我们编辑修改或补充。

搜索
排行榜
关注我们

扫码开通QMT/ptrade