配债等池:下一步该优化什么?
最值得继续试的是给排队标的设置“保鲜期”;最值得先补齐的是公告与股权登记的执行记录。现在还没有足够证据,支持把现有FIFO换掉。
一、先说结论:保留主策略,另开观察版本
这次不是寻找一条最好看的曲线,而是比较每项改动单独起什么作用。样本为2017-09-06至2026-09-30、2195个交易日、978条事件,包括935条已发行、30条终止/失效类和13条仍在途事件。事件是现有缓存整理结果,并不代表全市场历史事件已完整收录。
| 规则 | 年化 | 最大回撤 | 夏普 | 判断 |
|---|---|---|---|---|
| 基准FIFO | 28.95% | -37.17% | 1.12 | 保留主策略 |
| 同日释放槽位 | 29.22% | -37.62% | 1.12 | 收益差异小;以实际可成交性为先 |
| 排队上限60交易日 | 31.94% | -35.63% | 1.20 | 最值得做独立观察版本 |
| 持仓8只 | 31.26% | -38.84% | 1.16 | 分散程度下降,回撤更深 |
| 入队反追高10% | 30.42% | -37.24% | 1.17 | 增益不大,不急于替换15% |
| 持有上限90交易日 | 29.35% | -33.34% | 1.13 | 改善回撤,但近期收益明显落后 |
| 止盈20% | 25.04% | -34.27% | 1.09 | 收益低于基准 |
| 止损-10% | 18.68% | -35.17% | 0.84 | 明显损伤收益 |
| 创业板MA120允许新买 | 22.71% | -24.07% | 1.09 | 偏防守,不是收益增强 |
本表是独立研究口径:公告后首个交易日收盘成交、固定入场槽位、真实现金账、缺行情/疑似封板延期。不是官网现有净值的直接复刻,也不能把这次28.95%与旧版不同口径的高年化混在一起比较。夏普未减无风险收益。
二、最有希望的改动:让队列里的旧标的过期
FIFO只回答“谁先排到”,没有回答“这个标的还值得等多久”。队列很拥挤时,一只股票可能早已过会,却迟迟没有买入。它终于轮到时,后续发行等待风险与价格状态都可能已经变了。给队列设置最长年龄,是对这类陈旧候选的管理假设;目前还不能证明增益一定来自这一机制。
规则很简单:从过会信号对应交易日起计龄,超过60个市场交易日仍在排队,就移出候选池;已经买入的股票不受这条规则影响,仍按原来的发行/终止公告及时间上限退出。它不是“持有60天就卖”。
| 指标 | 基准FIFO | 排队上限60日 |
|---|---|---|
| 年化收益 | 28.95% | 31.94% |
| 最大回撤 | -37.17% | -35.63% |
| 平均入场等待(已平仓样本) | 51.5交易日 | 38.4交易日 |
| 平均实际持仓(已平仓样本) | 44.7交易日 | 44.8交易日 |
| 入场笔数 | 471 | 467 |
| 平均资金使用率 | 92.83% | 91.56% |
它减少的是入场前等待,并没有把持仓变成高频轮动。全样本因队龄出队128条;入场笔数反而少了4笔。当前两个影子组合的10只股票及买入日期完全相同,2026年以来的收益也几乎相同,不能把过去的累计领先当成当下马上能多赚的收益。
55—75日附近的全期年化普遍高于基准,表面上不是只有60这一个点有效;但45—50日反而明显落后,说明不能任意缩短。70日的事后全期年化更高,也不是据此就应该改用70日。
查看相邻参数及年度收益
| 排队上限(交易日) | 全期年化 | 最大回撤 | 2017—22年化 | 2023—24年化 |
|---|---|---|---|---|
| 45 | 24.05% | -40.03% | 11.00% | 28.08% |
| 50 | 24.95% | -32.13% | 12.64% | 29.66% |
| 55 | 31.52% | -33.44% | 17.78% | 45.31% |
| 60 | 31.94% | -35.63% | 20.24% | 38.87% |
| 65 | 31.54% | -36.85% | 17.98% | 44.43% |
| 70 | 33.90% | -33.89% | 21.42% | 44.97% |
| 75 | 33.37% | -36.68% | 19.68% | 48.00% |
| 80 | 30.25% | -35.60% | 18.27% | 37.00% |
| 90 | 30.20% | -37.17% | 18.71% | 35.00% |
| 100 | 30.24% | -37.17% | 19.33% | 33.91% |
| 120 | 29.66% | -37.17% | 18.84% | 32.04% |
| 年份 | 基准收益 | 60日规则收益 | 差值 |
|---|---|---|---|
| 2017 | -7.30% | -7.30% | +0.00个百分点 |
| 2018 | -29.01% | -18.73% | +10.29个百分点 |
| 2019 | 52.62% | 28.47% | -24.14个百分点 |
| 2020 | 90.92% | 104.13% | +13.20个百分点 |
| 2021 | 36.56% | 42.37% | +5.80个百分点 |
| 2022 | -4.43% | -5.32% | -0.89个百分点 |
| 2023 | 53.78% | 57.36% | +3.58个百分点 |
| 2024 | 9.96% | 22.29% | +12.33个百分点 |
| 2025 | 39.44% | 41.77% | +2.33个百分点 |
| 2026 | 69.80% | 69.81% | +0.00个百分点 |
2017仅包含9月6日以后,2026仅包含截至9月30日;年度表是区间累计收益,不把不完整年份年化。2019年60日规则比基准落后约24个百分点,这个反例不能忽略。
三、更大的风险:退出时点,以及跨登记日后的收益归属
仅把买入再晚一个交易日,结果变化很小;仅把卖出再晚一个交易日,正股组合收益却明显下降。买卖两端分开测后,差异主要出在卖出端。
| 执行口径 | 年化 | 最大回撤 | 夏普 |
|---|---|---|---|
| 买卖均按日期当日(偏乐观参照) | 30.11% | -37.27% | 1.16 |
| 买卖均日期后首个交易日(研究基准) | 28.95% | -37.17% | 1.12 |
| 只把买入再推迟1个交易日 | 28.81% | -37.17% | 1.12 |
| 只把卖出再推迟1个交易日 | 13.84% | -37.81% | 0.63 |
| 买卖均再推迟1个交易日 | 13.94% | -37.12% | 0.64 |
为避免把队列连锁换仓效应误认成纯粹的卖出效应,还匹配了相同事件、相同买入日、不同卖出日的交易:共50对,延迟期间正股收益均值为-2.74%、中位数-3.08%,其中78.00%为负。这仍然只是条件样本描述,不是可直接投资的独立组合。
当前发行信息缓存中,可将公告日与登记日精确匹配到本次基准交易的有37条,其中37条基准在登记日卖出,14条同入场的延迟版本跨过登记日。覆盖只是局部,不能外推全历史比例。
数据供应商把发行公告日、老股东配售股权登记日、配售日分别定义为不同字段。日历日期也不能代替真实的盘前/盘后发布时间。来源:Tushare可转债发行字段说明。
可落地的启发:把“公告原文与发布时间 → 首次发现时间 → 最早可执行交易时段 → 实际成交 → 是否跨登记日”存成可审计记录。优先保障退出信号不漏报,而不是据这张表鼓励猜公告、抢先交易或保证在某个价格卖掉。
发行公告前后:现有已发行样本的等权日收益
| 事件相对日 | 样本数 | 平均日收益 | 中位数 | 负收益比例 |
|---|---|---|---|---|
| -1 | 935 | 0.47% | 0.22% | 43.21% |
| 0 | 935 | 1.60% | 1.34% | 29.73% |
| 1 | 935 | 0.10% | -0.05% | 50.48% |
| 2 | 935 | -2.17% | -2.05% | 76.15% |
| 3 | 935 | -0.24% | -0.32% | 54.97% |
| 4 | 933 | -0.01% | -0.13% | 52.41% |
| 5 | 931 | 0.03% | -0.08% | 50.81% |
+1为严格晚于发行公告日期的首个市场交易日;0为它前一个交易日,未必就是公告当天。各日有行情才纳入,样本数会不同。未扣费,未做市场/行业调整,未计配售权;不是异常收益检验,更不是另一个新策略。
四、为什么还不能说“找到了更优策略”
1. 统计区间跨过零,多参数搜索也没有通过
对60日规则相对FIFO的日对数收益差,做配对20日循环区块自助抽样(1500次),年化对数超额点估计为2.39%,95%区间为[-2.35%,6.99%]。这是对数超额,不是两条CAGR相减的置信区间;区间包含零,不能声称增益已被证实。
对首轮30个非基准版本,再做中心化区块最大统计量检验(1000次),60日规则对应的探索性多重比较p值约0.963,也未能排除“多试几个刚好挑中”的解释。这不是对后来所有相邻参数和组合搜索的完整校正,所以结论只能更保守,不能反过来宣布有优势。
2. 换一个合理设置,领先会消失
| 压力条件 | 基准年化 | 60日规则年化 | 年化差值 |
|---|---|---|---|
| 单边费用0.4%(翻倍) | 26.41% | 29.39% | +2.98个百分点 |
| 买卖均再延迟一天 | 13.94% | 18.87% | +4.92个百分点 |
| 当日卖出当日补位 | 29.22% | 32.44% | +3.21个百分点 |
| 8个槽位 | 31.26% | 33.24% | +1.98个百分点 |
| 12个槽位 | 28.51% | 27.18% | -1.33个百分点 |
| 入队反追高阈值10% | 30.42% | 32.16% | +1.74个百分点 |
| 过会后总时间上限270自然日 | 33.36% | 32.46% | -0.90个百分点 |
| 过会后总时间上限450自然日 | 28.07% | 29.80% | +1.73个百分点 |
| 剔除11只日期来源冲突股票 | 27.43% | 30.82% | +3.39个百分点 |
| 剔除两版本各自前5大赢家的并集 | 20.11% | 22.45% | +2.35个百分点 |
费用翻倍、剔除日期冲突样本后仍领先,这是支持证据;但改成12槽位、或把过会后的总体时间上限改成270日后落后,这是反证。剔除大赢家是事后稳健性检查,不是当时能够执行的规则;费用翻倍也不能替代容量与盘口冲击模型。
3. 真正的时间分段选择,并没有选出“稳赢版本”
首轮规则确定后,仅用2017—2022段挑选:要求开发段回撤不差于基准、年化最多低2个百分点,再取夏普最高者。被选中的是创业板MA120允许新买,不是60日排队上限。
| 规则 | 年化 | 最大回撤 | 夏普 | 2017—22年化 | 2023—24年化 | 2025至今年化 |
|---|---|---|---|---|---|---|
| 基准FIFO | 28.95% | -37.17% | 1.12 | 18.84% | 30.16% | 64.05% |
| 创业板MA120允许新买 | 22.71% | -24.07% | 1.09 | 20.06% | 9.58% | 49.59% |
| 排队上限60交易日 | 31.94% | -35.63% | 1.20 | 20.24% | 38.87% | 65.62% |
MA120规则在2023—2024段的年化仅9.58%,低于基准30.16%。它可以被解释为降低风险敞口的防守版本,但没有证明收益增强。60日版本在三段都好看,是看过首轮结果后关注到的候选;后续复核不能把它重新包装成未见过历史的独立验证。2023年后数据在过去研究中也已被研究者看过。
4. 从不同年份重新开始:近期没有新增领先
| 从该年空仓启动 | 基准年化 | 60日规则年化 | 差值 |
|---|---|---|---|
| 2018 | 29.86% | 31.58% | +1.72个百分点 |
| 2019 | 38.52% | 42.00% | +3.49个百分点 |
| 2020 | 39.02% | 42.75% | +3.73个百分点 |
| 2021 | 33.17% | 36.62% | +3.45个百分点 |
| 2022 | 31.99% | 36.12% | +4.14个百分点 |
| 2023 | 45.82% | 49.48% | +3.66个百分点 |
| 2024 | 59.77% | 59.77% | +0.00个百分点 |
| 2025 | 58.69% | 58.69% | +0.00个百分点 |
冷启动只接纳启动后新出现的过会事件,不预填历史队列。2024、2025重新启动时两版本结果相同,提示历史领先主要依赖更早的队列路径。以上区间彼此重叠,不能当作8次独立成功验证。
五、怎么计算:先把现金账和信息时点分清
研究只使用已有本地数据;SQLite只读。原版生成器没有被导入执行,网站持仓、交易提醒和策略参数没有被本次研究改写。
入队、买入、退出
- 事件按过会信号日排序,同日按股票代码稳定排序。过会信号对应前收盘的10交易日涨幅不超过15%才入队;不是事后挑发行成功最快者。
- 研究基准至少等信号对应交易日之后一个市场交易日,才允许收盘买入。遇到没有行情或日线涨停代理条件,等待后续可成交日。同一正股不得重复占槽。
- 发行/终止日期之后首个市场交易日收盘退出;无可执行报价则顺延。未退出事件采用过会后365个自然日的策略时间上限,它不是法定批文失效日。
- 基准先尝试原有空槽买入,再处理当天卖出,因此当天释放的槽位下一交易日使用;同日补位实验单独改变这个顺序。日线收盘撮合只是一种模拟,实盘资金与订单执行要另验。
- 止盈止损、补位涨幅、市况均线只看前一收盘;新增仓位不领取买入当天的涨幅。期末在途仓位正常估值,不人为清仓。
资金与队龄公式
V⁻为当日交易前、存量仓位已按收盘价估值的总权益;C⁻为可用现金;K=10;A为本次投入金额;H为扣除买入成本后的持仓价值;c=0.2%为单边费用。存量仓位不每天重新等权,空槽留现金、现金不计息、不加杠杆。股价变化后单股实际权重可以偏离10%。
t与s为市场交易日序号,s是过会信号对应日;L=60是候选规则。股票停牌不会暂停市场交易日计数。上述是排队年龄,和买入后的实际持仓天数是两个变量。
尚未消除的偏差
- 事件池偏差:主要历史列表来自最终发行样本,另补30条终止/失效事件;未证明失败及长期搁置样本完全覆盖,绝对收益可能偏高。当前里程碑不是完整逐日不可变快照。
- 日期质量:11只股票在不同来源间存在结束日期冲突;主研究保持现有来源优先级,并做整只剔除检查。没有逐条验证全部公告的秒级发布时间。非交易日/停牌日的过会信号映射也可能额外延迟,不能称为精确可执行时点还原。
- 成交近似:主板约9.5%、创业板/科创板约19.5%及一字板条件是保守的日线不可成交代理,未完整还原历史ST、价格笼子、买卖盘口、成交量容量;按收盘价成交并非承诺。
- 收益范围:按已有pct_chg累计正股价格收益,保留超过21%的两条日收益,不人为截断;未建完整分红总回报账,也未计配售认购、转债上市利润或认购资金机会成本。
- 统计范围:本轮比较相对FIFO,不宣称相对风险因子的alpha;区块自助法依赖近似平稳性,不能保证跨制度、市场状态外推。
- 历史强弱:样本经历过不同注册/审核制度。窗口分段、费用压力测试和删除样本都不能替代真实向前跟踪。
本轮主研究串行运行,固定1个BLAS线程,记录的峰值内存约152 MiB;未开启多Agent并行回测。合成测试覆盖入场日收益归属、现金/成本、同日补位、缺行情顺延、信号滞后、买卖独立时钟、期末不假卖出及未来收益不改写历史前缀。
六、下一步落地顺序
| 优先级 | 工作 | 验收标准 |
|---|---|---|
| 1 | 公告—登记日—可执行时段审计 | 先补齐日期冲突、来源链接和首次发现时间;区分不配债与实际认购 |
| 2 | 独立跟踪FIFO与60日队龄规则 | 参数冻结,不动主策略;记录不同候选、不同交易和不成交原因 |
| 3 | 完整失败/撤回/长期搁置样本 | 按当时信息入池;验证历史收益不依赖事后成功名单 |
| 4 | 有需要再做防守版 | 将降低回撤单独设目标,明确接受较低收益,不伪称全面增强 |
观察版本不能只比较净值数字。应先看它是否真的产生不同决策、每次差异发生在什么队列状态、执行成本能否解释收益差,再逐步积累向前样本。若未来数月两版本仍是同一批持仓,不能把“净值都上涨”算成新规则获验证。
暂不建议:为了提高回测数字同时改槽位、队龄、止盈、择时等多个参数;把70日等事后最优点直接上线;把正股退出测试当成完整配债交易总收益。
下载仓库复现入口 backtest.py(需要仓库代码及已有行情缓存,不会切换线上策略)
附录:完整结果与复现
展开首轮31个版本(含失败版本,不只展示赢家)
| 规则 | 年化 | 最大回撤 | 夏普 | 2017—22年化 | 2023—24年化 | 2025至今年化 |
|---|---|---|---|---|---|---|
| 基准FIFO | 28.95% | -37.17% | 1.12 | 18.84% | 30.16% | 64.05% |
| 同日释放槽位 | 29.22% | -37.62% | 1.12 | 18.79% | 32.02% | 63.42% |
| 持仓5只 | 27.96% | -42.92% | 0.99 | 9.93% | 33.83% | 93.72% |
| 持仓8只 | 31.26% | -38.84% | 1.16 | 18.32% | 36.75% | 72.34% |
| 持仓12只 | 28.51% | -34.95% | 1.13 | 18.28% | 32.78% | 59.81% |
| 持仓15只 | 25.01% | -34.08% | 1.04 | 17.95% | 28.02% | 45.58% |
| 入队反追高5% | 26.38% | -38.11% | 1.08 | 16.82% | 22.77% | 66.47% |
| 入队反追高10% | 30.42% | -37.24% | 1.17 | 19.73% | 32.55% | 66.66% |
| 入队反追高20% | 28.14% | -37.11% | 1.09 | 17.57% | 29.38% | 65.24% |
| 取消入队反追高 | 29.21% | -37.19% | 1.11 | 18.86% | 29.29% | 67.01% |
| 排队上限20交易日 | 21.62% | -38.78% | 0.90 | 7.42% | 31.82% | 62.29% |
| 排队上限40交易日 | 22.81% | -37.28% | 0.94 | 15.19% | 12.05% | 66.16% |
| 排队上限60交易日 | 31.94% | -35.63% | 1.20 | 20.24% | 38.87% | 65.62% |
| 排队上限120交易日 | 29.66% | -37.17% | 1.14 | 18.84% | 32.04% | 66.05% |
| 持有上限20交易日 | 9.05% | -37.75% | 0.53 | 10.02% | 10.95% | 4.15% |
| 持有上限40交易日 | 18.88% | -36.42% | 0.83 | 16.27% | 13.54% | 34.29% |
| 持有上限60交易日 | 25.24% | -34.27% | 1.02 | 17.36% | 31.80% | 44.34% |
| 持有上限90交易日 | 29.35% | -33.34% | 1.13 | 20.73% | 40.33% | 45.77% |
| 补位涨幅上限10% | 27.00% | -36.16% | 1.07 | 15.63% | 32.25% | 61.76% |
| 补位涨幅上限20% | 26.95% | -36.93% | 1.06 | 16.01% | 29.17% | 64.18% |
| 补位涨幅上限30% | 26.30% | -37.33% | 1.05 | 16.36% | 23.98% | 66.06% |
| 止盈20% | 25.04% | -34.27% | 1.09 | 20.88% | 25.42% | 38.44% |
| 止盈30% | 26.75% | -33.76% | 1.12 | 22.31% | 25.13% | 43.77% |
| 止盈50% | 27.45% | -35.77% | 1.12 | 22.27% | 24.19% | 49.33% |
| 止损-10% | 18.68% | -35.17% | 0.84 | 11.87% | 14.96% | 47.70% |
| 止损-15% | 26.88% | -37.78% | 1.04 | 17.35% | 32.08% | 54.11% |
| 创业板MA60允许新买 | 23.99% | -26.94% | 1.13 | 18.21% | 23.77% | 44.04% |
| 创业板MA120允许新买 | 22.71% | -24.07% | 1.09 | 20.06% | 9.58% | 49.59% |
| 创业板MA200允许新买 | 21.99% | -24.16% | 1.11 | 18.00% | 5.94% | 58.96% |
| 个股波动预算25% | 19.02% | -35.71% | 1.05 | 13.01% | 20.72% | 37.42% |
| 个股波动预算35% | 23.10% | -36.83% | 1.07 | 15.58% | 23.73% | 48.66% |
源文件哈希及事件日期冲突
{
"end": "20260930",
"events": 978,
"kinds": {
"issued": 935,
"lapsed": 30,
"open": 13
},
"diagnostics": {
"large_return_observations_retained": 2
},
"source_conflicts": [
[
"000630.SZ",
"20230629",
"20230907",
"20231025"
],
[
"002307.SZ",
"20200423",
"20200804",
"20210619"
],
[
"002413.SZ",
"20191011",
"20200318",
"20200527"
],
[
"002556.SZ",
"20191205",
"20200415",
"20200423"
],
[
"002579.SZ",
"20190920",
"20200122",
"20200224"
],
[
"300462.SZ",
"20190726",
"20191226",
"20200721"
],
[
"300629.SZ",
"20190712",
"20191204",
"20200605"
],
[
"300667.SZ",
"20191101",
"20200110",
"20200508"
],
[
"600075.SH",
"20200116",
"20200515",
"20201231"
],
[
"603977.SH",
"20191101",
"20200304",
"20200903"
],
[
"605090.SH",
"20221027",
"20221231",
"20230315"
]
],
"hashes": {
"data/cb_pass_dates.json": "2df411722726cff80d49f07849b4e5b5fb5e34046c27c612ddf571c083e94834",
"data/cb_ann_dates.json": "27e65d821068a2fdad94ae52343dff6111192d206821659a8c40b6cfe481d4df",
"data/cb_lapsed_plans.json": "485c80d1c3b0c5001ee495bd537b6f1669ea5ac5e39bcf4bf5eb91945f31ff0c",
"my-app/app/lib/milestones.ts": "801670c0ce20413b654b8478688b8207a2d350d706f27a83b976735455aa4b80",
"my-app/app/lib/cb_auto.json": "5078672df1ef35da242f0ee62b84ba6e1a28db1f1a03800657976ecc1cc23a86"
}
}首轮结果JSON · 稳健性JSON · 退出时点核验JSON · 31版本日收益CSV · 基准及开发段选中版本交易JSON
OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 python3 research/cb_queue_optimization_study.py OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 python3 research/cb_queue_exit_audit.py OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 python3 research/cb_queue_optimization_report.py OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 python3 -m unittest discover -s research -p test_cb_queue_optimization.py -v
按顺序执行;仅在research/cb_queue_optimization_20261003写入结果。需要仓库中现有行情与事件缓存。本报告不是自动上线指令。年度影子版本选择也保存在JSON,但未计跨版本切换成本,不将其拼接成可投资策略净值。