跳至正文
全部策略

策略

BTC COIN-M US时段动量延续季节性策略,多空双向(单一标的 BTCUSD_PERP.BINANCE_CM,仅1小时K线OHLCV,沿显著早盘US时段冲量方向入场并持有延续走势至时段收盘,3参数)

结局: 已放弃

BtcCmInverseUsSessionMomentumContinuationLS

回测关卡: - 指标不可靠:648 笔交易 / 1409 个数据日的样本量过少(需要 >=5 笔交易,覆盖 >=10 天)——请提高信号频率或拓宽窗口

假设

一个LONG-SHORT、单一标的的日历/季节性策略,标的为币安 COIN-M 反向永续合约 BTCUSD_PERP.BINANCE_CM(BTC保证金,往返吃单手续费约 0.06%,仅OHLCV——单腿操作,因而规避了 L20/L34 中提及的 COIN-M 多腿/资金费率data_unavailable陷阱;BTC CM 永续合约K线拥有完整的目录历史数据)。该优势NOT是均值回归、NOT是区间突破、NOT涉及资金费率、NOT涉及强平、且NOT并非截面性质——而是一种日内TIME-OF-DAY异象:US交易台开盘时形成的方向性冲量往往会在PERSIST贯穿整个US时段。机制如下:每日测算BTC在固定的早盘US时段信号窗口(13:00->15:00 UTC)内的收益率。若|窗口收益率|超过入场阈值(表明这是新鲜、显著的方向性冲量而非噪音),则在15:00 UTCK线收盘时沿SAME方向入场,并持有该延续走势直至时段收盘出场时点(21:00 UTC),每日至多持有一个仓位。刻意选择路由至 COIN-M 出于两个原因:(1)约 0.10% CM 的手续费下限低于 0.15% USD-M 的下限,为这一较小的日内延续优势留出更多覆盖成本的空间;(2)BINANCE_CM 在目录中的占比偏低(3.4% 相对于 >=5% 的目标),且根据 L20 这属于合法的单腿-BTC-OHLCV CM 用途。仅设置 3 个参数(信号窗口长度、入场阈值、ATR止损倍数),以避免重蹈此前 248 个假设因过拟合而失败的覆辙。

重启迭代。反馈说明此前的放弃是流水线层面的问题(Layer-2 staticmethod 绑定错误、QA 在未经优化的冒烟测试上给出绩效判定、回测槽位争用导致超时),因此机制本身刻意未作改动:相同的锁定-13:00-UTC基准、相同的延续方向入场、相同的日历出场、相同的 COIN-M 整数张合约仓位规模计算方式、相同的三个可调参数及其限幅。由于重新提交完全相同哈希的代码会未能通过'未变更哈希'检查,我在代码确实最薄弱之处做了一处实质性改动:保护性 ATR 止损现在改为按K线的LOW/HIGH进行测试,而不再仅依据CLOSE。在1小时K线上,仅按收盘价判定的止损永远不会在某根K线穿破止损位又收回位内时触发,这意味着某个亏损时段可能在触发21:00日历出场之前经历任意大幅度的波动——而止损正是限制这一风险的唯一手段,低估它正是编码规则中所警示的'仅按K线收盘判定止损'的失败模式。该触发是K线内判定的;出场仍通过基础模板的市价出场在K线收盘时执行,因此并未假设任何K线内成交价格。我还为三个受限幅约束的参数声明了 _param_bounds(signal_window_hours [1,5]、entry_threshold [0.002,0.02]、atr_stop_mult [1.0,4.0]),以避免优化器搜索到代码会静默改写的数值——文档说明中原本就承诺了这种映射关系。针对沙盒窗口期(BTCUSD_PERP.BINANCE_CM 1小时K线,最近约 830 天)在目录数据上进行了核查:13:00->15:00 UTC冲量在 726 天中的 296 天超过了 0.6% 阈值,因此入场频率充足,本次运行不会因交易样本不足而受限;冲量绝对值的中位数为 0.46%,明显高于延续走势需要覆盖的约 0.10% CM 往返成本。

在一个可靠的、748 笔交易 / 6.1 年样本上呈现负期望值:avg_trade_return_pct 为 -0.109%(低于零,尚未计入约 0.10% CM 的往返成本),profit_factor 0.84,夏普比率 -0.81,账户被强平至 -100%。该构建忠实实现了假设,且入场流水线运行正常,因此这是一个市场层面的判定:早盘US时段的冲量决定了方向,但实际的日内延续走势在几乎每种波动率状态和几乎每一年中都呈净负值。既然这一优势在计入成本前就已经低于零,优化无法使其转正;三个参数(窗口、阈值、ATR止损)不存在任何能将负延续溢价转为正值的区域。QA 所担忧的边际收益问题在完整历史数据中得到了证实。abandon_class=negative_expectancy。

实现

针对 BTC COIN-M 反向永续合约(BTCUSD_PERP.BINANCE_CM,1小时K线,仅OHLCV)的多空日内一日时段季节性策略。每个UTC日,以截止 13:00 UTC 的K线收盘价锁定为US时段基准;两小时后(截止 15:00 UTC 的K线)测算早盘US时段冲量,计算方式为 收盘价/基准价 - 1。若其绝对值超过 entry_threshold(默认 0.6%),策略即沿SAME方向入场——上涨冲量做多,下跌冲量做空——以捕捉日内延续走势,每UTC日至多入场一次。出场时点为US时段收盘(截止 21:00 UTC 的K线),或以入场价为基准的固定 atr_stop_mult x ATR 止损(现改为按K线最低/最高价进行K线内测试触发),若 21:00 所在K线缺失则采用 max_hold_bars 安全上限。仓位规模按反向合约方式正确计算:risk_pct 的权益除以止损比例得出 USD 名义仓位,上限为权益的 max_gross_frac,通过 contracts_for_notional 换算为 WHOLE $100 整数张合约(而非线性的权益/价格公式)。共三个可调参数:signal_window_hours、entry_threshold、atr_stop_mult。

验证结果

CLEAN RESTART 2026-09-04 —— 本次运行的判定历史和学习记录已被清除,并从验证环节重新开始。此前的放弃源于流水线本身,而非市场:Layer-2 测试框架错误绑定了 @staticmethod 辅助函数(已修复),QA 在未经优化的冒烟测试上给出了终局性绩效判定(已移除——QA 现在仅判定正确性),沙盒超时是由回测槽位争用导致(已修复)。假设和策略代码本身未作改动。请仅就代码本身的优劣进行验证;绩效将由后续的完整回测和优化器决定。

无需修改代码;仅需向分析师标注该指标字段存在不一致之处。

avg_holding_bars 被报告为 0.0,而 avg_holding_period 却为 '5h 13m' —— 这是指标报告方面的小瑕疵,并非代码错误。持仓逻辑本身(在15:00收盘K线入场,在21:00收盘K线出场,或在日内触及ATR止损时出场,持仓周期约为6根K线)是正确的,与 5h13m 的平均值相符。

可选地在 should_enter() 中加入显式的空仓判定以增强防御性;鉴于基础模板已对入场进行了抑制,目前的行为本身已是正确的。

should_enter() 本身并不对是否处于空仓状态进行判定;它依赖基础模板在持仓期间抑制入场。由于入场K线(时间戳小时 14)每UTC日仅出现一次,且持仓一直延续到当日的 21:00 出场,因此每日仅存在一次入场机会,实践中确实满足'每日至多一个仓位'的预期——但这一保证是隐含在基础模板中的,而非此处显式实现的。

未经优化的沙盒结果为负:total_return -22%,夏普比率 -0.55,avg_trade_return_pct -0.139%(低于零,而不仅仅是低于手续费下限),profit_factor 0.79,手续费占 296 笔日内交易毛利润的 19.16%。这正是经典的'日内延续优势无法覆盖往返成本'的特征——0.6% 信号冲量决定了入场时机,但对实际延续走势没有任何预测作用,而此处每笔交易的延续收益在计入约 0.06-0.10% CM 成本及高换手率后已呈净负值。这NOT是代码缺陷(win_rate 0.43、PF 0.79、夏普比率 -0.55 均属于普通数值,并非极性/反向仓位规模计算错误的特征表现)。regime_performance 显示该优势仅出现在'正常'波动率三分位区间(+7.1%,夏普比率 0.54),而在平静/紧张市况下则明显为负。分析师应在完整历史数据上验证是否存在任何参数区域(entry_threshold、signal_window_hours)能使每笔交易的延续收益明显超过 CM 的往返成本;若无,则该时段延续性前提不成立。此项为建议性内容,不构成阻断。

回测评审

夏普
-0.81
总收益率
-100.00%
最大回撤
100.00%
总交易数
748
胜率
42.2%
盈利因子
0.84

忠实实现:交易结果与所假设的多空US时段延续机制相符(748 笔交易,约 373 笔做多 / 375 笔做空,每日一次入场,13:00->15:00 信号窗口正确 / 21:00 出场正确)。

样本可靠且量大,覆盖 6.1 年(50,537 根K线)——该结果具有统计学意义,而非噪音。

入场流水线运行正常(875 次信号 = 875 次提交,未出现规模为零/最低名义值/现金不足被丢弃的情况),因此这是一个市场层面的判定,而非代码缺陷。

负期望值:avg_trade_return_pct -0.109% 为 BELOW ZERO,不仅仅是低于约 0.10% CM 的手续费下限——日内延续走势本身在计入成本之前就已经是净负值。

profit_factor 0.84(<1),win_rate 0.42,期望值 -$42.64/笔,夏普比率 -0.81,索提诺比率 -0.74。

账户已于 2025-05-18 被强平(total_return -100%,max_drawdown 100%)。

在每一种波动率状态下均亏损(平静 -53%、正常 -100%、紧张 -16%),且除 2022 年外的每个日历年份均亏损——不存在任何持续呈现优势的参数区域。

手续费占毛利润的 16.66%,印证了 QA 所指出的经典'边际收益无法覆盖往返成本'的特征;冲量阈值虽然决定了入场时机,但对实际延续走势(净负值)没有任何预测作用。

分析

回测关卡: - 指标不可靠:648 笔交易 / 1409 个数据日的样本量过少(需要 >=5 笔交易,覆盖 >=10 天)——请提高信号频率或拓宽窗口

迭代历史

验证失败(Layer 4 —— QA 审查)[class=premise_falsified]: - US时段动量延续前提被推翻:沿 13:00-15:00 UTC 冲量方向入场并持有至 21:00 收盘的做法净结果为LOSER。profit_factor 0.757(<1),total_return -43.11%,avg_trade_return_pct -0.169%(为负),期望值 -$105,夏普比率 -0.145,阿尔法 -0.107,基于 296 笔测算精确的交易。win_rate 0.432,且收益呈对称分布(avg_win $760 ~= avg_loss $765)——早盘US冲量仅约 43% 的时间呈现延续走势,因此该策略试图捕捉的效应实际上并不存在(甚至略微反转),再计入约 0.10% CM 的往返成本(持仓周期约 6 小时)后即为亏损。2.0 倍杠杆将其放大为 61.7% 的回撤(从 CI 到 90%)。方向实现正确(延续方向按规定实现;不存在极性/时序错误),因此这是一次忠实的实现,但其所依据的季节性前提被数据所推翻。 - 2.0 倍杠杆叠加约 avg_position 的 87%,将本就不存在优势的时段博弈放大为 61.7% 的回撤(从 CI 到 90.2%),且 end_unrealized -11.9%——在负期望值的基础上又增加了额外风险。

Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。