为什么要用复权价算收益:除权跳空的数学暴力
我的掌握程度:
先掌握这个答案
数学后果:除权跳空(−50%或+X%)直接被pct_change()捕捉为日收益——一个假−50%会:①让当日夏普分母(波动)暴增;②让累计净值曲线断崖;③让动量因子完全错误。工程选择:①后复权价:close×factor——一次性处理、一劳永逸(但历史值随新除权变化——增量更新的陷阱q-330);②原始价+因子:保存事实、用时计算——更稳健但多一列。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
收益口径和撮合价格分开
保留原始价、企业行动和复权因子,用一致口径计算收益;模拟成交、涨跌停与订单价格应使用当时真实报价。前后复权在相同调整方法下只差归一化常数时,区间收益一致;并非所有数据商都保证该条件。
本阶段实战方法 · 每个统计量都要带单位和假设
计算收益、波动、回归、显著性或相关性时,先明确样本和推断条件。
- 写清收益频率、样本数、缺失处理、是否含费用;百分数与小数不可混用。
- 手算一组小样本,再用代码复算;区分算术均值年化、复合年化和年化波动。
- 解释假设不成立会发生什么:自相关、肥尾、非平稳与多次试验都会影响结论。
使用边界
- p值不是原假设为真的概率,也不是策略未来盈利概率。
- 日波动×√252依赖时间聚合假设;252是教学常用交易日数,实际市场与口径可能不同。
背景 · 从一个困惑说起
q-014(阶段1)介绍了复权的概念——这里从数学角度展示"不复权会发生什么":一次10送10的除权让原始价从20跳到10——原始价计算的"日收益"=−50%——但你的财富一分没少。
由此产生的问题
不复权价算收益的数学后果(跳空→假亏损/假暴涨→污染一切统计)?后复权vs原始价+因子的工程选择?
核心概念
数学后果:除权跳空(−50%或+X%)直接被pct_change()捕捉为日收益——一个假−50%会:①让当日夏普分母(波动)暴增;②让累计净值曲线断崖;③让动量因子完全错误。工程选择:①后复权价:close×factor——一次性处理、一劳永逸(但历史值随新除权变化——增量更新的陷阱q-330);②原始价+因子:保存事实、用时计算——更稳健但多一列。
为什么需要它
①一切统计的地基:均值/波动/夏普/IC全部建立在收益率序列上——序列错了全部错;②不可见bug的典型:不复权的错误不报错——只是数字"不太对"——最阴险;③与q-330(复权三坑)的衔接:概念(本题)→工程(330)。
实际应用场景
自检方法:全市场日收益的最大绝对值——A股主板±10%、创业板±20%——如果看到−50%的日收益=除权没处理。
与之前知识的联系
q-014(复权概念)→本题(数学后果)→q-330(工程实现);与q-339(数据校验)的「超界值检查」联动。
⚠ 常见误解
- 分红是好消息不会造成假亏损:除息日原始价会下调——不处理就是假跌(q-013的机制在此数学化)
- 前复权可以解决:可以——但前复权的历史值随每次除权变化——增量更新时会拼接错位(q-330的深坑)
- 回测引擎会自动处理:除非你明确用了复权数据——引擎不会自动判断哪些是除权跳空
🛠 本题实践任务
对你的数据面板做日收益超界检查:找出|收益|>21%的所有行——每一行要么是除权未处理、要么是数据错误。逐一标注原因并修复。
💡 提示(先自己想5分钟再看)
复权处理见q-330;修复后重跑检查应只剩真正的涨跌停(±10%/±20%以内)。
✅ 验收标准
一张超界行清单+修复后复查通过。你消灭了数据里最暴力的一类假信号。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
Python · 独立工作线程 · 执行限时10秒
🤖 AI导师
导师会先检查你的前置知识(复权概念),再用案例、公式和代码帮助理解。此功能需要先启用服务。