3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 中,获取指定 ETF 在特定到期月份的认购(Call)和认沽(Put)期权合约代码,主要使用 ContextInfo.get_option_list 接口。
ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable)
'510050.SH'。"YYYYMM"(例如 "202312")。"CALL" 获取认购,传 "PUT" 获取认沽,传 "" (空字符串) 则同时获取两者。dedate 为月份格式时,此参数通常可忽略或传默认值。以下代码展示了如何获取 华夏上证50ETF (510050.SH) 在 2023年12月 到期的所有期权合约代码。
# -*- coding: gbk -*-
def init(ContextInfo):
# 1. 设置标的物代码 (例如: 50ETF)
underlying_code = '510050.SH'
# 2. 设置到期月份 (格式: YYYYMM)
# 注意:请确保该月份有对应的期权合约数据,如果是回测,需确保在回测时间范围内
target_month = '202312'
# 3. 获取所有合约 (认购 + 认沽)
# 第三个参数传 "" 代表获取所有类型
all_options = ContextInfo.get_option_list(underlying_code, target_month, "")
# 4. 分别获取认购和认沽 (可选)
call_options = ContextInfo.get_option_list(underlying_code, target_month, "CALL")
put_options = ContextInfo.get_option_list(underlying_code, target_month, "PUT")
# 打印结果
print(f"标的: {underlying_code}, 到期月份: {target_month}")
print("=" * 30)
print(f"全部合约数量: {len(all_options)}")
print(f"全部合约列表: {all_options}")
print("-" * 30)
print(f"认购合约(Call)数量: {len(call_options)}")
print(f"认购合约列表: {call_options}")
print("-" * 30)
print(f"认沽合约(Put)数量: {len(put_options)}")
print(f"认沽合约列表: {put_options}")
def handlebar(ContextInfo):
# 该策略主要在 init 中演示数据获取,handlebar 可留空
pass
dedate 参数必须是字符串格式。如果是获取某个月份的所有合约,格式必须是 "YYYYMM";如果是获取某一天正在交易的合约,格式则是 "YYYYMMDD"。.SH 或 .SZ。Q: 如何获取当前交易日所有可交易的期权合约,而不是指定月份的?
A: 将 dedate 参数设置为当前日期(格式 "YYYYMMDD"),并将 isavailable 参数设置为 True。例如:ContextInfo.get_option_list('510050.SH', '20231201', "", True)。
Q: 获取到的期权代码列表包含后缀吗?
A: 是的,返回的列表中包含市场后缀,例如 '10005001.SHO'(上海证券交易所期权)。
Q: 如何进一步获取这些期权合约的行权价和到期日详细信息?
A: 获取到代码列表后,可以使用 ContextInfo.get_instrumentdetail(option_code) 或 ContextInfo.get_option_detail_data(option_code) 来查询单个合约的具体信息(如行权价、合约乘数等)。