94%炒股 9 年,池子 94% 的交易日都在满员运行
~21 只门外常年排队的候选,远多于 10 个名额
37.0%排队机制的全期 CAGR(生产是 31.5%)
0 个挑券信号能通过 train+test 双赢的 OOS 检验
一句话结论。配债池的收益主要来自
小盘 beta + “宣布配债”的事件漂移,不是“哪只券更会涨”。所以
在满员的 10 个名额里换“选谁”的信号,统计上拉不出差别——行业分散、低β、动量、小盘,一个都过不了 train+test 双赢的 OOS 纪律。真正把收益抬上去的,是
给了少量被“满员误杀”的券第二次机会:让过会券进队排队、有空位按 FIFO+反追高 15% 补上,而不是当天满员就永久跳过。这一个改动,全期 31.5%→37.0%、train 26.7→32.6、test 59.2→62.3、回撤 −34.9→−31.6,
四个维度全赢,是唯一可信的优化方向。
一、先看清“选券”到底有多少空间
长历史并发利用率诊断(2017–2026)
937 只候选,cap=10
| 指标 | 取值 |
| 全池日均并发 | ~30 只(中位 30,最大 75) |
| 满员(≥10 只)天数占比 | 94% |
| 门外平均排队候选 | ~21 只 |
| 有券入场的交易日 | 26%(每天平均 1.7 只过会) |
直觉上“10 选多少”应该有巨大操作空间——9 年里有 94% 的日子池子满员、门外常年排 20 多只。如果“选谁”真能分出高低,这里就是最肥的战场。
二、挑券信号:一个都没用(长历史 + OOS 双杀)
排队池口径下的选券信号对比
train = 2017–2024,test(OOS) = 2025+;只有 train、test 都赢才算真改进
| 方案 | 全期 C/S/M | train C/S | test C/S |
| 生产:满则跳过·FIFO+gate15 | 31.5 / 1.08 / −34.9 | 26.7 / 0.96 | 59.2 / 1.68 |
| 排队·FIFO+gate15 | 37.0 / 1.24 / −31.6 | 32.6 / 1.14 | 62.3 / 1.79 |
| 排队·行业分散 | 31.5 / 1.10 / −36.8 | 25.6 / 0.95 | 65.3 / 1.85 |
| 排队·低β | 23.2 / 0.92 / −32.9 | 17.0 / 0.73 | 58.8 / 1.76 |
| 排队·行业+低β | 31.6 / 1.15 / −34.1 | 26.1 / 1.01 | 62.7 / 1.85 |
| 排队·小盘 | 33.6 / 1.12 / −36.5 | 29.2 / 1.01 | 58.7 / 1.71 |
| 排队·低动量 | 26.2 / 0.94 / −39.3 | 20.1 / 0.77 | 60.9 / 1.74 |
| 排队·高动量 | 26.5 / 0.97 / −35.8 | 20.8 / 0.81 | 59.1 / 1.74 |
| 排队·最迟过会优先(LIFO) | 26.8 / 0.97 / −36.4 | 21.7 / 0.84 | 55.3 / 1.64 |
没有一个“挑券信号”在 train 和 test 同时赢过 FIFO:行业分散 train 反而更低(25.6 < 32.6)、低β/动量/小盘全期和 train 全面落后、最迟过会优先(LIFO)更是最差档。顺着“怎么选”这条线走,是走不通的。配债池的收益引擎不在选券,在 beta + 事件漂移本身。
三、真正的改进:把「满则跳过」改成「排队等槽」
唯一通过 OOS 纪律的改动
同参数、同成本,只改补位机制
| 全期 CAGR | 全期 Sharpe | 全期 MDD | train | test(OOS) |
| 生产(满则跳过) | 31.5% | 1.08 | −34.9% | 26.7% | 59.2% |
| 排队等槽(FIFO+gate15) | 37.0% | 1.24 | −31.6% | 32.6% | 62.3% |
道理:现在生产是“当天过会、当天满员就永久跳过”——满员那一下,由恰好“今天刚过会”的券承担损失,哪怕它其实是只好券。改成排队后,过会券先进队,FIFO 排队,只要它到自己发行公告窗口之前还有槽位被补上,就不会被“满则跳过”误杀。这是把资金利用率从“随缘撞上”变成“排队先到先得”,捞回了原本被误跳过的正漂移。
代价要如实说:纳入笔数从 287 → 486,换手几乎翻倍(单边 0.2% 成本已含在内,净红利仍为正,说明值得);且排队口径的买入时点会晚于过会公告日(满员时得等),吃到的是漂移的中后段,真实滑点可能比理想下的 0.2% 更高——落地前要单独再验一次滑点与净换手。
四、一个必须写下来的数据纪律教训
回测里“每天在持谁”必须用「当天当时」的快照,不能错用回测跑完后的最终状态。我第一次实现时,算每日组合收益误用了循环结束时的 held 去回溯,导致 2017–2025 全部被判空、只剩最后 108 天,等于把“事后才知道的信息”当成了“当时就知道的”,是典型的前视/状态错位。修成按当天快照 hbd[date] 后数字才可信。这提醒:凡是“选谁/何时持有”的回测,都要逐日锁死状态边界。
五、诚实边界
这不是“排队就多赚 5 个点”的保证。① 换手翻倍,真实滑点/交易摩擦可能吃掉部分红利,需实盘前验证;② 排队口径买入时点后移,持有期变短、节奏更快;③ 收益本质仍是小盘 beta + 事件漂移的顺周期组合,2018/2022/2024 深回撤年份照亏(回撤虽从 −34.9 压到 −31.6,但仍是 β 性的);④ 单边 0.2% 是理想成本;⑤ 长历史基于真实过会日,但窗口只到 2026,不能外推未来发行节奏。
六、结论
- “选哪 10 只”信号没用——行业分散/低β/动量/小盘/最迟过会优先,没有一项通过 train+test 双赢检验;配债池的收益来自 beta+事件漂移,不是选券。
- 真改进 = 换队列机制——把“满则跳过”改成“过会排队、空槽按 FIFO+反追高15 补位”:全期 31.5→37.0%、train 26.7→32.6、test 59.2→62.3、回撤 −34.9→−31.6,四维全赢。
- 排队优先服务“早过会、窗口够长”的券;窗口短、在排到前就到发行公告的,会出队不再入(既不白赚也不白亏)。
- 回测必须逐日锁死“当天当时”持仓状态,否则会制造前视偏差。
- 落地前要单独再验滑点与净换手;记住这里是 β + 事件漂移的顺周期组合,不是中性 alpha。
数据口径:长历史配债池,真实过会日(cninfo 逐家爬取,data/cb_pass_dates.json 944 条)与真实发行公告日(data/cb_ann_dates.json + 实盘 milestone 在途券),正股日线本地 daily 表 2017 起;cap=10 并发,等权,FIFO+反追高闸门 15%(入场前 10 交易日正股涨 >15% 跳过);选券信号含行业分散(申万一级)/β(对中证1000,入场前 60 日回归)/市值(总市值)/动量(入场前 10 日);train 2017–2024,test 2025+ 留作 OOS;每笔 0.2%/边。复现脚本见同目录 backtest.py。收益为小盘 beta + 事件漂移的顺周期组合,非市场中性;历史不代表未来,不构成投资建议。
完成于 2026-08-07