QMT期权实盘交易所需数据获取方法

miniqmt 阅读:729 2025-01-07 13:35:35 评论:0

获取期权数据

202412311735613021849027.png

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

为了获取与指定期权标的相关的期权品种列表,可以使用以下函数操作。该函数需要输入期权标的(ETF标的代码)作为参数,并返回所有与此期权标的相关的期权品种信息。

调用方法

#encoding:gbk
def init(ContextInfo):
    pass

def after_init(ContextInfo):
    data = ContextInfo.get_option_undl_data(undl_code_ref)

参数

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

返回

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

示例返回值

#encoding:gbk
def init(ContextInfo):
    ContextInfo.etf_code = "510050.SH"
    
def after_init(ContextInfo):
    data = ContextInfo.get_option_undl_data('510300.SH')
    print(data)

获取历史期权列表

该函数帮助用户获取历史期权列表,包括某日历史在上交所上市的认购合约和认沽合约,也包括已经退市的合约。

调用方法

#encoding:gbk
def init(ContextInfo):
    pass

def after_init(ContextInfo):
    ContextInfo.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

提示

获取历史期权需要下载过期合约列表。

示例返回值

#encoding:gbk
def init(ContextInfo):
    pass

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

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

该函数帮助用户获取指定期权品种的详细信息,如期权代码、市场、涨跌停价、期权行权价以及期权行权终止日等关键数据。

调用方法

#encoding:gbk
def init(ContextInfo):
    pass

def after_init(ContextInfo):
    ContextInfo.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 期权类型

示例返回值

#encoding:gbk
def init(ContextInfo):
    pass

def after_init(ContextInfo):
    print(ContextInfo.get_option_detail_data('10002235.SHO'))

基于BS模型计算欧式期权理论价格

基于Black-Scholes-Merton模型,输入期权标的价格、期权行权价、无风险利率、期权标的年化波动率、剩余天数、标的分红率,计算期权的理论价格。

调用方法

#encoding:gbk
def init(ContextInfo):
    pass

def after_init(ContextInfo):
    ContextInfo.bsm_price(optionType, objectPrices, strikePrice, riskFree, sigma, days, dividend)

参数

字段 类型 说明
optionType str 期权类型,认购:’C’,认沽:’P’
objectPrices float 期权标的价格,可以是价格列表或者单个价格
strikePrice float 期权行权价
riskFree float 无风险收益率
sigma float 标的波动率
days int 剩余天数
dividend float 分红率

返回

  • objectPricesfloat 时,返回 float
  • objectPriceslist 时,返回 list
  • 计算结果最小值 0.0001,结果保留4位小数,输入非法参数返回 nan

示例返回值

#encoding:gbk
import numpy as np

def init(ContextInfo):
    pass

def after_init(ContextInfo):
    object_prices = list(np.arange(3, 4, 0.01))
    # 计算剩余15天的行权价3.5的认购期权,在无风险利率3%,分红率为0,标的年化波动率为23%时标的价格从3元到4元变动过程中期权理论价格序列
    prices = ContextInfo.bsm_price('C', object_prices, 3.5, 0.03, 0.23, 15, 0)
    print(prices)

基于BS模型计算欧式期权隐含波动率

基于Black-Scholes-Merton模型,输入期权标的价格、期权行权价、期权现价、无风险利率、剩余天数、标的分红率,计算期权的隐含波动率。

调用方法

#encoding:gbk
def init(ContextInfo):
    pass

def after_init(ContextInfo):
    ContextInfo.bsm_iv(optionType, objectPrices, strikePrice, optionPrice, riskFree, days, dividend)

参数

字段 类型 说明
optionType str 期权类型,认购:’C’,认沽:’P’
objectPrices float 期权标的价格,可以是价格列表或者单个价格
strikePrice float 期权行权价
optionPrice float 期权现价
riskFree float 无风险收益率
days int 剩余天数
dividend float 分红率

返回

  • double

示例返回值

#encoding:gbk
import numpy as np

def init(ContextInfo):
    pass

def after_init(ContextInfo):
    # 计算剩余15天的行权价3.5的认购期权,在无风险利率3%,分红率为0时,标的现价3.51元,期权价格0.0725元时的隐含波动率
    iv = ContextInfo.bsm_iv('C', 3.51, 3.5, 0.0725, 0.03, 15)
    print(iv)

获取过期期权合约代码

注意

获取过期期权合约代码本质上是通过 get_stock_list_in_sector() 获取到过期板块内容,所以在使用前,请务必确保已经下载过历史合约信息。

调用方法

#encoding:gbk
def init(C):
    pass

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

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

def get_option_code(C, 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 = C.get_stock_list_in_sector(_now_sector)
        elif data_type == 1:
            _list = C.get_stock_list_in_sector(_sector)
        elif data_type == 2:
            _list = C.get_stock_list_in_sector(_sector) + C.get_stock_list_in_sector(_now_sector)
        else:
            raise KeyError(f"data_type参数错误:{data_type}")
        return _list

    if data_type == 0:
        all_list = C.get_stock_list_in_sector(_now_sector)
    elif data_type == 1:
        all_list = C.get_stock_list_in_sector(_sector)
    elif data_type == 2:
        all_list = C.get_stock_list_in_sector(_sector) + C.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

获取期权全推数据

获取全推tick数据的函数是用户主动调用的工具。所谓”全推tick数据”,指的是以tick(最小报价单位)为单位的实时市场数据,包括每一笔交易的信息,如成交金额、成交量、收盘价等。

调用方法

# coding=utf-8
from xtquant import xtdata
xtdata.get_full_tick(code_list)

参数

字段 类型 说明
code_list list 合约列表

返回值

  • 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 多档委买量

示例返回值

# coding=utf-8
from xtquant import xtdata
ret_full_tick = xtdata.get_full_tick(['10005331.SHO'])
print(ret_full_tick)

期权VIX指数

VIX指数合约代码规则

沪深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指数行情

获取VIX指数行情的函数可以帮助用户实时获取VIX指数的市场数据,以便进行波动率分析和风险管理。

调用方法

# coding=utf-8
from xtquant import xtdata
vix_data = xtdata.get_market_data_ex([], ['510050VIX.SHO.VIX'], period='1d')
print(vix_data)

参数

字段 类型 说明
field_list list 表示所有字段,不同的数据周期,取值范围有所不同
stock_list list 合约代码列表
period str 数据周期,默认是当前主图周期。可选值如下:’tick’ (分笔线),’1d’ (日线),’1m’ (1分钟线),’5m’ (5分钟线),’15m’ (15分钟线)

返回值

  • period1m5m1d K线周期时,返回 dict,格式为 { field1 : value1, field2 : value2, ... },其中 value1, value2, ...pd.DataFrame 数据集,indexstock_listcolumnstime_list
  • periodtick 分笔周期时,返回 dict,格式为 { stock1 : value1, stock2 : value2, ... },其中 stock1, stock2, ... 为合约代码,value1, value2, ...np.ndarray 数据集,按数据时间戳 time 增序排列。

示例返回值

# coding=utf-8
from xtquant import xtdata
vix_data = xtdata.get_market_data_ex([], ['510050VIX.SHO.VIX'], period='1d')
print(vix_data)

202408211724208708320674.png

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

声明

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

搜索
排行榜
关注我们

扫码开通QMT/ptrade