策略 V2 定版

沪深300 成分股 · 2018-01 ~ 2026-09(105 个月)· 全部因子 point-in-time · 生成于 2026-10-07
一句话:我原本以为问题是「权重没调好」——7:3 确实偏保守,但把 V3 腿单独拆开看,真正的病根是「盈利增长」这个因子在参与排序。把它从「占 50% 权重参与打分」降级为「只做剔除门槛(净利同比≤0 直接出局)」后,V3 腿年化从 6.99% 升到 12.19%,同时波动从 21.94% 降到 17.40%、回撤从 24.64% 降到 15.55%。这不是「多担风险换收益」,是效率提升。这一条比调权重大得多。

头部对比(总收益口径 = 分红再投,税前)

指标V1 旧版V2 定版变化
年化收益率11.41%17.37%+5.96pp
年化波动率19.99%17.19%-2.81pp
夏普比率0.4710.894+0.424
最大回撤24.96%20.17%-4.78pp
CVaR 5%(最差 5% 月份的均值)-10.00%-8.24%+1.76pp
105 个月累计收益157.38%306.03%+148.65pp
对照:同期沪深300 年化 0.89%、回撤 39.92%。V2 的累计收益是 306.03%,HS300 是 8.11%。以上为未扣交易成本的毛收益,扣成本后见第五节。

一、V1 → V2 具体改了什么

项目V1(现行)V2(定版)
V3 选股法0.5 × 股息率分位 + 0.5 × 盈利增长分位 排序先剔除「净利同比 ≤ 0」,再纯按股息率排序
V3 持股数Top 7 等权Top 7 等权(不变)
成长仓持股数Top 3 等权(单票 10%)Top 5 等权(单票 8%)
权重 V3 : 成长70 : 3060 : 40
调仓频率 / 择时每月 1 次,无择时每月 1 次,无择时(不变)
为什么要这么改 V3:原设计引入「盈利增长」是为了规避高股息陷阱(躲开那种股息高但利润在崩的股票)——这个初衷完全正确。错在让它参与评分排序,那等于主动去追高增长。实测双因子排序 6.99%,既输给只做门槛的 12.19%,也输给完全不管增长的纯股息 9.49%。「做门槛」≠「做排序权重」,这是本次最核心的一条。

二、V3 腿:三种选股法(同一批数据、同一 105 个月)

0%4%8%11%15%6.99%-25%回撤V1 双因子排序0.5 股息 + 0.5 盈利增长波动 21.9% · 夏普 0.2279.49%-17%回撤纯股息率排序完全不看盈利增长波动 18.7% · 夏普 0.40112.19%-16%回撤V2 盈利>0 做门槛再按股息率排序波动 17.4% · 夏普 0.585柱状=年化收益率(左轴) 红色=最大回撤(同比例示意)
V3 选股法年化波动夏普最大回撤CVaR 5%月胜率
双因子 0.5/0.5(V1)+6.99%21.94%0.22724.64%-9.15%49.5%
纯股息率排序+9.49%18.67%0.40116.87%-8.46%50.5%
盈利>0 做门槛 + 股息率(V2)+12.19%17.40%0.58515.55%-7.50%53.3%
注意 filtered 是三项里唯一在收益、波动、回撤、尾部四个维度同时占优的:年化比 V1 高 5.20pp,回撤低 9.09pp。纯股息排序也一样改善,但幅度小一圈 —— 说明「盈利门槛」这个动作额外贡献了约 2.70pp 年化,不是多余的装饰。

三、消融实验:每个改动各值多少(不是把最好的拼起来)

3 种 V3 选股法 × 2 种成长持股数 × 2 个权重 = 12 个组合全跑了

V3 选股法成长只数权重年化波动夏普最大回撤
双因子(V1)370:30+11.41%19.99%0.47124.96%
双因子(V1)350:50+13.74%21.84%0.53725.40%
双因子(V1)570:30+12.45%19.66%0.53228.36%
双因子(V1)550:50+15.58%21.05%0.64530.95%
纯股息370:30+13.21%17.64%0.63515.74%
纯股息350:50+15.04%20.39%0.63919.33%
纯股息570:30+14.34%16.79%0.73517.49%
纯股息550:50+16.99%19.05%0.78723.57%
盈利门槛+股息370:30+15.13%16.85%0.77914.99%
盈利门槛+股息350:50+16.42%19.97%0.72218.59%
盈利门槛+股息570:30+16.25%16.16%0.88217.03%
盈利门槛+股息550:50+18.36%18.80%0.87023.25%
V2 定版 盈利门槛+股息560:40+17.37%17.19%0.89420.17%
两个改动的性质完全不同(下面把 4 种「持股数×权重」组合的区间都列出来,不挑好看的那一行):
①「V3 改盈利门槛」全部 4 组都改善:年化 +2.68 ~ +3.80pp,回撤 -11.33 ~ -6.81pp(负=变小)。这是修复。
②「成长 3→5 只」年化 +1.12 ~ +1.94pp,但回撤 全部 4 组都恶化 +2.04 ~ +4.66pp。这是稀释,是有代价的。
我最后仍保留 5 只,理由是「不把 40% 的仓位压在 3 张彩票上」——但它是权衡,不是白捡。

四、权重:60:40 是怎么选出来的

27%24%21%18%15%10%12%15%17%20%年化收益率 →最大回撤 →V1 现行 7:311.4% / -25.0%新 70:3016.3% / -17.0%新 60:4017.4% / -20.2%新 50:5018.4% / -23.3%
配置年化波动夏普最大回撤CVaR 5%滚动12月胜率剔除最好3月后
V1 现行 7:3+11.41%19.99%0.47124.96%-10.00%84.0%+6.82%
V2 候选 70:30+16.25%16.16%0.88217.03%-7.71%96.8%+11.47%
V2 定版 60:40+17.37%17.19%0.89420.17%-8.24%95.7%+12.32%
V2 候选 50:50+18.36%18.80%0.87023.25%-8.90%89.4%+12.90%

60:40 胜出的依据

  • 6 个「窗口 × 口径」组合里,60:40 在 3 个是夏普最高的(程序逐个比较,非人工挑选)。
  • 它在三个窗口、两个口径上都单调落在 70:30 与 50:50 之间,从不跑偏 —— 是平滑曲线上的点,不是噪声尖峰。
  • 全窗口 bootstrap:总收益口径 P = 0.967、价格口径 P = 0.960,是三个候选里唯一两个口径都过 0.95 的。
  • 滚动 12 月胜率 95.7%,最差滚动 12 个月 -12.3%。

我承认的问题

  • 60:40 是我在看到 70:30 与 50:50 结果之后才补进去的 —— 严格说有事后挑选成分,这一点必须写明。
  • 若只要求「全窗口 bootstrap 显著」,50:50 的 P 其实更高(0.977),而且它的 95%CI 下界 +0.09pp 已经跨过 0,60:40 的下界是 -0.47pp。单看 bootstrap,50:50 反而更硬。
  • 我选 60:40 而不是 50:50 的理由是尾部:50:50 回撤 23.25%、最差滚动12月 -15.2%,比 60:40 的 20.17% / -12.3% 明显更差,滚动12月胜率也从 95.7% 掉到 89.4%。你要的「避免极端波动」,我把它排在 bootstrap 显著性之前。

五、稳健性:多窗口 × 多口径 × 换手成本

窗口 / 口径V1 年化V2 年化差V1 夏普V2 夏普V2 回撤P(优于V1)
全窗口 总收益+11.41%+17.37%+5.96%0.4710.89420.17%0.967
全窗口 价格+8.18%+14.19%+6.01%0.3070.71121.05%0.960
子样本A 总收益+16.24%+18.67%+2.43%0.6730.88920.17%0.652
子样本A 价格+13.74%+16.32%+2.58%0.5550.76921.05%0.676
子样本B 总收益+6.96%+14.25%+7.30%0.2990.9129.29%0.971
子样本B 价格+3.17%+10.38%+7.21%0.0700.6279.90%0.973
bootstrap:block=6 月、4000 次重抽月度收益差;P > 0.95 视为显著。子样本 A(2018-2022,54 个月)全部不显著 —— 样本短、波动大,本来就难显著;子样本 B(2022-2026)显著。

换手成本:这一节是算出来的,不是估的

口径V1 旧版V2 定版
月均单边换手率23.3%25.2%
年换手(月均×12)279%303%
毛年化11.41%17.37%
成本拖累-0.31%-0.35%
净年化(扣佣金0.025% + 卖出印花税0.05%)11.10%17.02%
净夏普0.4550.874
结论没被成本吃掉:V2 持仓更分散、成长腿权重更高,月均换手从 23.3% 升到 25.2%,成本拖累多了 0.04pp。但扣完成本,V2 相对 V1 的优势仍有 5.92pp 年化(毛差 5.96pp),净夏普 0.455 → 0.874。这个改动对交易摩擦不敏感。

六、反对意见与代价(这是扣分项,不是免责声明)

1. 最新的 2026 年 1-9 月,V2 打不过 V1 —— 这是真金白银的代价。V1 累计 +9.04%,V2 累计 +1.52%,差 7.52pp。原因很具体:成长仓从 3 只扩到 5 只之后,今年成长腿只有 +5.36%,而 3 只版本是 +36.20% —— 2026 年就是少数几只在涨,分散化直接稀释掉了。分散是买保险,保险费在好年份必须付。同期沪深300 -5.88%,两版都跑赢,但 V2 今年确实是输的那个。

2. 收益仍高度集中在少数月份。剔除最好的 3 个月后,V2 年化从 +17.37% 掉到 +12.32%;V1 同期从 +11.41% 掉到 +6.82%。这说明两个版本的超额都靠少数暴涨月支撑,不是稳定现金流。

3. 全部结论仍是样本内。同一段历史既用来发现「双因子拖累」,也用来验证「过滤法更好」,中间没有任何 out-of-sample 环节。数据就这么多,我没有硬造一个样本外。建议先小仓位跑 6 个月,用真实成交价格核对。

4.「净利同比 > 0」依赖东财单一口径(PNP_YOY_RATIO,按披露日 ≤ 选股日取最新一期),与 V3 原本自算的季度同比不完全等价。过滤后平均候选池 180 只(过滤前 246 只,最少的月份仍有 143 只)—— 不至于变成小样本收割,但这个依赖是实打实的。

5. YTD 数字是独立窗口算的,和主净值曲线的尾部不完全一致。主曲线里成长仓会带着上一年底的持仓跨年,而 YTD 窗口从空仓起算,两者不能简单相减。V1 与 V2 用同一方法算,横向可比。

七、净值曲线(对数刻度)

0.8x1.3x1.8x2.3x2.8x3.3x4.3x2018-012019-012020-012021-012022-012023-012024-012025-012026-01V1 旧版 2.57xV2 新版 4.06x沪深300 1.08x

全窗口 2018-01 ~ 2026-09

  • V2 净值 4.06x V1 2.57x 沪深300 1.08x
  • V2 单腿:V3 2.73x、成长 5.43x
  • 价格口径(含送转、不含现金分红)V2 年化 14.19%,分红对 V2 年化的贡献约 3.18pp

2026 年 1-9 月(不作弊,单独列出来)

  • V2 混合 +1.52%,V3 腿 -5.04%、成长腿 +5.36%
  • V1 混合 +9.04%,V3 腿 -4.61%、成长腿 +36.20%
  • 沪深300 -5.88%,最大回撤 12.49%

八、落地规则(每月 1 号照做)

  1. V3 底仓 60%:在沪深300 成分股中,取「过去 12 个月有实际除权派息」且「最新已披露净利同比 > 0」(PUBLISH_DATE ≤ 调仓日)的股票,按股息率从高到低取前 7 只,等权,每只约 8.6%。
  2. 成长仓 40%:ADX(14) > 22 且 +DI > −DI;TRIX > 0 且 TRIX > TRMA;收盘 > BOLL 中轨(20, 2);收盘 > 上月最高;成交额 > MA(VOL, 20)。按 ADX 从高到低取前 5 只等权,每只约 8%。已持仓者只要收盘仍在 BOLL 中轨上方且 TRIX > TRMA 就继续持有,不占用新名额。
  3. 每月 1 号把两腿权重重置回 60 : 40。回测就是按这个口径做的,别让它漂移。
  4. 不加止损、不加择时、不加波动开关。我试过波动目标 18%:年化掉约 2.1pp 只换来波动降 0.9pp,在 2020-2021 那段高波动上涨里还会踏空,性价比不够,没采用。
回测中 2026-09 的持仓(PIT 同源,不是今日行情快照):V3 = sh600066, sz002027, sh600741, sz002532, sh600803, sh601166, sh600011 | 成长 = sz300394, sh605117, sh688072, sz002371, sh603259

九、数据修正记录(2026-10-07,本报告为修正后版本)

修正了三处会改变买卖结论的问题,按严重性排序。本报告所有数字已是修正后重算的结果,与同日更早发布的版本不同。

① ADX 存在 1 个月前视(最严重)

② 实盘的复权价来源一直是脏数据

③ 实盘的成长腿玩法和回测不是一回事

局限(沿用 V1 报告,均未消除)