3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权量化交易中,**行权价格(Strike Price)和到期日/最后交易日(Expiration Date)**是制定交易策略、计算隐含波动率(IV)以及进行自动化行权风控的核心要素。如果获取的数据不准确,极易导致期权因未及时行权而价值归零。
QMT平台提供了专门的接口 ContextInfo.get_option_detail_data(optioncode) 来获取期权合约的详细信息。本文将为您详细解析该接口的使用方法及避坑指南。
get_option_detail_data接口用法:
ContextInfo.get_option_detail_data(optioncode)
参数说明:
optioncode:期权合约代码,需带市场后缀。例如上交所期权 '10003280.SHO',深交所期权 '159919.SZO'。若传入空字符串 '',则默认获取当前主图的期权品种信息。关键返回值字段:
调用该接口后会返回一个字典(dict),其中包含期权合约的完整静态属性。获取行权价与到期日主要关注以下字段:
| 字段名 | 含义 | 说明 |
|---|---|---|
OptExercisePrice |
期权行权价 | 期权合约约定的行权价格(单位:元) |
ExpireDate |
到期日 | 期权合约的到期日期,通常也是最后交易日(格式:YYYYMMDD) |
EndDelivDate |
行权终止日 | 期权买方可以申报行权的最后截止日期 |
optType |
期权类型 | 'CALL'(认购)或 'PUT'(认沽) |
OptUnit |
合约单位 | 单张期权合约对应的标的证券数量 |
您可以在 QMT 的 handlebar 或 init 函数中通过以下代码获取并打印期权合约的行权价和到期日:
#coding:gbk
def init(ContextInfo):
# 设定需要查询的期权合约代码(以上交所50ETF期权为例)
ContextInfo.option_code = '10001506.SHO'
def handlebar(ContextInfo):
# 仅在最后一根Bar运行一次,避免重复打印
if not ContextInfo.is_last_bar():
return
# 获取期权详细信息
option_detail = ContextInfo.get_option_detail_data(ContextInfo.option_code)
if option_detail:
# 提取行权价与到期日
strike_price = option_detail.get('OptExercisePrice', '未知')
expire_date = option_detail.get('ExpireDate', '未知')
end_deliv_date = option_detail.get('EndDelivDate', '未知')
opt_type = option_detail.get('optType', '未知')
print(f"期权合约: {ContextInfo.option_code}")
print(f"期权类型: {opt_type}")
print(f"行权价格: {strike_price} 元")
print(f"到期日期: {expire_date}")
print(f"行权终止日: {end_deliv_date}")
else:
print(f"未能获取到合约 {ContextInfo.option_code} 的详细数据,请检查合约代码是否正确或数据是否下载完整。")
.SHO,深交所期权后缀为 .SZO。写错后缀(如写成 .SH 或 .SZ)会导致接口无法识别合约。ExpireDate(到期日)与最后交易日是同一天,但为了安全起见,建议在策略中同时参考 EndDelivDate(行权终止日),确保在行权窗口关闭前完成行权申报或平仓操作。