升级进度

量策档案按“每 2 小时一轮”的节奏重构:更新不适合的策略、重新验证、重新回测,并把每一轮改了什么、验证了什么留在这里。数字全部来自 results.json,不手工填写。

当前轮次
第 1 轮
最近更新
2026-11-06
回测策略
10 个
数据区间
2010–2026

01 / 本轮改动

最近一轮做了什么

每轮结束都会在这里追加一条记录:改动的文件、下线的策略、新增的验证。已完成但没通过验证的策略同样保留。

第 2 轮 · 接入个股面板,做第一轮横截面因子检验

已完成

2026-11-06

指数级策略已经摊开,但“策略能不能下沉到个股”一直没有答案。本轮抓取创业板全部上市公司的后复权日线与成交额,按月末信号、次日建仓、等权五分位、实际换手计 10bp 成本,对动量、反转、低波动与非流动性四个价格类因子做分组、IC 与样本内外检验,结果单独成页。市值因子因为拿不到历史股本没有做,退市样本也拿不到——两项偏差都写在页面上,不藏。

  • 新增 build/fetch_universe.py:抓取创业板板块全部个股日线(东财公开接口,fqt=2 后复权),按最后缓存日期增量追加,缓存为 data/cn/stocks/*.csv。
  • 新增 build/cross_section.py:月末收盘形成信号、次一交易日建仓、等权五分位、按实际换手扣单边 10bp,输出多头/多空/同池等权/秩 IC/分组收益/样本内外,合并进 results.json 的 cross_section 段。
  • 新增 /factors.html 与导航入口:四个因子各有一段净值、分组与样本外表,另有“同池等权”基准行,避免把等权与小票效应算成因子 alpha。
  • /upgrade.html 验证记录增加横截面因子表;部署自检与 sitemap 加入 /factors.html。
  • 小市值与机器学习两个文献策略的状态改为如实描述:面板已接入,但缺历史股本与财务数据,仍然不给收益数字。
  • 同步更新首页结论区、关于页的数据与局限、README 的数据口径与脚本清单。

下一轮 第 3 轮:对通过初测的因子做参数稳健性与成本压力测试,标出失效边界,而不是继续加因子。

第 1 轮 · 从美股因子库转向中国创业板

已完成

2026-11-06

站点原本回测的是 Kenneth French 的美股因子与行业组合。本轮把数据源、回测引擎、策略库与全部文案整体换成中国创业板:6 条公开行情序列、10 个可回测策略、2 个文献策略,并新增稳健性检验与这页迭代日志。

  • 新增 build/fetch_cn.py:从东方财富公开行情接口抓取并缓存 6 条日频序列(创业板指、创业板R、沪深300、中证500、国债指数、GC001),回测本身完全离线。
  • 重写 build/backtest.py:信号按当日收盘计算、次日生效,符合 T+1;无风险利率改用 GC001 实际利率,不再用美国 RF。
  • 策略库改为 10 个可回测 + 2 个文献策略,全部围绕创业板;旧的 14 个美股策略与文案下线。
  • 新增稳健性检验:200 日趋势的 6 组均线窗口、5 档成本假设、4 个分区间。
  • 新增本页 /upgrade.html 与 /assets/data/upgrade.json,记录每轮改了什么、验证了什么。

下一轮 第 2 轮:接入创业板成分股日度面板,回测小市值与横截面动量因子。

02 / 路线图

六轮重构

从指数级策略到个股面板、机器学习与实盘跟踪。状态随每轮推进更新,未开始的轮次会明确标注“计划中”。

  • 数据管道与指数级策略 已完成

    接入创业板公开行情,重建回测引擎,指数级策略全部重跑。

  • 创业板个股横截面因子 已完成

    接入创业板个股日线面板,回测动量、反转、低波动与非流动性四个价格类因子;市值因子因缺历史股本未做,退市样本不可得,偏差已在因子研究页披露。

  • 参数稳健性与压力测试 计划中

    滚动窗口、成本冲击、极端行情分段,给每条策略标注失效边界。

  • 机器学习基线 计划中

    Alpha158 特征集 + 梯度提升树,严格按时间切分做样本外验证。

  • 组合与容量 计划中

    把通过检验的信号组合起来,估算容量与冲击成本。

  • 实盘跟踪框架 计划中

    信号每日更新、纸面跟踪、与回测的偏差归因。

03 / 验证记录

本轮跑过的稳健性检验

单独一条净值曲线证明不了什么。这里记录参数、成本与分区间三段检验的完整结果,包括对策略不利的数字。

均线窗口稳健性 · 200 日趋势

参数扫描
不同均线窗口下的全区间与样本外表现
窗口全区间年化全区间夏普样本外夏普
50 日10.8%0.460.47
100 日6.2%0.270.25
150 日4.4%0.190.09
200 日8.9%0.370.36
250 日12.8%0.530.37
300 日12.5%0.510.35

窗口在 50–300 日之间非单调:250 日最好(全区间夏普 0.53),150 日最差(0.19),样本外排序也不完全一致。说明均线长度本身是风险来源,不是可以优化出来的旋钮;本站固定用 200 日,不接受事后挑窗口。

成本敏感性 · 200 日趋势

0–40 bp
单边换手成本从 0 到 40bp 时的策略表现
成本假设全区间年化全区间夏普
单边 0 bp9.3%0.39
单边 5 bp8.9%0.37
单边 10 bp8.6%0.36
单边 20 bp7.9%0.33
单边 40 bp6.6%0.28

把单边成本从 0 bp 提到 40 bp,年化从 9.3% 降到 6.6%,夏普从 0.39 降到 0.28。趋势策略的换手不算高,所以成本不是它的主要杀手;真正的杀手是震荡市里的反复打脸。

分区间表现 · 五个代表策略

四个区间
每个区间内各策略的年化收益与夏普
区间交易日创业板指买入持有200 日趋势跟踪趋势 × 波动率四资产风险平价四资产等权
2010-06 → 2015-121,356+21.7%
夏普 0.66
+17.3%
夏普 0.64
+18.7%
夏普 0.90
+5.7%
夏普 0.55
+12.2%
夏普 0.52
2016-01 → 2019-12975-9.6%
夏普 -0.35
-8.0%
夏普 -0.75
-6.3%
夏普 -0.75
+3.5%
夏普 0.18
-2.7%
夏普 -0.27
2020-01 → 2021-12486+38.2%
夏普 1.17
+27.4%
夏普 0.90
+33.4%
夏普 1.24
+5.6%
夏普 1.84
+18.1%
夏普 0.94
2022-01 → 2026-111,172-5.2%
夏普 -0.08
+7.9%
夏普 0.36
+7.3%
夏普 0.42
+4.3%
夏普 1.14
-1.2%
夏普 -0.09

区间按行情阶段切分,不是按策略表现切分。风险平价在 2016–2019 的熊市里靠债券扛住回撤,但同一套参数在 2010–2015 的成长股行情里明显跑输——这正是“稳健”的代价。

横截面因子初测 · 四个价格类因子

月度调仓 · T+1
多头 Q5 与多空 Q5−Q1,后复权价,单边 10bp;明细见 因子研究
因子多头年化多头夏普多空年化多空夏普多空 tIC 均值IC t
12-1 动量+9.7%0.37-0.6%-0.110.31-0.009-0.72
1 个月反转+13.1%0.46+17.9%0.923.650.0706.77
60 日低波动+16.4%0.59+12.8%0.602.520.0936.97
60 日非流动性+21.4%0.69+17.5%0.953.820.0595.16

4 个因子里 IC t 值 ≥ 2 的有 3 个;最弱的是12-1 动量(IC 均值 -0.009,t -0.72)。IC t 值衡量的是“每月排序与下月收益同向”这件事稳不稳,不看收益大小,而多空 t 值衡量组合层面的显著性,两者都可能被少数极端月份拉高。多空 t 基于月度算术平均收益,和按复利折算的多空年化可能出现符号不一致,这时以年化为准——那才是真正落到组合上的数。股票池只含当前上市公司,退市样本缺失会系统性抬高结果,所以这里的任何正收益都应当按上限理解。

复现 机器可读的迭代记录在 upgrade.json;回测原始结果在 results.json。抓数脚本 build/fetch_cn.py、build/fetch_universe.py,回测脚本 build/backtest.py、build/cross_section.py 随站内构建保留。