策略
中国 A 股 T+1 强制持仓洗盘反弹,仅做多组合(CNEQ 上的 30 CSI-300 只超大盘股,DAILY 根 K 线 — 买入在 5 个交易时段内下跌 >= 8% 且触发日未触及涨跌停的标的,等权,固定持有 5 个交易时段,3 个参数)
结局: 已放弃
ChinaAShareT1WashoutBounceBasketCneq
结局总结
该策略将工厂带到了一个尚未涉足的交易场所,即 CNEQ A 股,提出的论点刻意保持简单:买入五个交易时段内跌幅 >= 8% 的 CSI-300 只超大盘股,期间未触及涨跌停,固定持有五个交易时段,等权配置,不设制度过滤或补充数据。优化结果已经存在,且在经济上看似合理——总收益 60.19%,912 笔交易的夏普比率为 0.876,平均单笔收益 0.712%,最大回撤 8.99%,留出集也通过,112 笔交易的夏普比率为 0.932——但稳健性层的结果差得多,滚动前推检验标记出过拟合(IS 1.600 对比 OOS 0.250)、PBO 0.606,且未能通过项目 FDR 筛选。真正结束该运行的是机械原因,而非统计原因:第 4 次迭代中,第 3 层沙盒回测在 2400 天的冒烟测试窗口中超出了 300 秒的墙钟时间限制;此前第 3 次迭代因一条腿的时间戳错误而出现零交易失败。管线在记录任何分析师或风险裁决之前就放弃了它。
假设
一种 LONG-ONLY、多标的、纯 OHLCV 短周期洗盘反弹策略,交易中国 A 股(CNEQ,SSE+SZSE,XSHG 交易时段日历)。这是一次有意转向新交易场所的尝试:在整个 3065 次运行的语料库中,该场所仅有 ZERO 个实验;目录中有 311 只 CSI-300 A 股,涵盖 8.6 年的复权日线 K 线数据(2018-01-02 -> 2026-09-10,2108 个交易时段),而这家工厂从未碰过这些数据;与此同时,所有研究中有 70% 都是在重新挖掘 Binance USD-M。其机制 NOT 于在加密货币上失效的通用排名型横截面反转策略,也 USEQ 于那些策略(它们是在约 0.20% 个 RT 交易场所上构建的美元中性、排名排序、被费用耗尽的双腿策略)。这是一种 ABSOLUTE-THRESHOLD、单腿、事件触发的反弹策略,针对 A 股市场微观结构,并在法定往返交易成本仅约 0.15% 的交易场所运行。PRE-VALIDATED ON THE ACTUAL CATALOG BEFORE PROPOSING:在下方由 30 只成分股构成的超大盘股样本中,若按过去 -5 个交易时段的收益 <= -8% 进行筛选,且触发日未触及涨跌停,则事件发生后 5 个交易时段的平均收益为 +0.934%(中位数 +0.702%,胜率 56.7%),共 n=1796 个事件;相比之下,无条件的前瞻 -5 个交易时段平均收益为 +0.150%,即每个事件超额 +0.78%。该效应随阈值单调变化(-6%:+0.705%,-8%:+0.934%,-10%:+1.124%,-12%:+1.249%),且随持有期 FLAT 变化(3d +0.710%,5d +0.934%,8d +0.896%,10d +0.918%),也就是说,这两个可调参数都不是悬崖式参数。它在 2108 个交易时段中的 704 个触发(33%),每个信号日约有 2.6 只符合条件的标的,因此交易数量达数千笔,而非几十笔;后者曾使每个 ETF 制度轮动的同类策略在结构上都无法验证。策略刻意保持简单:一个触发条件、一个固定持有期、无制度过滤、无指标堆叠、无第二条腿、无补充数据。
verification_loop:sandbox_timeout:验证失败(第 3 层 — 沙盒回测):冒烟测试在约 20000 根 K 线的窗口(CNEQ-1-DAY-LAST-EXTERNAL.600519 的 2400 天)中超出了 300 秒的墙钟时间限制。这几乎总是意味着每根 K 线的工作量会随历史长度增长——例如,重新扫描完整的资金费率/补充数据序列,或在每根 K 线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算已排序的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 K 线的成本为 O(log n) 而非 O(n)。
实现
仅做多 CNEQ(中国 A 股)洗盘反弹篮子,覆盖 30 CSI-300 只大型股,使用 DAILY 周期线。每个交易日计算每个标的过去 5 个交易日的收益;当收益 <= -drop_threshold(默认 10%)且触发日自身 NOT 收于法定日价格涨跌停价位时,该标的符合条件(主板 10%,创业板/20% STAR,保护条件 0.95)。符合条件的标的按 DEEPEST-DROP-FIRST 排名,最多填入 8 个等权仓位,每个仓位为 15% 的 NAV;受可用现金硬性限制,因此总敞口不会超过现金的 1.0x(CASH 交易场所,仅做多,不加杠杆,整股交易)。每个仓位在 hold_sessions 个交易所交易日后无条件平仓(默认 5),按该仓位自身的开仓时间戳对照观测到的交易日历计算持仓时间,因此不可能在 T+1 当日往返交易。没有市场状态过滤、指标组合、止损或补充数据。
验证结果
sandbox_timeout:验证失败(第 3 层 — 沙盒回测):冒烟测试在约 20000 根 K 线的窗口(CNEQ-1-DAY-LAST-EXTERNAL.600519 的 2400 天)中超出了 300 秒的墙钟时间限制。这几乎总是意味着每根 K 线的工作量会随历史长度增长——例如,重新扫描完整的资金费率/补充数据序列,或在每根 K 线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。在 __init__ 中预先计算已排序的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查找结果,使每根 K 线的成本为 O(log n) 而非 O(n)。
分析
修复 SEARCH SPACE,而非逻辑。(1)将 _param_bounds['drop_threshold'] 收窄至 [0.08, 0.14] —— Optuna 选择了 0.0610,正是这个浅层触发器毁掉了前推测试:它使交易数量翻倍(447→912)并将单笔交易的收益减半(1.289%→0.667%),使 2022 从 +1.47%/笔 变为 +0.16%,使 2026 从 +1.26% 变为 +0.00%;预注册的事件研究在深度上单调,因此 sub-8% 那一半是先验的稀释区。(2)从 _param_bounds 中 REMOVE 'position_frac',硬编码为 0.15 —— 仓位调节旋钮除通过噪声外无法改变 Sharpe。(3)REMOVE 'drop_lookback',固定为 5 —— 灵敏度 4/5/6 = 0.861/1.072/0.973,无陡崖,无梯度。这样剩下 drop_threshold(可选 hold_sessions 在 [4,7] 内)作为仅有的自由参数,它会降低 n_trials_effective(39),提升 DSR,并消除 PBO 0.61 背后的退化排序噪声。(4)将篮子从 19 条腿扩展到假设声明的约 30 个 CSI-300 超级大盘股(同一跨度可用的 311 只 A 股),这样 8 槽位就由 DEEPEST 的下跌填满,稀薄的 2023/2025 年份也有样本。(5)保持 max_positions=8,总持仓 ≤1.0x 现金。切勿 NOT 添加任何状态门、指标栈、止损或任何新参数。下一轮的门槛:OOS ≥ 0.5,三个窗口均为非负,is_overfitted=false,PBO ≤ 0.5,样本外仍为正,单笔交易 ≥ 约 1.0%。如果仅限于 ≥8% 深度区域的扫描仍给出 OOS < 0.5,则该优势是特定时期的,下一个判定必须是放弃。详情:workspace/discussions/87a3d165-fb50-437b-ab12-b19384f2ee7c/iteration_1_feedback.md
对 284 个项目候选项进行 q=0.10 的 Benjamini-Hochberg 检验后,保留 4。未能通过此检验的候选项,无法与项目自身的噪声区分开来,无论其单项统计表现看起来多好。
迭代历史
验证失败(第 3 层 — 沙盒回测):未产生交易 使用的 K 线类型:600519.CNEQ-1-DAY-LAST-EXTERNAL,处理的 K 线数:1605 诊断:should_enter() 在 19 根已评估 K 线上返回了 0 次方向 -> 你的 ENTRY CONDITION 从未触发。放宽入场逻辑/阈值。 请确保你的策略能根据给定数据和参数产生交易。
结局总结
一个由 19 条腿构成的多标的日线组合,必须将每根 K 线的成本控制在 O(log n) 左右——预先计算已排序数组,并在 __init__ 中缓存时间戳查找结果——否则无论经济表现多好,第 3 层的 300 秒预算都会将其终止;第 3 次迭代的零交易 K 线时间戳错位和第 4 次迭代的超时都是管线问题,而非优势问题。
该运行在第 4 次迭代的验证循环中被放弃:第 3 层沙盒回测在约 20,000 根 K 线(2400 天)的冒烟测试窗口中超出了 300 秒的墙钟时间限制,表明每根 K 线的工作量会随历史长度增长。因此,它从未进入回测审查,也没有分析师或风险官的裁决(均为空)。
一个仅做多、事件触发的洗盘反弹组合,覆盖 30 CSI-300 只超大盘股(CNEQ,日线 K 线):买入在 5 个交易时段内下跌 >= 8% 且触发日未触及每日涨跌停的标的,等权配置,并在固定持有约 5 个交易时段后退出。
从 2018-01-02 到 2026-09-10 的优化回测产生了 60.19% 的总收益、0.876 的夏普比率、912 笔交易、0.712% 的名义金额平均单笔收益、55.2% 的胜率和 8.99% 的最大回撤;留出集在 112 笔交易上取得 0.932 的夏普比率,通过了留出集门槛。稳健性较弱:滚动前推检验标记出过拟合(IS 平均夏普比率 1.600,对比 OOS 平均 0.250,三个 OOS 窗口中有两个为负),PBO 0.606,去偏夏普比率 0.475;且该候选未通过项目级 BH-FDR 筛选(p=0.5246,保留了 284 个中的 4 个)。
回测评审
- 夏普
- 1.07
- 总收益率
- 101.93%
- 最大回撤
- 9.39%
- 总交易数
- 447
- 胜率
- 58.6%
- 盈利因子
- 1.65
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。