Strategies
FMZ 'High-Frequency Harvester No.1' (Zero, fmz.com/strategy/6237) port: four-layer long-inventory passive quote ladder on BTCUSDT.BINANCE 1m, with book-depth pricing replaced by fixed relative offsets
Outcome: Verifying
FmzHighFrequencyHarvesterLadderBtc1m
FMZ 'High-Frequency Harvester No.1' (Zero, fmz.com/strategy/6237) port: four-layer long-inventory passive quote ladder on BTCUSDT.BINANCE 1m, with book-depth pricing replaced by fixed relative offsets
Hypothesis
Implementation
Stratmill translation of FMZ 6237 'High-Frequency Harvester No.1' (Zero): a 4-layer long-inventory passive ladder on BTCUSDT.BINANCE 1m. Each layer rests a post-only GTC buy at close*(1-b_i) and, once inventory exists, a reduce-only post-only sell at close*(1+s_i) (b=[7.5,12.5,22.5,40] bp, s=[5,9,12.5,20] bp). Layer i is re-quoted on minute indices divisible by Sleep_i=[1,2,3,5] when its target moves more than ResetDiff_i=[0.5,1.5,1.5,2] bp. Layer sizes are weights [0.6,1.5,1.8,1.9] scaled so the whole ladder equals half of equity in BTC. The strategy never shorts and has no stop, take-profit or trend logic.
Iteration 3: the Layer-1 'invalid decimal literal at line 1' came from the previous output putting a placeholder path string in `code` instead of the Python source. The strategy source is unchanged from iteration 2 (the performance fix: in-place modify_order re-quotes, O(layers) per bar) apart from a docstring note, and is now submitted inline. Port deviations, all forced by missing data: there is no historical L2 book, so the depth walk is replaced by fixed bp offsets (the CNY offsets at 2,000 CNY/BTC); the 3 s loop is the 1m bar; the loop counter is the calendar minute index so re-quotes survive restarts; the random jitter and DicStep are dropped; quotes are post-only makers on a USD-M perp at 1x with no shorting. Honest prior: this mechanism family has been abandoned before for no_edge, and bar-resolution fills are optimistic about queue position. Adverse selection is expected to dominate.
Verification Results
Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['sleep_bars', 'min_order_qty', 'amount_weights', 'buy_offset_bps', 'reset_diff_bps', 'cash_buffer_bps', 'sell_offset_bps', 'ladder_equity_frac'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: AttributeError: '_MockCache' object has no attribute 'orders_open_count' (bar timestamp: 1735689660000) - steady_downtrend: AttributeError: '_MockCache' object has no attribute 'orders_open_count' (bar timestamp: 1735689660000) - flat_ranging: AttributeError: '_MockCache' object has no attribute 'orders_open_count' (bar timestamp: 1735689660000) - volatility_spike: AttributeError: '_MockCache' object has no attribute 'orders_open_count' (bar timestamp: 1735689660000) - zero_volume: AttributeError: '_MockCache' object has no attribute 'orders_open_count' (bar timestamp: 1735689660000) - price_gap: AttributeError: '_MockCache' object has no attribute 'orders_open_count' (bar timestamp: 1735689660000)
Iteration History
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (30 days of BTCUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Verification failed (Layer 1 — static analysis): - Syntax error: invalid decimal literal (<unknown>, line 1) (line 1)
Analysis
高频收割机一号
Backtest and paper results are hypothetical. Trading involves risk of loss.