问题描述
get_stock_list_in_sector获取过期期权代码列表无数据,获取当前的就有,请问使用方法有问题吗?
解决方案
在 QMT 平台中,get_stock_list_in_sector 函数主要用于获取当前板块的成分股,通常不支持直接获取已经退市或过期的期权合约列表。因此,您在使用该函数获取过期期权时会发现没有数据。
要获取历史时刻的期权列表或过期期权合约,您应该使用 QMT 专门提供的期权和过期合约 API,并且必须提前在数据管理中下载/补充“过期合约列表”数据。
以下是正确的获取方法:
方法一:使用 get_option_list 获取指定标的的历史期权
ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable) 可以用来获取指定期权标的在某个历史日期的期权列表。
参数说明:
undl_code:期权标的代码,如'510300.SH'。dedate:期权到期月或当前交易日期。"YYYYMM"格式为期权到期月,"YYYYMMDD"格式为获取指定日期交易的期权。opttype:期权类型,如"CALL"(认购),"PUT"(认沽),为空时认购认沽都取。isavailable:是否可交易。当dedate为"YYYYMMDD"格式时,isavailable为False时返回该日期已经上市的认购合约(包括退市/过期的)。
示例代码:
def handlebar(ContextInfo):
# 获取20210104当天上交所510300ETF已经上市的认购合约(包括退市/历史合约)
data = ContextInfo.get_option_list('510300.SH', '20210104', "CALL", False)
print("历史期权列表:", data)
方法二:使用 get_his_contract_list 获取指定市场的全部过期合约
如果您需要获取某个市场所有的过期合约,可以使用 ContextInfo.get_his_contract_list(market)。
参数说明:
market:市场代码,如'SHO'(上交所期权),'SZO'(深交所期权)。
示例代码:
def handlebar(ContextInfo):
# 获取深交所期权过期合约列表
szo_his_options = ContextInfo.get_his_contract_list('SZO')
print("深交所过期期权列表:", szo_his_options)
⚠️ 重要注意事项
无论使用哪种方法获取历史或过期期权,前提条件是您必须在 QMT 客户端的【数据管理】中,手动勾选并补充**“过期合约列表”**以及对应的历史行情数据,否则接口将返回空数据。