3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ETF 量化交易中,折溢价套利是经典的低风险策略。通过 QMT 平台提供的 API,交易者可以实时获取 ETF 的基金份额参考净值(IOPV)以及成分股申赎清单(PCFR),进而精准计算折溢价率并触发下单。
get_etf_iopv(stockcode)stockcode(如 '510050.SH')。float,即当前时刻的 IOPV 值。get_etf_info(stockcode)navPerCU)、成分股列表(stocks)及其替代标记等。$$\text{折溢价率 (%)} = \left( \frac{\text{ETF 最新成交价} - \text{IOPV}}{\text{IOPV}} \right) \times 100%$$
以下策略展示了如何在 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 及赎回指令
subscribe_quote),确保获取的 lastPrice 与 IOPV 维持最新。init 中通过 set_account() 绑定交易账号。