对于做期货期权量化交易的投资者来说,因为期货期权合约都是有一定时效性的,过期了再按照原来的方式取数据是没有办法的,今天给大家分享QMT如何下载过期期货期权合约以及如何获取过期期权合约数据。
首先是下载【过期合约列表】,这一步在数据管理-补充数据中选择“过期合约列表”,然后直接点“补充”,这一步不需要勾选,默认下载所有的合约列表。

下载完成之后,同样的地方,选择【过期合约K线】,这里可以勾选自己需要做回测的交易品种,交易所等等,然后选择开始下载即可。

以上两步就是必做的前置工作,下面就是如何获取这些数据并且根据自己的研究写成策略来回测了。
这里提一嘴,网页的智能助手还是蛮好用的,问了一下获取期权数据的函数有哪些,直接就出来了,免得要去翻知识库。

获取期权的数据大致有三类,①获取标的对应的期权列表;②获取指定期权品种的详细信息;③获取指定期权列表。
1. 获取指定期权标的对应的期权品种列表
函数名: ContextInfo.get_option_undl_data(undl_code_ref)
功能: 获取指定期权标的(如"510300.SH")对应的期权品种列表。若传入空字符串,则返回全部标的对应的品种列表字典。
返回值: 指定标的时返回期权合约列表(list),空字符串时返回全部标的的字典(dict)。
示例:获取510300.SH对应的所有期权合约列表:print(C.get_option_undl_data("510300.SH"))
返回的结果是对应的所有月份的合约,所有上市的,可以把结果复制到表格中对应查看。


2. 获取指定期权品种的详细信息
函数名: ContextInfo.get_option_detail_data(optioncode)
功能: 获取指定期权代码(如"10001506.SHO")的详细信息,包括行权价、到期日、合约乘数等。若传入空字符串,则默认使用当前主图期权品种。
返回值: 包含期权详细信息的字典(dict)。
示例:获取“10009235.SHO”合约的详细信息:print(C.get_option_detail_data("10009235.SHO"))
返回的结果如下所示,可以根据自己的需要提取相应的数据。

3. 获取指定期权列表
函数名: ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable)
功能: 根据标的代码、到期月份或日期、期权类型(认购/认沽)及是否可交易条件,筛选期权合约列表。
参数说明:
·undl_code: 标的代码(如"510300.SH")
·dedate: 到期月份(格式"YYYYMM")或交易日期(格式"YYYYMMDD")
·opttype: 期权类型(“CALL”、"PUT"或空字符串)
·isavailable: 是否仅返回可交易合约(True/False)
返回值: 符合条件的期权合约列表(list)。
示例①# 获取到期月份为202511的510300.SH认购合约
print(C.get_option_list("510300.SH", "202511", "CALL"))
返回结果:
![]()
示例②:# 获取20251126和27日当天可交易的510300.SH认购合约
print(C.get_option_list("510300.SH", "20251126", "CALL", True))
print(C.get_option_list("510300.SH", "20251127", "CALL", True))
这里特意取2天的数据是因为26日是期权的到期日,给大家对比一下到期日前后的合约变化。
我将两个数据复制到excel表格中,红色部分是合约代码不一样的,26日因为11月份的合约还在交易,所以还在列表中,并且能和我们上一个步骤取到的到期合约一一对应,27日的红色部分则是新挂的1月的合约。

每个月份对应的合约月份表如下:12月相对11月,只是新增1月的合约,去掉11月的合约。

示例③: # 获取20251127当天已上市(包括退市)的510300.SH认购合约
print(C.get_option_list("510300.SH", "20251127", "CALL", False))
返回结果如下所示:列表太多了,但是一看都知道是包含了已经退市的合约,比如像10004753.SHO这种数字比较靠前的,现在肯定已经退市了,不过具体是那个月份的,就需要取详细信息了。

好了,今天的分享到这里了,没有开通量化交易软件的可以联系我哦~
