问题描述
get_option_code这个函数在示例中看到有,但是复制代码,却提示NameError: name 'get_option_code' is not defined,
请问,是投研会员才能用吗?
还是这个函数还没有开发出来使用?
解决方案
您好!出现 NameError: name 'get_option_code' is not defined 这个报错,并不是因为需要投研会员权限,也不是因为该函数未开发,而是因为 QMT 官方 Python API 中根本不存在 get_option_code 这个函数。
您看到的示例代码可能来源于其他量化平台(如聚宽 JoinQuant 等),不同平台的 API 命名规范是不同的。在 QMT 平台中,如果您想获取期权代码列表,需要使用 QMT 专属的期权查询函数。
QMT 中获取期权代码的正确替代方案
在 QMT 中,获取期权代码主要使用以下两个函数(需要通过 ContextInfo 对象调用):
1. ContextInfo.get_option_list() - 获取指定期权列表(推荐)
如果您想根据标的代码、到期月份、期权类型(认购/认沽)来精确获取期权合约代码,请使用此函数。
用法:
ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable)
示例代码:
def handlebar(ContextInfo):
# 获取到期月份为202101的上交所510300ETF认购合约
data1 = ContextInfo.get_option_list('510300.SH', '202101', "CALL")
print("认购合约列表:", data1)
# 获取20210104当天上交所510300ETF可交易的认购合约
data2 = ContextInfo.get_option_list('510300.SH', '20210104', "CALL", True)
print("当日可交易认购合约:", data2)
2. ContextInfo.get_option_undl_data() - 获取指定期权标的对应的期权品种列表
如果您想直接获取某个标的(如 510300.SH)对应的所有期权合约列表,可以使用此函数。
用法:
ContextInfo.get_option_undl_data(undl_code_ref)
示例代码:
def handlebar(ContextInfo):
# 获取 510300.SH 对应的所有期权合约列表
data = ContextInfo.get_option_undl_data('510300.SH')
print("510300.SH 对应的期权列表:", data)
总结
请将您代码中的 get_option_code 替换为 ContextInfo.get_option_list 或 ContextInfo.get_option_undl_data,并按照上述参数格式传入,即可成功获取期权代码。