问题描述
解决方案
在 QMT 量化交易平台中,查询期权合约的行权价、到期日和合约乘数等详细信息,主要使用 ContextInfo.get_option_detail_data(optioncode) 接口。
该接口返回一个字典(dictionary),包含了指定期权品种的各项静态属性。
核心代码实现
以下是一个完整的 Python 策略示例,展示了如何获取并打印指定期权合约的行权价、到期日和合约乘数。
# -*- coding: gbk -*-
def init(ContextInfo):
# 在初始化中可以设置需要查询的期权代码
# 示例代码:上交所期权,格式为 代码.市场 (如 10001506.SHO)
ContextInfo.option_code = '10001506.SHO'
def handlebar(ContextInfo):
# 限制只在最后一根K线运行,避免历史回测时重复打印
if not ContextInfo.is_last_bar():
return
# 调用接口获取期权详细信息
# 参数为期权代码,如果传空字符串 '',则默认为当前主图的期权品种
detail_data = ContextInfo.get_option_detail_data(ContextInfo.option_code)
if detail_data:
# 1. 获取行权价 (Key: OptExercisePrice)
strike_price = detail_data.get('OptExercisePrice')
# 2. 获取到期日 (Key: ExpireDate)
expire_date = detail_data.get('ExpireDate')
# 3. 获取合约乘数 (Key: VolumeMultiple)
multiplier = detail_data.get('VolumeMultiple')
# 打印结果
print(f"合约代码: {ContextInfo.option_code}")
print(f"行权价: {strike_price}")
print(f"到期日: {expire_date}")
print(f"合约乘数: {multiplier}")
# 打印完整字典以查看其他可用字段
# print("完整信息:", detail_data)
else:
print(f"未找到合约 {ContextInfo.option_code} 的详细信息")
关键字段说明
调用 ContextInfo.get_option_detail_data(optioncode) 返回的字典中,关键字段对应的含义如下:
| 字段 Key | 含义 | 说明 |
|---|---|---|
OptExercisePrice |
行权价 | 期权的执行价格 |
ExpireDate |
到期日 | 期权合约的到期日期,格式通常为 YYYYMMDD |
VolumeMultiple |
合约乘数 | 每张合约对应的标的证券数量(如ETF期权通常为10000) |
OptUndlCode |
标的证券代码 | 该期权对应的标的资产代码(如 510050) |
optType |
期权类型 | 返回 'CALL' (认购) 或 'PUT' (认沽) |
OpenDate |
上市日期 | 合约开始交易的日期 |
注意事项
- 代码格式:期权代码必须包含市场后缀。例如上交所期权后缀为
.SHO(如10001506.SHO),深交所期权后缀为.SZO。 - 数据补充:如果是回测历史过期的期权合约,请确保在“数据管理”中下载了对应的过期合约列表和历史数据。
- 主图获取:如果函数参数传入空字符串
'',系统会尝试获取当前策略编辑器主图所选品种的详细信息。
Q&A
Q: 如何获取期权对应的标的资产代码?
A: 在 get_option_detail_data 返回的字典中,使用 key OptUndlCode 获取标的代码,使用 OptUndlMarket 获取标的市场。
Q: 如何判断一个期权是认购(Call)还是认沽(Put)?
A: 返回的字典中包含 optType 字段,其值为 'CALL' 代表认购期权,'PUT' 代表认沽期权。
Q: 除了静态数据,如何获取期权的实时隐含波动率?
A: 可以使用 ContextInfo.get_option_iv(optioncode) 接口来获取指定期权品种的实时隐含波动率。