策略
忠实移植 FMZ《Python ML:SVM 预测买入/卖出》(作者 Zero):滚动线性 SVM 3 类下一根 K 线方向分类器,使用原始 [Open, Close],多头/空头/空仓,SpreadVal=2,BTCUSD_PERP。BINANCE_CM 1H
结局: 已放弃
BtcCmLinearSvmNextBarDirection
结局总结
该假设将一个 FMZ 滚动线性-SVM 下一根K线方向分类器移植到 Binance COIN-M BTC 永续合约,周期为 1H,并预先登记了边际接近于零的预测。经过 2 次迭代,回测产生了 1,408 笔交易,平均每笔交易为 -0.129%,PF 0.80,夏普比率为 -0.38;账户因 -100% 回报而被强平,而买入并持有 BTC 上涨了约 3x。分析师在回测审查时、优化之前就放弃了该策略,因为零毛收益优势无法覆盖交易成本。分析师还标记了不合理的 COIN-M 日度 MTM 波动以及相互冲突的强平日期,建议引擎审查,并指出这些问题不会改变收益优势的正负。
假设
第 2 次迭代修复了关键的 QA 仓位规模缺陷,除此之外不做任何改动。信号、标签、求解器和进出场逻辑均未改变。在 BINANCE_CM 上,反向合约的盈亏、手续费和冲击成本以 BTC 结算,因此 get_account_equity()(以 USD 计价的余额)从未变动,每笔交易都按约 $50k 的规模下单,直到账簿被强平。现在,position_size() 使用按市值计价的 USD 权益:稳定币余额加上(当前 BTC 余额减去首根K线捕获的 BTC 余额,捕获时尚未进行任何交易)乘以当前价格。由于策略在确定入场仓位规模时始终为空仓,未实现盈亏为零。名义金额限制为 min(position_frac x MTM x 杠杆, MTM),向下取整至整数 $100 合约,且当 MTM <= 0 时函数返回 0。币本位基准保存在普通标量属性(_coin0、_coin0_set)中,因此重启后仍会保留。预期效果:部署的名义金额会随亏损缩小,avg_position_pct 应显示约为 MTM 权益的 50%,而不是约 97%;1x 账簿也不再可能被强平。接受的单根K线空仓反转机制和 min_bars_required 覆盖项仍按 QA 的接受意见保留。坦诚说明预期与预先登记的一致:成本前盈亏大致持平,约 1,800 次往返交易在约 0.06% RT 成本下,将构成一次有测量依据的 fee_edge 证伪,而非一个可调优的策略。
negative_expectancy:在 BTCUSD_PERP 上忠实移植 FMZ“SVM预测买卖”(Zero)。BINANCE_CM 1H。经过 1,408 笔交易,avg_trade_return_pct 为 -0.129%(COIN-M 下限为 +0.10%),PF 为 0.80,夏普比率为 -0.38。账户已清算(total_return -100%),且该策略在所有波动率状态下均亏损。单笔亏损约等于吃单往返成本加冲击成本,因此成本前盈亏约为零:原始价格水平作为 SVM 特征,对下一根 K 线的方向没有信息。这与该假设对近零边际优势的预测相符。QA 对边际优势的担忧得到印证。优化无法让零毛边际优势超过成本,重新调整 spread_val 或 train_bars 将不再是忠实移植(经验教训 L120/L141)。失败代码:fee_edge(首份实测报告)。另:COIN-M 每日 MTM 序列显示出不合理的波动(连续两日分别为 -70% 和 +224%,而账簿规模为 0.5x),且 liquidation_date 与每日序列不一致。其机制尚未核实;请标记以供引擎审查。这不改变交易账本所示边际优势的正负。
实现
忠实移植自 Zero 的 FMZ《Python ML:SVM 预测买入/卖出》(fmz.com/strategy/21370)。在 BTCUSD_PERP.BINANCE_CM 的每根已收盘 1H K 线上,它都会从头重新训练一个 numpy 线性 SVM,等效于 sklearn LinearSVC 默认设置(平方合页损失,L2,C=1,OvR,截距正则化)。训练行是最近 300 根 K 线的原始 [open, close],根据下一根 K 线的收盘价变化并使用 SpreadVal=2 USD 进行 UP/DOWN/FLAT 标记。模型对刚刚收盘的 K 线进行分类。预测为 UP 时策略做多,预测为 DOWN 时做空,否则空仓;持仓规模为按市值计价的 USD 权益的 50%,以整张 $100 合约计。
验证结果
忠实移植无需修改代码。分析师应将 0.10% + 冲击成本作为成本下限。
成本前提不匹配。该假设以约 0.06% 的往返交易成本论证 BINANCE_CM,但进场和出场使用基础模板的市价单(两侧各按 0.05% 的吃单费率),因此往返成本约为 0.10%,另加模型计入的冲击成本。这不影响正确性。预先登记的 fee_edge 结果只是更快出现。
可选:如果基础模板允许,可在同一根K线上退出后立即提交反向入场。
反转时会空仓一根 K 线。预测与当前持仓方向不同时,should_exit 会平仓。反向入场只能在下一根 K 线上发生,而且只有届时预测仍相同时才会入场。源策略会在每根新 K 线上直接反转。此前 QA 接受了这一处理方式。它会略微降低敞口,并且每次反转都会错过一根 K 线。
确认模拟交易/实盘交易中是否恢复了纯标量策略状态,或根据账户初始币余额重建基线。
_coin0(BTC 基准)在首次调用 calculate_signal 时捕获。文档字符串说明它会在重启后保留。如果实盘重启时未恢复该值,重启前的已实现币本位盈亏就不会计入 MTM 权益。回测不受影响。此外,沙盒中的强平由事后计入的冲击成本导致,策略引擎内的权益计算无法感知该成本。这是测试框架的限制,而非策略错误。
沙盒是一次已完成的 fee_edge 测量,这正是该假设预先登记的内容。3,598 次往返交易,胜率为 48.8%,avg_trade_return_pct -0.102%,手续费占毛收益的 42%。每笔交易的亏损约等于实际往返成本,因此成本前损益大致为零。PF 0.71 源于成本,而不是信号反转,因此 L125 的极性疑虑并不适用。假设称 COIN-M 次往返交易成本约为 0.06%,但代码按 0.05% 的吃单费率发送 MARKET 笔订单,因此实际成本约为 0.10%,另加冲击成本(总计 $44.5k)。liquidated=true / -100% 结果并非由仓位规模导致。avg_position_pct 为 41%,因此迭代-2 MTM 修复有效。交易损益合计约为 -$76k,事后折算的冲击成本 -$44.5k 使权益曲线跌至零以下。策略引擎内的权益无法计入这笔折算成本。资金费率也未建模(funding_events_available=0),而敞口为 81%,因此实际结果会略差。作为 SVM 特征的原始价格水平不含方向信息。应将此视为已证伪(L117 形态:交易次数超过 1,000,成本前 PF 约为 1)。不要重新调整阈值。
回测评审
- 夏普
- -0.38
- 总收益率
- -100.00%
- 最大回撤
- 100.00%
- 总交易数
- 1408
- 胜率
- 53.6%
- 盈利因子
- 0.80
该移植忠实于原策略:分类器采用默认配置的 LinearSVC,并使用原始 [open, close] 特征。标签仅来自已经收盘的K线,因此不存在前视。
样本可靠:从 2020-08 到强平,共有 1,408 笔已平仓交易(2,815 次成交)。这足以精确测量每笔交易的收益优势。
每笔交易回报为负。avg_trade_return_pct 为 -0.129%,低于 COIN-M 的 +0.10% 下限。代码发送吃单市价单,因此真实的往返成本约为 0.10% 加冲击成本。成本前盈亏大致为零,这与 0.536 的胜率及平均盈利 $230 对比平均亏损 $333 相符。
盈利因子为 0.80。夏普比率为 -0.38,其中 CI 为 -4.43 至 1.80,PSR 为 0.41。手续费为 $43.7k,模型估算的冲击成本另为 $47.0k。该策略在三个波动率状态下均亏损(平静期夏普比率 -3.7,正常期 -2.0)。
账户已被强平,total_return 为 -100%。从 2020-09 到 2021-01,每个月的回报都为负,随后账户被清零。
基准比较:从 2020-08 到 2021-02 买入并持有 BTC,上涨约 3x。该策略的贝塔为 -0.99,阿尔法为 -2.28,因此它在强劲趋势中交易,却没有任何可弥补这一点的收益优势。
旁注,不作为判定依据:在 0.5x 账簿上,日度序列出现不合理的反向合约波动(2021-01-24 -70%、2021-01-25 +224%、2020-11-28/29 -20%/+25%)。报告还给出了两个不同的强平日期:日度序列在 2021-02-07 结束,但 liquidation_date 写的是 2021-10-11。这看起来像是 COIN-M MTM 或会计异常。我尚未核实其机制,无论这是否属实,交易账簿都是负值。
迭代历史
结局总结
用作分类器特征的原始价格水平不包含下一根K线方向的信息,因此,以小时级换手建立的移植策略会在 fee_edge 失效,正如预先登记的预测和教训 L167 所述。另有 COIN-M 日度 MTM 波动(在 0.5x 账簿上先为 -70%,随后为 +224%)以及相互冲突的强平日期,应提交引擎审查。
回测审查时,分析师选择放弃(fee_edge / negative_expectancy):毛边际收益约为零,因此每笔交易亏损大致等于吃单往返成本加冲击成本。优化无法解决这一问题,重新调整 spread_val 或 train_bars 将违反忠实移植要求。
这是对 Zero 的 FMZ 策略《SVM 预测买卖》的忠实移植:每小时都用最近 300 根K线的原始 [open, close] 重新训练线性 SVM(以 numpy 重新实现 sklearn LinearSVC 默认配置),预测下一根K线的方向(SpreadVal=2),并以 50% 的权益、1x 杠杆交易 BTCUSD_PERP.BINANCE_CM 1H 多头/空头/空仓。
从 2020-08-11 起,直到账户被强平,1,408 笔交易的平均每笔损益为 -0.129%(COIN-M 下限 +0.10%),利润因子为 0.80,夏普比率为 -0.38(CI -4.43 至 1.80),胜率为 53.6%,总回报为 -100%。手续费为 $43.7k,模型估算的冲击成本另为 $47.0k;策略在平静、正常和高压力波动率环境下均亏损。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。