🚀 AI 一键生成 qmt 策略代码
立即体验

QMT 平台如何利用 get_etf_info 与 IOPV 进行 ETF 折溢价套利?(附 Python 源码)

qmt | 发布时间: 2026/7/26
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: QMT ETF 套利实战:基于 get_etf_info 与 IOPV 折溢价计算

Question: 如何通过 QMT API 获取 ETF 申赎清单并计算实时折溢价率?

解决方案

QMT ETF 套利实战:基于 get_etf_info 与 IOPV 折溢价计算

在 ETF 量化交易中,折溢价套利是经典的低风险策略。通过 QMT 平台提供的 API,交易者可以实时获取 ETF 的基金份额参考净值(IOPV)以及成分股申赎清单(PCFR),进而精准计算折溢价率并触发下单。


1. 核心 API 接口说明

1.1 get_etf_iopv(stockcode)

  • 功能:获取 ETF 的实时基金份额参考净值(IOPV)。
  • 参数stockcode(如 '510050.SH')。
  • 返回float,即当前时刻的 IOPV 值。

1.2 get_etf_info(stockcode)

  • 功能:获取 ETF 的申赎清单及成分股详细数据。
  • 返回结构:字典(dict),包含申赎代码、现金差额、最小申购赎回单位净值(navPerCU)、成分股列表(stocks)及其替代标记等。

2. 实时折溢价率计算公式

$$\text{折溢价率 (%)} = \left( \frac{\text{ETF 最新成交价} - \text{IOPV}}{\text{IOPV}} \right) \times 100%$$

  • 溢价(溢价套利):二级市场买卖价 > IOPV。可在二级市场买入成分股申购成 ETF 份额,再在二级市场卖出。
  • 折价(折价套利):二级市场买卖价 < IOPV。可在二级市场买入 ETF 份额并赎回为成分股,再卖出成分股。

3. Python 实战代码示例

以下策略展示了如何在 QMT 中获取 510050.SH 的实时行情与 IOPV,计算折溢价率并打印输出:

#encoding:gbk

def init(ContextInfo):
    # 设置套利目标 ETF
    ContextInfo.etf = '510050.SH'
    ContextInfo.set_universe([ContextInfo.etf])
    print(f"初始化完成,监控 ETF: {ContextInfo.etf}")

def handlebar(ContextInfo):
    etf_code = ContextInfo.etf
    
    # 1. 获取最新二级市场分笔数据
    tick_data = ContextInfo.get_full_tick([etf_code])
    if etf_code not in tick_data:
        return
    
    last_price = tick_data[etf_code]['lastPrice']  # ETF 最新价格
    
    # 2. 获取实时 IOPV 净值
    iopv = get_etf_iopv(etf_code)
    
    # 3. 获取申赎清单数据 (PCFR)
    etf_info = get_etf_info(etf_code)
    
    if iopv > 0 and last_price > 0:
        # 计算折溢价率 (%)
        premium_rate = ((last_price - iopv) / iopv) * 100
        
        print(f"[{etf_code}] 最新价: {last_price:.3f} | IOPV: {iopv:.3f} | 折溢价率: {premium_rate:.2f}%")
        
        # 4. 套利条件判定示例
        if premium_rate > 0.5:  # 溢价率超过 0.5%
            print("【触发信号】存在溢价套利机会:申购 ETF 并卖出")
            # 可在此处结合 passorder() 发送买入成分股及申购指令
        elif premium_rate < -0.5:  # 折价率低于 -0.5%
            print("【触发信号】存在折价套利机会:买入 ETF 并赎回")
            # 可在此处结合 passorder() 发送买入 ETF 及赎回指令

4. 总结与优化建议

  1. 数据时效性:建议在实时盘中订阅行情(例如 subscribe_quote),确保获取的 lastPriceIOPV 维持最新。
  2. 冲击成本与手续费:实际套利时,需要考虑交易佣金、印花税、申赎费以及成分股买卖买卖价差(Bid-Ask Spread)带来的成本。
  3. 资金账号绑定:实盘时须在 init 中通过 set_account() 绑定交易账号。