本文仅用于学习研究与技术交流,不构成任何投资建议。

在一些 ETF 轮动策略 中,会引入 溢价率(Premium Rate) 作为一个重要因子,用于判断 ETF 当前价格相对于基金净值的偏离程度。 那么,在 本地量化环境 中,我们应该如何计算某只 ETF 的溢价率呢?

下面简单介绍一种实现方法。

溢价率定义

ETF 溢价率的计算公式如下:

Premium Rate=PmarketNAVNAV×100%\text{Premium Rate} = \frac{P_{market} - NAV}{NAV} \times 100\%

其中:

  • 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

代入公式:

Premium Rate=1.7911.70251.7025\text{Premium Rate} = \frac{1.791 - 1.7025}{1.7025}

计算得到当前溢价率约为:

5.20%

这与行情软件中显示的溢价率基本一致。

通过这种方式,我们就可以在 本地量化系统 中实时计算 ETF 的溢价率,并将其作为策略因子引入到 ETF 轮动策略 中进行使用。

这样不仅可以避免依赖第三方平台,还能在 回测与实盘环境中保持一致的数据逻辑,提升策略研究与执行的灵活性。

本文仅用于学习研究与技术交流,不构成任何投资建议、证券投资咨询服务或收益承诺。
Discussion

评论与交流

当前主要通过知识星球和社交媒体交流文章相关问题。

交流入口

如果你想讨论文章里的代码、数据接口或本地运行问题,可以通过知识星球或页脚社交媒体联系我。