策略
ETH 现货追踪锚定只做多限价网格:逐份 +2% 止盈,并设硬性网格底部止损(根据 FMZ《Python Simple Grid》重述;ETHUSDT.BINANCE_SPOT,1H 成交分辨率,无杠杆)
结局: 已放弃
EthSpotTrailingAnchorLotGrid1H
结局总结
该策略将 FMZ 固定阶梯网格重新表述为 ETH 现货网格,采用时点锚点、2% 几何间距(约为 0.20% 现货往返成本的 10x)、逐份止盈,以及突破时用于限制损失的底部止损。它始终未能通过验证。在 3 次迭代中,Layer-3 沙盒回测反复超过 300 秒限制,测试窗口为 833 天 1 小时。开发者的迭代-3记录显示,每根 K 线的成本已为 O(n_nodes),并将当日超时归因于高负载主机上运行器的 ParquetDataCatalog glob 操作。该次运行被放弃,未产生回测指标,也未进入后续阶段。
假设
本文从第一性原理重述作者的网格策略,并非忠实移植(L167)。FMZ脚本构建FIXED绝对阶梯(BTC 5000-8000,间距$20)。它在市价下方的节点挂限价BUY。买单成交后,在节点上方$50处挂限价SELL;卖单成交后,该节点恢复空闲。策略没有止损,也从不撤单。原方案有三处无法照用。(1)固定的5000-8000区间是事后选定,存在前视偏差。(2)$20/$50的间距(约0.25%/0.7%)低于或接近当前0.20%现货双边交易成本。(3)没有止损时,向下突破会使订单簿无限期持有整套阶梯并承受亏损。重述保留了机制(独立节点仓位、各自止盈、平仓后重新挂单),并修正了这三点。阶梯以锚定时的收盘价为追踪锚点(POINT-IN-TIME)。间距采用几何级数,比例为2.0%,即往返交易成本的10x。硬性底部止损会在跌破时平掉全部仓位。交易场所选择:无杠杆做多适合在BINANCE_SPOT交易(10.8%,目标为>=15%)。现货持仓也没有资金费拖累,而永续合约网格每年约需支付10%。ETH是流动性最高的非BTC现货订单簿(L136),现货回撤底线是约束风险的关键。去掉交易品种和时间周期后,机制可概括为:“在追踪锚点下方按几何步长持有独立、固定规模的限价买单,并在每笔成交价上方一个步长处按各自固定止盈平仓”。这与已放弃的DOGE恒定价值再平衡策略NOT不同。该设计(a)仅在回撤达到>=35%后入场,(b)将单一合并仓位调回固定美元价值,(c)没有底部止损。此处网格始终在市价附近启用,各笔仓位单独平仓,突破时的亏损设有上限。
迭代 3 仅通过性能改动修复了 Layer-3 sandbox_timeout;交易逻辑与 v2 完全相同。每根 K 线的工作量已是 O(n_nodes<=10),没有历史缓冲区、额外数据,订单查询量为 O(1)。同一天其他 O(1) 个策略也超时(LtcMomentumMeanReversionRegression_v3、ConnorsRsi2IndexEtfPullbackUseq_v3);这些运行的性能分析显示,耗时在运行器对约 126k 个 K 线目录执行的 ParquetDataCatalog glob 操作上;主机负载平均值约为 33。每根 K 线的处理仍已精简:预先计算属性名称,避免逐字段生成 f 字符串;只有空闲节点需要重新挂单时才读取账户权益。根据经验教训 L155(c),这里已排除随区间长度增长的逐根 K 线成本,因此若再次超时,原因应在沙盒或目录,而非代码缺陷。
verification_loop:sandbox_timeout:验证失败(Layer 3 — 沙盒回测):冒烟测试在约 20000 根 K 线的窗口(833 天,ETHUSDT.BINANCE_SPOT-1-HOUR-LAST-EXTERNAL)上超过了 300 秒的墙钟时间限制。这几乎总是意味着每根 K 线的工作量会随历史数据增长,例如反复扫描完整的资金费率/补充数据序列,或在每根 K 线调用 calculate_signal()/on_bar() 时重建列表并调用 min()/sorted()。应在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查询,使每根 K 线的成本为 O(log n) 而非 O(n)。
实现
在 1H K 线上运行只做多的 ETH 现货几何限价网格。锚点是锚定时点的收盘价。仅当订单簿为空时锚点才向上追踪;持仓期间不移动。节点 k=1..5 在 anchor*(1-2%)^k 处挂出 GTC 限价买单,每笔规模为权益的 18%。每份成交仓位都有独立的限价 SELL,价格为 fill*(1+2%)。卖单成交后,该节点重新挂单。如果某根 K 线收盘价低于网格底部(最后一个节点再减一个步长),策略会撤销所有订单、市价卖出持仓,并暂停 24 小时后重新锚定。
验证结果
sandbox_timeout:验证失败(Layer 3 — 沙盒回测):冒烟测试在约 20000 根 K 线的窗口(833 天,ETHUSDT.BINANCE_SPOT-1-HOUR-LAST-EXTERNAL)上超过了 300 秒的墙钟时间限制。这几乎总是意味着每根 K 线的工作量会随历史数据增长,例如反复扫描完整的资金费率/补充数据序列,或在每根 K 线调用 calculate_signal()/on_bar() 时重建列表并调用 min()/sorted()。应在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查询,使每根 K 线的成本为 O(log n) 而非 O(n)。
结局总结
精简策略每根 K 线的代码,无法解决很可能由代码之外原因导致的沙盒超时(迭代-3记录将问题归咎于负载过高主机上运行器的目录 glob 操作),因此,在花费迭代次数修改代码之前,应先确认超时由基础设施导致并上报。
经过 3 次迭代后,策略在验证环节被放弃,因为 Layer-3 沙盒回测在约 20,000 根 K 线(833 天)的 ETHUSDT.BINANCE_SPOT 1 小时窗口上超过了 300 秒的墙钟时间限制。之后没有进行回测审查、分析师审查或风险审查。
一种在 BINANCE_SPOT 上交易 ETHUSDT 现货的只做多、无杠杆限价网格(1H 成交分辨率):在时点追踪锚点下方按 2% 几何步长挂出独立、固定规模的限价买单;每份买单在各自的 +1 步止盈处平仓;若发生向下突破,则触发硬性网格底部止损,清空订单簿。它重述了 FMZ《Python Simple Grid》,但不沿用脚本中事后选定的区间、低于手续费的间距和缺失的止损。
没有任何绩效数据:回测报告为空,也没有优化报告,因此策略从未产生收益率、夏普比率或交易次数。
Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。