3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在进行期权波动率套利、期权对冲或无风险套利策略开发时,快速且准确地获取标的资产(如 50ETF 或 300ETF)的完整期权链是第一步。QMT(Quantitative Trading System)平台提供了强大的期权数据接口,支持通过标的代码一键获取其对应的所有期权合约。
本文将详细介绍 QMT 中获取期权链的两种核心方法,并提供完整的 Python 策略源码。
QMT 提供了两个主要接口来获取期权合约:
ContextInfo.get_option_undl_data()510050.SH 或 510300.SH),直接返回该标的对应的所有期权合约代码列表。ContextInfo.get_option_undl_data(undl_code_ref)ContextInfo.get_option_undl_data('510300.SH')ContextInfo.get_option_list()ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable)undl_code:标的代码,如 '510300.SH'。dedate:到期月份(格式如 '202101')或交易日期(格式如 '20210104')。opttype:期权类型,可选 'CALL'(认购)或 'PUT'(认沽),为空时全部获取。isavailable:是否可交易。当 dedate 为具体日期时生效,True 返回当前可用,False 返回当前和历史可用。以下代码展示了如何在 QMT 策略的 init 初始化函数中,分别获取 300ETF(510300.SH) 的完整期权链,以及筛选特定月份的认购期权。
#encoding:gbk
def init(ContextInfo):
# 设定标的资产为 300ETF
underlying_code = '510300.SH'
print("====== 方法一:获取标的对应的完整期权链 ======")
# 获取 300ETF 对应的所有期权合约
all_options = ContextInfo.get_option_undl_data(underlying_code)
print(f"标的 {underlying_code} 的期权合约总数: {len(all_options)}")
if len(all_options) > 0:
print("前5个期权合约示例:", all_options[:5])
print("\n====== 方法二:获取特定到期月份的认购期权 ======")
# 假设获取 2023年12月 到期的所有认购(CALL)期权
# 注意:实际运行中请根据当前年份修改到期月份,如 '202312'
target_month = '202312'
call_options = ContextInfo.get_option_list(underlying_code, target_month, 'CALL')
print(f"{target_month} 到期的认购期权数量: {len(call_options)}")
print("合约列表:", call_options)
def handlebar(ContextInfo):
# 盘中驱动逻辑
pass
.SHO(如 10003280.SHO),深圳证券交易所期权市场后缀为 .SZO。通过上述接口获取的代码已自动带上正确的市场后缀。ContextInfo.get_option_detail_data(optioncode) 接口进一步获取该期权合约的行权价、到期日、合约乘数等详细参数,以便进行套利边界计算。