🚀 AI 一键生成 qmt 策略代码

如何在 QMT 平台利用 get_etf_info 实现 ETF 申赎套利?

qmt | 发布时间: 2025/11/24
以下内容由 EasyQuant 生成。

问题描述

如何获取一只ETF的实时IOPV和它的成分股列表?

解决方案

在 QMT 中,获取 ETF 的实时 IOPV(基金份额参考净值)和成分股列表(通常包含在 ETF 申赎清单数据中)主要使用以下两个 API 函数:

  1. get_etf_iopv(stockcode): 用于获取 ETF 的实时 IOPV。
  2. get_etf_info(stockcode): 用于获取 ETF 的申赎清单详细数据,其中包含成分股列表。

以下是具体的代码示例和说明:

策略代码示例

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置需要查询的ETF代码,例如:华夏上证50ETF
    ContextInfo.etf_code = '510050.SH'

def handlebar(ContextInfo):
    # 1. 获取实时 IOPV
    # 注意:IOPV 通常在交易时间段内实时更新
    iopv = get_etf_iopv(ContextInfo.etf_code)
    print(f"ETF代码: {ContextInfo.etf_code}, 当前IOPV: {iopv}")

    # 2. 获取 ETF 申赎清单及成分股
    # 该函数返回一个字典,包含了现金差额、最小申赎单位等信息,以及成分股列表
    etf_info = get_etf_info(ContextInfo.etf_code)
    
    if etf_info:
        # 获取成分股列表,键名为 'stocks'
        stock_list = etf_info.get('stocks', [])
        
        print(f"成分股数量: {len(stock_list)}")
        print(f"前5只成分股: {stock_list[:5]}") # 打印前5个作为示例
        
        # 也可以获取其他信息,例如现金差额
        cash_balance = etf_info.get('cashBalance')
        print(f"现金差额: {cash_balance}")
    else:
        print("未获取到ETF申赎清单数据")

函数详细说明

1. get_etf_iopv(stockcode)

  • 参数: stockcode (字符串),例如 '510050.SH'
  • 返回: 一个数值 (float),表示当前的 IOPV 价格。

2. get_etf_info(stockcode)

  • 参数: stockcode (字符串),例如 '510050.SH'
  • 返回: 一个字典 (dict),包含 ETF 申赎清单的详细信息。
  • 关键键值:
    • stocks: 成分股列表 (List),包含成分股的代码。
    • cashBalance: 现金差额。
    • nav: 基金份额净值。
    • creationLimit: 申购上限。
    • redemptionLimit: 赎回上限。
    • reportUnit: 最小申购、赎回单位。

注意:请确保在“数据管理”中补充了相关的 ETF 数据,以保证回测或运行时能获取到正确的信息。在实盘模式下,这些数据通常由行情服务器实时推送。