3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT (Quantitative Trading Platform) 中,查询期货合约到期日主要有两种方式:一种是使用专门获取到期日的函数 get_contract_expire_date,另一种是通过获取合约详细信息的函数 get_instrumentdetail 来提取到期日字段。
以下是具体的实现方法和代码示例。
get_contract_expire_date (推荐)这是最直接的方法,专门用于获取期货合约的到期日。
ContextInfo.get_contract_expire_date(codemarket)codemarket (string),合约代码及市场,例如 'IF2312.IF'。int,格式为 YYYYMMDD 的整数(例如 20231215)。get_instrumentdetail (获取详细信息)如果你不仅需要到期日,还需要合约乘数、保证金率等其他信息,可以使用此函数。
ContextInfo.get_instrumentdetail(stockcode)stockcode (string),合约代码,例如 'IF2312.IF'。dict,包含合约详细信息的字典。其中键 'ExpireDate' 对应到期日。以下代码展示了如何在 init 函数中调用这两种方法来打印期货合约的到期日。
# -*- coding: gbk -*-
def init(ContextInfo):
# 示例合约代码:中金所沪深300股指期货 (请确保该合约在回测或实盘时间段内存在)
# 注意:实际使用时请替换为当前有效的合约代码,如 'IF2406.IF'
future_code = 'IF2312.IF'
# --- 方法一:直接获取到期日 (推荐) ---
expire_date_int = ContextInfo.get_contract_expire_date(future_code)
print(f"【方法一】合约 {future_code} 的到期日是: {expire_date_int}")
# --- 方法二:通过合约详情获取 ---
instrument_detail = ContextInfo.get_instrumentdetail(future_code)
# 检查是否成功获取到详情
if instrument_detail:
# 提取 ExpireDate 字段
expire_date_detail = instrument_detail.get('ExpireDate')
print(f"【方法二】合约 {future_code} 的到期日是: {expire_date_detail}")
# 顺便打印其他信息示例
print(f" 合约名称: {instrument_detail.get('InstrumentName')}")
print(f" 上市日期: {instrument_detail.get('OpenDate')}")
else:
print(f"未找到合约 {future_code} 的详细信息")
def handlebar(ContextInfo):
# 本示例仅在 init 中演示查询,handlebar 中无需操作
pass
.IF (如 IF2312.IF),上期所为 .SF (如 rb2310.SF)。get_instrumentdetail 依赖于本地的基础数据。如果返回为空或数据不准确,请在客户端菜单中点击“数据管理” -> “补充数据” -> “基础数据”进行更新。ContextInfo.get_his_contract_list(market) 获取历史合约列表,并确保已下载相应的历史合约信息。Q: get_contract_expire_date 返回的数据类型是什么?
A: 该函数返回的是一个整型 (int) 数值,格式为 YYYYMMDD(例如 20231215)。如果需要进行日期计算,通常需要将其转换为字符串或 Python 的 datetime 对象。
Q: 如果查询不到合约信息,函数会返回什么?
A: get_contract_expire_date 通常会返回 0 或无效值;get_instrumentdetail 会返回 None 或空字典。建议在代码中增加判断逻辑以处理无效合约代码的情况。
Q: 如何获取主力合约的到期日?
A: 首先使用 ContextInfo.get_main_contract(codemarket) 获取当前的主力合约代码(例如输入 'IF.IF' 获取当前的 IF 主力),然后再将获取到的代码传入 get_contract_expire_date 进行查询。