问题描述
解决方案
在 QMT 量化交易平台中,获取 ETF 的实时 IOPV(基金份额参考净值)主要使用 get_etf_iopv 函数。
以下是具体的接口说明和代码示例。
1. 核心函数说明
函数名: get_etf_iopv(stockcode)
- 功能:根据 ETF 基金代码获取 ETF 的基金份额参考净值(IOPV)。
- 参数:
stockcode(string):ETF 基金代码,格式为代码.市场,例如"510050.SH"。
- 返回值:
- 返回一个数值(float),即当前的 IOPV 值。
2. 代码实现示例
以下是一个完整的 Python 策略示例,展示如何在 handlebar 函数中获取并打印指定 ETF 的 IOPV。
# -*- coding: gbk -*-
def init(ContextInfo):
# 在初始化中可以定义需要监控的ETF列表
ContextInfo.etf_code = '510050.SH' # 华夏上证50ETF
print("策略初始化完成,准备获取 IOPV")
def handlebar(ContextInfo):
# 仅在最后一根K线(实时行情)时获取,避免历史回测重复打印
if not ContextInfo.is_last_bar():
return
# 获取 IOPV
iopv_value = get_etf_iopv(ContextInfo.etf_code)
# 获取当前市场价格以便对比(可选)
market_data = ContextInfo.get_market_data_ex(
['close'],
[ContextInfo.etf_code],
period='tick',
count=1
)
current_price = 0
if ContextInfo.etf_code in market_data:
current_price = market_data[ContextInfo.etf_code].iloc[-1]['close']
# 打印结果
print(f"ETF代码: {ContextInfo.etf_code}")
print(f"实时 IOPV: {iopv_value}")
print(f"最新市价: {current_price}")
# 简单的溢价率计算示例
if iopv_value > 0:
premium_rate = (current_price - iopv_value) / iopv_value * 100
print(f"当前溢价率: {premium_rate:.4f}%")
print("-" * 30)
3. 补充说明:获取更详细的申赎清单
如果您不仅需要 IOPV,还需要获取 ETF 的申赎清单(如现金差额、最小申赎单位、成分股列表等),可以使用 get_etf_info 函数。
- 函数:
get_etf_info(stockcode) - 返回值:返回一个字典,包含
nav(基金份额净值)、cashBalance(现金差额)、stocks(成分股列表) 等详细信息。
示例片段:
etf_info = get_etf_info("510050.SH")
# 注意:get_etf_info 返回的是一个字典,键为时间戳,值为具体信息字典
if etf_info:
# 获取最新的一条数据
latest_key = list(etf_info.keys())[-1]
info_data = etf_info[latest_key]
print(f"预估现金差额: {info_data.get('ecc')}")
print(f"最小申赎单位: {info_data.get('reportUnit')}")
Q&A 常见问题解答
Q: get_etf_iopv 返回的数据有延迟吗?
A: 该函数返回的是交易所推送的实时 IOPV 数据。通常交易所每 15 秒计算并推送一次 IOPV,因此数据的更新频率取决于交易所的推送频率。
Q: 为什么有时候获取到的 IOPV 为 0 或无效值?
A: 这通常发生在非交易时间,或者该 ETF 当日暂停交易/未发布 IOPV 数据时。建议在代码中增加对返回值是否大于 0 的判断。
Q: 这个接口支持回测吗?
A: get_etf_iopv 主要用于实盘或模拟交易中的实时计算。在回测模式下,由于历史的高频 IOPV 数据量巨大,平台可能不包含完整的历史 tick 级 IOPV 数据,回测时建议谨慎使用或使用收盘净值代替。
Q: 如何利用 IOPV 进行套利?
A: 可以在 handlebar 中实时计算 (市价 - IOPV) 的差价。当市价显著高于 IOPV(溢价)时,可考虑买入成分股申购 ETF 并卖出 ETF;当市价显著低于 IOPV(折价)时,可考虑买入 ETF 赎回并卖出成分股。具体需结合 get_etf_info 获取申赎成本和门槛。