/~learn/s/60eeaff9
> 这篇文章的目的:让你不是「相信」系统,而是「验证」系统。用真实数据告诉你这个系统在历史上表现如何,并且给你工具自己去验证。
---
系统已用真实数据在两个完全不同行情的区间回测过:
| 指标 | 防御型选基 | 纯动量 | 等权全池 | 沪深300基准 |
| ------ | :---------: | :------: | :-------: | :----------: |
| 总收益 | -20.82% | -25.63% | -24.05% | -33.82% |
| 年化 | -7.49% | -9.53% | -8.85% | -13.27% |
| 最大回撤 | -37.15% | -37.17% | -35.47% | -37.17% |
| 超额收益 | +13.00% | +8.18% | +9.77% | — |
| 胜率 | 47.03% | 47.03% | 50.00% | — |
结论:在 A 股最惨的两年里,你的系统比基准少亏了 13%。不是不亏,是亏得少。
| 指标 | 防御型选基 | 纯动量 | 等权全池 | 沪深300基准 |
| ------ | :---------: | :------: | :-------: | :----------: |
| 总收益 | +38.85% | +56.33% | +52.25% | +41.84% |
| 年化 | +14.91% | +20.83% | +19.48% | +15.95% |
| 最大回撤 | -13.17% | -11.27% | -9.55% | -12.19% |
| 超额收益 | -2.99% | +14.49% | +10.41% | — |
结论:牛市里纯动量跑赢基准 14%。防御型略微跑输基准(因为它牛市中过度防御),但这也是它熊市中能保命的原因。
熊市 → 防御型跑赢基准 13%(少亏)
牛市 → 纯动量跑赢基准 14%(多赚)
震荡 → 防御型表现稳定
系统做对了一件事:在不同市况下表现不同,但始终不是最差的。
---
回测模拟了真实交易,规则如下:
调仓频率:每周五收盘后调仓(与推送频率一致) 持仓方式:等权持有 Top 8 只(每只 1/8 = 12.5%),全仓换 净值计算:每周计算一次(周五收盘价 vs 上周五收盘价) 交易成本:当前未包含(已知局限) 数据源:tushare 真实数据接口 ETF 池:73 只(与你现在使用的一致)
代码位置:cross_section_backtester.py
回测不包含交易成本,这是需要注意的。 每周换 3 只 ETF(平均换手率约 28%),如果每笔交易成本万 0.5 + 冲击成本,实际收益会比回测低一些。但 ETF 流动性好、手续费低,影响有限。
---
cd /Users/aohan/PycharmProjects/adata
PYTHONPATH=$(pwd) .venv/bin/python adata/aohan/quant/selection/backtest/historical_backtest.py
这个脚本会跑 4 个策略(防御型、纯动量、等权全池、沪深300基准)在双区间上对比。
./run_selection.sh
./run_selection.sh -d 2026-01-01
---
每次收到推送后,问自己这 3 个问题:
打开推送看第一行:
📈 🟢 强势牛市 | 仓位上限 96%
价格vs年线:+6.2% 波动率比:1.12x
看 Top 10 的因子分解明细。以今天为例:
515050 5GETF: 动量1.00 夏普0.97 反追高0.05 稳定性0.97
511220 城投债: 动量0.59 夏普0.99 反追高0.12 稳定性0.99
当前是牛市 → 权重应该是 45:25:10:20(动量 45%、夏普 25%、反追高 10%、稳定性 20%)。
看推送中权重那行:
因子权重: 动量 32% 夏普 20% 反追高 24% 稳定性 24%
等等——这个是 32:20:24:24,不是 45:25:10:20。这是因为当前使用的是 adaptive 模式,AdaptiveWeightEngine 在离散权重基础上做了波动率和趋势的微调。系统认为当前波动率 1.12x 接近正常,趋势仍需确认,所以没有把动量拉到满格 45%。
> 这说明系统比简单的「牛市→45%动量」更精细。 即使同是牛市,波动率上升时它会自动缩小动量权重。
---
选一个你知道的历史日期,让系统跑出当时的推荐,然后看后续几周的真实走势。
例如:
# 跑 2026-04-01 的选基(你记得那天之后发生了什么)
./run_selection.sh -d 2026-04-01
然后对着 K 线图看系统推荐的品种后续表现如何。
---
你担心「回测数据滞后、信号是滞后的」——系统有以下机制来应对:
| 机制 | 做了什么 | 代码 |
| ------ | ---------- | ------ |
| 反追高因子 | RSI > 72 的品种大幅降分 | mean_reversion_factor.py:L89-L92 |
| 趋势质量过滤 | 震荡上涨的品种动量打三折 | momentum_factor.py:L56-L73 |
| 距高点回撤惩罚 | 已从高点跌超 15% 的品种动量打三折 | momentum_factor.py:L75-L89 |
| 仓位上限自动调节 | 高波动时仓位从 100% 自动降到 40% | regime.py:L60-L77 |
| 分散化去重 | 同指数/同大类最多 4 只 | diversification.py:L44-L71 |
| 信号时效追踪 | 新上榜标「🆕」,连续 4 周标「🔥」 | signal_tracker.py:L76-L89 |
| 数据新鲜度检查 | 数据超 7 天标黄色、超 30 天标红色 | engine.py:L344-L367 |
> 你在交易中的直觉担忧(太高了、太热了、会不会暴跌)——系统已经用 6 个机制帮你量化处理过了。 它不是盲目追涨。
---
historical_backtest.py,看两组回测结果