> 日期: 2026-08-23 · 审查对象: E:\ZY\多因子\多因子.txt(聚宽量化课堂克隆) > 移植版策略: strategies/mf_jq1399_review.py · 口径: 沪深300成分月末快照(point-in-time) + roe公告日缓存 + circ_mv T-1 + 万0.9佣金/4bps滑点(严于原作零滑点)
教学级双因子选股:沪深300成分池内,按"市值越小越好 + ROE越高越好"等权排名打分,每 15 个交易日全换仓到得分前 20 名,等权持有。参数: tc=15 / yb=63 / N=20。
这是本报告最重要的一节——巨大收益差异与引擎、成本、代码全都无关,差异 100% 来自回测窗口。
聚宽端截图数字:策略收益 94.05%、年化收益 433.37%、夏普 14.16、最大回撤仅 6.1%、胜率 93%。这组"完美"数字的破绽在算术里:年化收益是总收益的 4.6 倍,说明窗口只有几个月——把几个月的收益按复利放大到一年,就是 433% 这种数字。
窗口定位实锤:截图中"基准收益 43.65%",逐日比对沪深300 历史,+43.65% 精确对应 2015-06-05(两位小数级吻合)。即该回测只跑了 2015-01-05 ~ 2015-06-05 这 5 个月——2015 年小盘股疯牛的最顶部段。
同一窗口两台引擎对照(分歧证伪):本平台用更严的成本口径(万0.9佣金+4bps滑点,聚宽为零滑点)在同一窗口跑出 +113.2%(比聚宽的 94% 还高)、回撤同样只有 -5.9%。引擎之间没有任何分歧——同一策略在同一风口,谁都好看。
窗口一拉长,神话立刻崩塌:
| 窗口 | 收益 | 年化 | 最大回撤 | 夏普 |
|---|---|---|---|---|
| 聚宽截图窗 2015.01~06(5个月疯牛顶) | +113.2%(本平台)/ +94%(聚宽) | +537% / +433% | -5.9% | 6.24 |
| 延长3个月到 2016.03(进来6月股灾+熔断) | +37.0% | +32.0% | -42.3% | 0.80 |
| 拉长到 11.4 年全周期 2015~2026.06 | +37.2% | +2.9% | -61.8% | 0.16 |
三个月一倍的"年化433%",十一年看只是"年化2.9%"。 这就是"展示窗数字"与"全周期真相"的标准距离。本策略的收益是 2015 年小市值风格的一次性馈赠——风口在,五个月翻倍;风口走,十年磨损。凡是只给你看短窗口高收益的策略展示,先用这把尺子量一遍。
未来函数/口径
get_fundamentals(g.q, 当日) —— 聚宽官方口径按公告可见日处理,基本安全;但其估值字段(market_cap)为查询当市值(盘前=昨收市值),无未来函数。本平台移植版用更严的"公告日+T-1"双保险。get_index_stocks('000300.XSHG') 不传日期 —— 聚宽回测内取回测当日成分(point-in-time),无生存者偏差,这点是对的。移植版用月末成分快照(同一语义)。逻辑漏洞/工程隐患
FixedSlippage(0))——教学简化;15日×20只的调仓频率下,真实滑点是收益的一阶决定项,零滑点直接高估。fillNan 均值填充 ROE 缺失值:粗糙(等于给中性分),尚可接受。portfolio_value/N(含待卖持仓市值),先卖后买同bar——聚宽开盘撮合下成立,但涨停买不进/跌停卖不出时会静默偏离目标。set_slip_fee 只在调仓日调用(佣金持久所以无害,但说明作者对引擎时机的理解是模糊的)。过拟合风险:参数少+逻辑简单,过拟合风险低——这是教学策略唯一的结构性优点。
先消除一个误会:聚宽端跑出的"94%收益/433%年化/夏普14"是窗口魔术——其基准收益43.65%精确对应沪深300在 2015-06-05 的涨幅,即该回测只跑了 2015-01-05~2015-06-05 这 5 个月的小盘疯牛顶部段。本平台在同一窗口、更严成本下跑出 +113.2%(比聚宽还高)——引擎之间没有分歧,分歧只在窗口长度。短期收益的复利年化(94%→433%)是最经典的数字幻觉。
| 窗口 | 策略 | 同期沪深300 | 年化 | 最大回撤 | 夏普 | 评价 |
|---|---|---|---|---|---|---|
| 聚宽截图窗 2015.01~2015.06 | +113.2% | +43.6% | +537% | -5.9% | 6.24 | 5个月疯牛段,两边引擎数字同级——但这就是全部真相的5个月 |
| 原作展示窗 2015.01~2016.03 | +37.0% | -14.7% | +32.0% | -42.3% | 0.80 | 加上6月股灾立刻现形 |
| 2015~2018 | +5.9% | -17.3% | +1.5% | -53.9% | 0.13 | 跑赢指数23pp但绝对收益≈0,回撤腰斩级 |
| 2019~2021 | +62.3% | +66.4% | +18.2% | -25.5% | 0.78 | 与指数持平(结构牛市跟得上) |
| 2022~2026.06 | -11.3% | -2.1% | -2.8% | -47.9% | -0.08 | 跑输指数,小盘风格崩塌期挨打 |
| 全窗 2015~2026.06 | +37.2% | +32.3% | +2.9% | -61.8% | 0.16 | 11.4年年化2.9%≈理财,回撤-62%不可承受 |
交易成本实测: W1窗口 1306笔/2.41万、W2 946笔/1.80万、W3 936笔/1.26万 —— 印证第5条:换手成本是真实拖累。
factors/roe/year=YYYY.parquet 是文件分区无year列,用 d 区间裁剪;daily/*/year=YYYY/ 是目录分区有year列。