本文仅用于学习研究与技术交流,不构成任何投资建议。
在一些 ETF 轮动策略 中,会引入 溢价率(Premium Rate) 作为一个重要因子,用于判断 ETF 当前价格相对于基金净值的偏离程度。 那么,在 本地量化环境 中,我们应该如何计算某只 ETF 的溢价率呢?
下面简单介绍一种实现方法。
溢价率定义
ETF 溢价率的计算公式如下:
其中:
P_{market}:ETF 在二级市场的交易价格(Market Price)NAV:ETF 的基金单位净值(Net Asset Value)
当 ETF 的市场价格高于净值时,说明 ETF 处于 溢价状态;反之则为 折价状态。
1. 价格数据获取
ETF 的市场交易价格可以通过 Tushare 的 fund_daily 接口获取。

以最近比较热门的 南方原油 LOF 为例,可以通过如下代码获取其历史行情:
df = pro.fund_daily(ts_code="501018.SH")

如果需要使用 实时行情 来计算溢价率,可以使用 Tushare 的 realtime_quote 接口获取最新价格。
2. 基金净值数据获取
计算溢价率还需要 ETF 对应基金的 单位净值(NAV)。这部分数据可以通过 Tushare 的 fund_nav 接口获取。

例如,获取 南方原油 LOF 的基金净值:
df = pro.fund_nav(ts_code="501018.SH")
返回的数据中,unit_nav 字段即为 基金单位净值。

需要注意的是,基金净值的公布通常存在一定滞后。
例如,2026 年 3 月 12 日的基金净值,可能要到 2026 年 3 月 14 日 才会公布。 因此,在使用历史数据时,需要特别注意 避免引入未来函数。
具体来说,应当以 ann_date(公告日期) 作为可用数据的时间依据,而不是 nav_date(净值日期)。
此外,根据我的观察:
- 某些基金
ann_date = 202603XX的净值数据,可能在 当日开盘前 就已经公布; - 但也有可能是在 当日下午 才公布。
因此在策略实现时可以采用两种不同处理方式。
历史回测
建议使用:
date > ann_date
这样可以最大程度避免未来函数。
实盘运行
可以使用:
date >= ann_date
以尽可能使用最新的净值数据计算溢价率。
3. 溢价率计算
例如,目前是 3 月 14 日。 南方原油 LOF 的:
- 最新收盘价:1.791
- 最新公布单位净值:1.7025
代入公式:
计算得到当前溢价率约为:
5.20%
这与行情软件中显示的溢价率基本一致。

通过这种方式,我们就可以在 本地量化系统 中实时计算 ETF 的溢价率,并将其作为策略因子引入到 ETF 轮动策略 中进行使用。
这样不仅可以避免依赖第三方平台,还能在 回测与实盘环境中保持一致的数据逻辑,提升策略研究与执行的灵活性。
评论与交流
当前主要通过知识星球和社交媒体交流文章相关问题。
交流入口
如果你想讨论文章里的代码、数据接口或本地运行问题,可以通过知识星球或页脚社交媒体联系我。