新增验证脚本 tests/verify_premium_calculation.py,支持批量验证config.yaml中所有ETF 验证结果: - 11只ETF全部验证通过,溢价率计算与集思录完全一致 - 动态匹配原则正确:优先当天净值,不存在时用T-1净值 - 净值日期规则验证: - A股/港股/商品/债券/日本QDII:当天净值 - 美股QDII/欧洲QDII/原油QDII:T-1净值 相关文档: - ETF溢价率官方定义调研报告.md - ETF溢价率计算校验报告.md
172 lines
6.0 KiB
Markdown
172 lines
6.0 KiB
Markdown
# ETF溢价率官方定义与计算规则调研报告
|
||
|
||
## 一、官方定义
|
||
|
||
### 1.1 溢价/折价概念(来源:21财经)
|
||
|
||
**溢价**:交易价格 > 基金份额参考净值(IOPV)
|
||
**折价**:交易价格 < 基金份额参考净值(IOPV)
|
||
|
||
### 1.2 溢价率计算公式
|
||
|
||
**实时溢价率**(盘中):
|
||
$$\text{溢价率} = \frac{\text{交易价格} - \text{IOPV}}{\text{IOPV}} \times 100\%$$
|
||
|
||
**历史溢价率**(收盘后):
|
||
$$\text{溢价率} = \frac{\text{收盘价格} - \text{基金净值}}{\text{基金净值}} \times 100\%$$
|
||
|
||
### 1.3 IOPV定义(来源:百度百科)
|
||
|
||
**IOPV(Indicative Optimized Portfolio Value)** = 基金份额参考净值
|
||
|
||
- **计算机构**:中证指数有限公司或证券交易所
|
||
- **更新频率**:每15秒对外发布一次
|
||
- **计算公式**:
|
||
$$\text{IOPV} = \frac{\sum(\text{现金替代金额} + \text{持仓数量} \times \text{最新成交价}) + \text{预估现金部分}}{\text{最小申购赎回单位份额}}$$
|
||
|
||
- **小数精度**:保留3位小数
|
||
|
||
## 二、净值披露规则
|
||
|
||
### 2.1 普通基金净值披露(来源:新浪财经)
|
||
|
||
| 阶段 | 时间 | 内容 |
|
||
|-----|------|------|
|
||
| 数据准备 | 15:00-17:00 | 等待交易所数据导入 |
|
||
| 净值计算 | 17:00-19:30 | 估值计算、托管银行复核 |
|
||
| 风险检查 | 19:30-20:30 | 资金状况、持仓概况检查 |
|
||
| **净值公布** | **约21:00前** | 基金公司官网公布**T日净值** |
|
||
| 代销机构 | T+1日 | 银行、券商更新净值数据 |
|
||
|
||
**结论**:普通基金的T日净值,在T日当晚21:00前公布。
|
||
|
||
### 2.2 QDII基金净值披露(来源:私募排排网)
|
||
|
||
QDII基金投资境外市场,存在**时差问题**:
|
||
|
||
- 美股收盘时间:北京时间凌晨(T日交易实际在T+1日凌晨结束)
|
||
- **净值计算**:需要等待境外市场收盘数据
|
||
- **披露时间**:T+2日公布净值(非自然日,是交易日)
|
||
|
||
**示例**:
|
||
- 周一(T日)买入QDII基金
|
||
- 周二凌晨美股收盘,基金净值才确定
|
||
- 周三(T+2)投资者看到周一的净值
|
||
|
||
## 三、历史溢价率计算规则
|
||
|
||
### 3.1 核心问题
|
||
|
||
计算历史溢价率时,关键问题是**净值日期匹配**:
|
||
|
||
- **实时溢价率**使用IOPV(盘中每15秒更新)
|
||
- **历史溢价率**使用基金净值(收盘后公布)
|
||
|
||
### 3.2 净值日期选择规则
|
||
|
||
根据官方披露规则:
|
||
|
||
| 基金类型 | 净值披露时间 | 历史溢价率计算 |
|
||
|---------|-------------|---------------|
|
||
| **A股ETF** | T日当晚公布 | T日收盘价配**T日净值** |
|
||
| **港股ETF** | T日当晚公布 | T日收盘价配**T日净值** |
|
||
| **商品ETF** | T日当晚公布 | T日收盘价配**T日净值** |
|
||
| **债券ETF** | T日当晚公布 | T日收盘价配**T日净值** |
|
||
| **美股QDII** | T+2日公布 | T日收盘价配**T-1日净值** |
|
||
| **日本QDII** | 视基金管理人 | 可能当天或T-1 |
|
||
| **欧洲QDII** | 视基金管理人 | 可能当天或T-1 |
|
||
|
||
### 3.3 动态匹配原则
|
||
|
||
由于不同基金管理人的披露规则可能不同,推荐**动态匹配**:
|
||
|
||
1. **优先使用当天净值**:如果T日净值已存在,使用当天净值计算
|
||
2. **否则使用T-1净值**:如果T日净值不存在,使用前一日净值
|
||
|
||
这是集思录的实际做法:根据数据可用性动态选择。
|
||
|
||
## 四、验证示例
|
||
|
||
### 4.1 创业板ETF(159915.SZ)- 当天净值
|
||
|
||
集思录数据(2026-05-15):
|
||
- 价格日期:2026-05-15
|
||
- 收盘价:3.970
|
||
- 净值日期:2026-05-15(当天)
|
||
- 净值:3.9402
|
||
- 溢价率:0.76%
|
||
|
||
$$\text{溢价率} = \frac{3.970 - 3.9402}{3.9402} = 0.76\%$$
|
||
|
||
### 4.2 纳指ETF(513100.SH)- T-1净值
|
||
|
||
集思录数据(2026-05-15):
|
||
- 价格日期:2026-05-15
|
||
- 收盘价:2.100
|
||
- 净值日期:2026-05-14(T-1)
|
||
- 净值:2.0200
|
||
- 溢价率:3.96%
|
||
|
||
$$\text{溢价率} = \frac{2.100 - 2.0200}{2.0200} = 3.96\%$$
|
||
|
||
**原因**:纳指ETF投资美股,净值T+1披露,2026-05-15的净值尚未公布。
|
||
|
||
### 4.3 日经ETF(513520.SH)- 当天净值
|
||
|
||
集思录数据(2026-05-15):
|
||
- 价格日期:2026-05-15
|
||
- 收盘价:2.085
|
||
- 净值日期:2026-05-15(当天)
|
||
- 净值:2.0626
|
||
- 溢价率:1.09%
|
||
|
||
$$\text{溢价率} = \frac{2.085 - 2.0626}{2.0626} = 1.09\%$$
|
||
|
||
**差异说明**:日经ETF虽投资日本市场,但基金管理人(华夏基金)采用当天披露净值规则。
|
||
|
||
## 五、实现建议
|
||
|
||
### 5.1 代码实现原则
|
||
|
||
```python
|
||
def calculate_premium(price_df, nav_df):
|
||
"""
|
||
计算历史溢价率
|
||
|
||
规则:
|
||
1. 优先使用当天净值(如果存在)
|
||
2. 否则使用T-1净值(当天净值不存在时)
|
||
"""
|
||
# 优先匹配当天净值
|
||
same_day_dates = price_df.index.intersection(nav_df.index)
|
||
|
||
# 对于没有当天净值的日期,使用T-1净值
|
||
nav_shifted = nav_df.copy()
|
||
nav_shifted.index = nav_shifted.index + pd.Timedelta(days=1)
|
||
t1_dates = price_df.index.intersection(nav_shifted.index)
|
||
t1_dates = t1_dates.difference(same_day_dates) # 排除已有当天净值的
|
||
|
||
# 分别计算溢价率
|
||
premium = {}
|
||
for date in same_day_dates:
|
||
premium[date] = (price[date] - nav[date]) / nav[date]
|
||
for date in t1_dates:
|
||
premium[date] = (price[date] - nav_shifted[date]) / nav_shifted[date]
|
||
|
||
return premium
|
||
```
|
||
|
||
### 5.2 数据来源选择
|
||
|
||
- **Tushare fund_nav接口**:提供基金净值数据
|
||
- **净值索引日期**:Tushare返回的净值日期是披露日期
|
||
- **判断规则**:根据数据可用性动态选择
|
||
|
||
## 六、参考资料
|
||
|
||
1. [21财经 - ETF高溢价科普](https://m.21jingji.com/article/20240202/herald/04eeb657c5e76eced6cdf586a0cd5a9f.html)
|
||
2. [百度百科 - 基金份额参考净值](https://baike.baidu.com/item/%E5%9F%BA%E9%87%91%E4%BB%BD%E9%A2%9D%E5%8F%82%E8%80%83%E5%87%80%E5%80%BC/5681878)
|
||
3. [新浪财经 - 基金净值公布时间](https://finance.sina.com.cn/money/fund/jjzl/2020-01-10/doc-iihnzahk3172342.shtml)
|
||
4. [上交所ETF基础知识](http://etf.sse.com.cn/fund/learning/knowledge/c/5704300.shtml)
|
||
5. [集思录ETF数据](https://www.jisilu.cn/data/etf/)
|
||
6. [集思录QDII数据](https://www.jisilu.cn/data/qdii/) |