基金数据管线:三种净值,三个完全不同的收益率
同一只基金 22 年——单位净值口径 61.8%,累计净值 367.8%,复权净值 1157.3%
一只基金有三个"净值",而只有一个能用来算收益率。
同一只基金、同一段 21.9 年、期间分红 22 次:
单位净值口径 61.8% 年化 2.22%
累计净值口径 367.8% 年化 7.28%
复权净值口径 1157.3% 年化 12.23%
三个数都能在软件里查到,而其中两个是错的。
这是 p1.3「复权口径」在基金上的版本,而且错得更隐蔽:股票不复权你还看得出跳空,基金单位净值分红后掉下来,页面上就是一条平滑曲线。
你有一棵果树。
单位净值看的是树本身值多少钱——摘了果子卖掉,树的估值就掉了。
累计净值是"树 + 历年卖果子的钱",但那些钱一直放在抽屉里。
复权净值是"树 + 卖果子的钱又买了新树苗、新树苗也结果"。
只有第三个,回答的才是「这些年我到底赚了多少」。
一、三种口径的定义与实测
| 口径 | 定义 | 隐含假设 |
|---|---|---|
| 单位净值 | 每份当前值多少 | 分红后下跌——等于把分红当成亏损 |
| 累计净值 | 单位净值 + 历史累计分红 | 分红一分钱没再投,躺在活期账户 |
| 复权净值 | 分红按除息日净值再投 | 唯一能回答"我赚了多少" |
5 只样本(按代码取样,非精选,不构成任何基金推荐):
| 代码 | 起始 | 年数 | 单位净值% | 累计净值% | 复权净值% | 分红次数 |
|---|---|---|---|---|---|---|
| 000051 | 2009-07 | 17.0 | 75.0 | 75.0 | 75.0 | 0 |
| 100038 | 2009-12 | 16.4 | 88.4 | 147.0 | 167.4 | 3 |
| 110003 | 2004-03 | 22.2 | 121.3 | 325.3 | 638.2 | 10 |
| 270002 | 2004-07 | 21.9 | 61.8 | 367.8 | 1157.3 | 22 |
| 519300 | 2006-04 | 20.3 | 11.8 | 205.0 | 324.3 | 9 |
第一行是对照组:000051 期间没有分红,所以三种口径完全相同。
分红次数越多,三个数差得越远。
二、以分红最多的那只为例
样本 270002,21.9 年,期间分红 22 次,累计分红 3.06 元/份:
单位 → 累计 差 306.0 个百分点 (把分红当亏损的代价)
累计 → 复权 差 789.5 个百分点 (分红再投的复利)
"我买的基金这些年才涨了 61.8%"——这句话大概率是看错了口径。
- 用单位净值算收益率,等于假设每次分红你都把钱扔了。
- 用累计净值算,等于假设分红全部躺在活期账户里,一分钱没再投。
而更麻烦的是:很多平台默认展示的就是单位净值曲线。它平滑、连续、看不出任何异常——分红那天的下跌,混在正常波动里。
对照 p1.3:股票不复权,除权日会留下一个肉眼可见的跳空;基金单位净值不会。
越是看不出问题的口径错误,越危险。
🔧 动手做:同一只基金,涨了 61.8% 还是 1157.3%?(5 分钟)
跑 python div_audit.py,看同一只基金 22 年的三种净值口径。
你会看到(实测):同一只基金、同一段时间——单位净值 61.8%、累计净值 367.8%、复权净值 1157.3%,差了近 1100 个百分点。
想明白:"这只基金涨了多少",答案完全取决于你用哪种净值口径。单位净值扣了分红(看着最差),复权净值把分红再投资加回去(唯一能和股票比的口径)。拿错口径比,能差出一千个百分点。看任何基金收益,先问:哪种净值?
三、复权净值怎么算(以及为什么必须先自检)
分红当日:单位净值下跌 D,而累计净值把它加了回去。所以:
D_t = Δ累计净值 − Δ单位净值 # 反推当日分红
adj_t = adj_{t-1} × (nav_t + D_t) / nav_{t-1} # 按除息日净值再投
但这条推断有个前提必须验证:当日净值下跌是分红造成的,不是拆分造成的。
两者在数据里长得不一样,可以区分:
| 单位净值 | 累计净值 | |
|---|---|---|
| 大比例分红 | 大跌 | 基本不动(它把分红加回去了) |
| 基金拆分 | 大跌 | 同比例跟跌(份额翻倍,每份都摊薄) |
自检结果(取每只基金占比最大的 3 笔):
110003 2007-05-18 分红 1.5500/份 占单位净值 57.3%
当日单位净值 -57.6% 而累计净值 -0.3% → 分红
270002 2006-12-11 分红 0.8000/份 占单位净值 43.4%
当日单位净值 -41.9% 而累计净值 +1.2% → 分红
519300 2007-04-11 分红 0.6100/份 占单位净值 36.0%
当日单位净值 -35.9% 而累计净值 +0.1% → 分红
全样本疑似拆分事件:0 笔
占净值 36%~57% 的那几笔,全部是 2006–2007 年的"净值归一"式大比例分红,不是拆分。
拆分会让
Δ累计 − Δ单位 ≈ 0,本推断天然不会把它当分红。但换一只基金、换一个数据源,这张表都必须重跑再用。
四、费率:唯一一个你永远看不见的成本
管理费与托管费按日计提,和收益一起复利。相对零费率还剩多少:
| 年费率 | 10 年后 | 20 年后 | 30 年后 | 30 年少赚 |
|---|---|---|---|---|
| 0.5% | 95.1% | 90.5% | 86.0% | 14.0% |
| 1.0% | 90.4% | 81.8% | 74.0% | 26.0% |
| 1.5% | 86.0% | 73.9% | 63.5% | 36.5% |
| 2.0% | 81.7% | 66.8% | 54.5% | 45.5% |
1.5% 的年费率,30 年吃掉 36.5%。
而它从来不出现在净值曲线上——因为公布的净值本来就是扣费后的。
你看不见它,不代表它没发生。这与 p4.2 的交易成本是同一类:不出现在报表里的成本,才是最容易被漏算的成本。
五、T 日规则:定投回测该用哪一天的净值
场外基金申购的确认规则与股票完全不同:
| 15:00 前提交 | 按当日收盘后公布的净值确认(T 日) |
| 15:00 后提交 | 按下一交易日净值确认 |
| 赎回到账 | 普遍 T+2 ~ T+7(货币基金除外) |
对回测的三条直接影响:
- 定投日的成交净值 = 当日收盘净值,不是开盘也不是任何盘中价——这与 P4 事件引擎"次日开盘成交"的股票口径不同,不能照搬
- 你下单那一刻不知道成交净值是多少(净值当晚才公布)。所以"净值跌破 X 就多投"这类规则,只能用昨日净值判断(p1.2)
- 赎回到账有 T+2~T+7 的空档,期间资金不在场内也不计收益
很多定投回测把第 ② 条弄错了:用当日净值判断、又用当日净值成交。
那不是定投,那是每天都能看到收盘价再决定买不买。
这是 p1.2「未来函数」在基金场景的具体形态——而且比股票更容易犯,因为申购确实是按当日净值成交的,很容易顺手把判断也放在当日。
成交用当日净值(对),判断用当日净值(错)。同一天的同一个数,一个能用一个不能用。
📌 免责:本课为技术教学,样本按代码取样(非精选),不推荐任何基金;所有数据为历史披露净值,不构成投资建议。
四件事:
- 三种净值,三个完全不同的收益率。同一只基金 21.9 年:单位 61.8%、累计 367.8%、复权 1157.3%;而分红 0 次的对照组(000051)三者完全相同——分红次数越多,差得越远
- 复权净值靠
Δ累计 − Δ单位反推分红,用之前必须自检:大比例分红时累计净值基本不动,拆分时累计净值同比例跟跌。本样本自检 0 笔拆分,最大的几笔(占净值 36%~57%)全部是 2006–2007 年的"净值归一"式分红 - 费率是唯一一个你永远看不见的成本:1.5% 的年费率 30 年吃掉 36.5%,而它从不出现在净值曲线上——因为公布的净值本来就是扣费后的
- T 日规则不能照搬股票口径:定投成交用当日收盘净值(与 P4 的"次日开盘"不同),但判断必须用昨日净值——因为下单时净值还没公布。同一天的同一个数,成交能用、判断不能用
下一节看指数与基金的机制:指数是怎么编的、基金为什么跟不上指数(跟踪误差从哪来)、以及非传统资产(黄金/加密/房产)的可回测边界在哪。
🔎 来源与核验· 4 条,点开核对
