3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权量化交易中,动态获取期权链(Option Chain)是构建波动率套利、备兑开仓、跨式套利等策略的基础。国信证券 QMT 平台提供了强大的 ContextInfo.get_option_list() 接口,允许开发者根据标的物、到期日、期权类型等维度,动态筛选出符合条件的期权合约代码列表。
ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable)
undl_code (string): 期权标的代码。例如:'510300.SH'(沪深300ETF)或 '510050.SH'(上证50ETF)。dedate (string): 期权到期月或具体交易日期。
'202101'):表示获取该到期月份的所有期权合约。'20210104'):表示获取该交易日当天正在交易的期权合约。opttype (string, 可选): 期权类型。默认值为空,表示同时获取认购和认沽期权。可选值:
'CALL': 认购期权(看涨)'PUT': 认沽期权(看跌)isavailable (bool, 可选): 是否仅返回当前可交易的合约。当 dedate 格式为 "YYYYMMDD" 时生效:
True: 仅返回当前可交易的活跃合约。False: 返回当前和历史已退市的可用合约。list 结构,内含符合条件的期权合约代码(如 ['10003280.SHO', '10003281.SHO', ...])。注意:如果需要获取历史已过期的期权合约,请确保已在 QMT 客户端的“数据管理”中下载了对应的过期合约列表。
# 获取到期月份为2021年1月的上交所510300ETF认购期权列表
call_options = ContextInfo.get_option_list('510300.SH', '202101', "CALL")
print("202101到期认购期权:", call_options)
# 获取2021年1月4日当天,上交所510300ETF所有可交易的认沽期权
put_options = ContextInfo.get_option_list('510300.SH', '20210104', "PUT", True)
print("20210104可交易认沽期权:", put_options)
以下是一个完整的 QMT 策略框架,展示了如何在 handlebar 中动态获取期权链,并获取期权合约的详细信息(如行权价、到期日等):
#coding:gbk
def init(ContextInfo):
# 设定标的物为 510300.SH
ContextInfo.underlying = '510300.SH'
# 设定目标到期月份
ContextInfo.target_month = '202101'
print("期权策略初始化成功!")
def handlebar(ContextInfo):
# 仅在最后一根Bar执行,避免历史回测重复打印
if not ContextInfo.is_last_bar():
return
# 1. 动态获取 2021年1月到期的所有认购期权 (CALL)
call_list = ContextInfo.get_option_list(ContextInfo.underlying, ContextInfo.target_month, 'CALL')
print(f"标的 {ContextInfo.underlying} 在 {ContextInfo.target_month} 到期的认购期权共 {len(call_list)} 只:")
# 2. 循环遍历期权链,获取期权合约的详细行权信息
for option_code in call_list[:5]: # 仅打印前5只作为示例
detail = ContextInfo.get_option_detail_data(option_code)
if detail:
exercise_price = detail.get('OptExercisePrice', '未知') # 行权价
expire_date = detail.get('ExpireDate', '未知') # 到期日
opt_type = detail.get('optType', '未知') # 期权类型
print(f"期权代码: {option_code} | 类型: {opt_type} | 行权价: {exercise_price} | 到期日: {expire_date}")
.SHO,深交所期权为 .SZO)。同时,请确认本地是否补充了对应的历史期权行情数据与过期合约列表。ContextInfo.get_option_iv(optioncode) 动态获取实时隐含波动率,或者使用 ContextInfo.bsm_iv() 函数自行计算。