BtcMakerGridLiquidityProvision
Hypotheses
BTC Range-Grid Liquidity Provision, Maker-Only (Single-Instrument BINANCE USD-M Perp, 15m Bars, Harvest Oscillation via Laddered Passive LIMIT Orders Around a Rolling Mid — Grid Spacing ≫ Maker Round-Trip, Trend-Paused + Inventory-Capped, Attacks the Taker-Fee Death of Mean-Reversion, 4-Parameter)
Hypotheses
A market-making / liquidity-provision GRID on BTCUSDT.BINANCE (USD-M perp, 15m bars) that harvests range oscillation exclusively through PASSIVE MAKER limit orders — a deliberate structural attack on the exact failure that killed every taker mean-reversion this session. Those all died the same way: a real but tiny oscillation edge (−0.05% to −0.2%/trade) eaten by the ~0.10% taker round-trip. Maker execution on Binance USD-M costs ~0.02%/side (~0.04% round-trip), a ~0.06% saving per cycle that can flip marginal-negative oscillation capture to positive — a lever never actually measured (the one maker attempt died on a 300s PERF TIMEOUT, not on edge). Mechanism: maintain a rolling mid (EMA) and place a ladder of resting LIMIT orders — buy limits below mid, sell limits above — spaced by grid_step (default ~0.35%, set WELL above the ~0.04% maker round-trip so each filled buy→sell cycle clears fees with a buffer), spanning ±N levels (default 4). As price oscillates, buy fills accumulate long inventory that is sold into the next up-level and vice versa, capturing grid_step minus maker fees per completed cycle. It is emphatically NOT the dead families: NOT taker mean-reversion (maker-only, and the fee math is inverted), NOT a factor rotation (my three pending rotations occupy that space — this is a different strategy TYPE), NOT trend-following, NOT options/carry/liquidation, NOT single-name signal-fade (no directional forecast — it is symmetric liquidity provision). It is designed against the two known grid killers: (1) TRENDING markets — a trend filter (steep EMA slope or price breaking the grid envelope) PAUSES new orders on the losing side and flattens inventory via a hard stop, preventing the accumulate-against-a-trend blowup; (2) the PERF TIMEOUT — grid levels are precomputed once per rebalance and fills are checked O(1) per bar against bar high/low, never rescanning history. Fills two portfolio gaps: no liquidity-provision strategy exists, and short-horizon is under-represented (6.8%). 4 parameters (grid_step, n_levels, EMA/mid lookback, trend-pause threshold).
Hypotheses
Implements the hypothesis directly: (1) MAKER-ONLY — all grid orders use order_factory.limit(post_only=True), which the exchange rejects rather than lets cross, guaranteeing maker (~0.02%/side ≈ 0.04% round-trip). grid_step 0.35% >> 0.04%, so each buy->sell cycle nets positive after fees, inverting the taker-fee arithmetic that killed the session's taker mean-reversions. (2) LADDER around a ROLLING MID — EMA(mid_lookback) is the mid; n_levels post-only buys below and sells above, spaced grid_step. Fills spawn opposite TP limits (buy fill -> sell one step up; sell fill -> buy one step down), the classic self-sustaining grid that harvests oscillation. (3) TREND-PAUSED — EMA-slope trend filter and grid-envelope break flatten inventory and stop quoting during trends, defending the accumulate-against-a-trend blowup. (4) INVENTORY-CAPPED — hard net-exposure cap (inv_cap_mult*n_levels*level_qty) plus the naturally bounded ±n_levels ladder keep exposure bounded; teardown market-closes if breached. (5) NO PERF TIMEOUT — levels computed once per regime transition and refilled in on_order_filled; each bar is O(1). Exactly 4 tunable core parameters (grid_step, n_levels, mid_lookback, trend_threshold). Venue: futures BINANCE (MARGIN) is required because the edge is maker-fee-based and the grid is symmetric long+short liquidity provision — spot's 0.10% maker and long-only nature would eliminate the edge. Leverage held at 1.0 deliberately: grids accumulate against moves, so leverage is the wrong risk (per the grid archetype's explicit warning), and sizing references config.leverage so it stays consistent if ever raised. Fills two portfolio gaps (no liquidity-provision strategy; short-horizon under-represented) and produces frequent trades on 15m BTC (0.35% oscillations are constant), avoiding the no_trades/verification_loop failures. Verified: Layer 1 static PASSED, all 6 Layer 2 synthetic scenarios PASSED with a continuous non-frozen signal.
Hypotheses
Total account liquidation on 2022-03-06: total_return -100%, max_drawdown 100% (CI high 100.07%), and all returns from March 2022 onward are exactly 0.0 — the strategy blew up 2 years into the window and never recovered. The failure is the exact structural grid killer the hypothesis claimed to defend against: unbounded long-inventory accumulation against the sustained 2022 downtrend (Feb 2022 = -107%), which the EMA-slope trend-pause and inventory cap demonstrably failed to contain. Supporting metrics confirm a broken, negative-edge strategy: profit_factor 0.646, Sharpe -0.95 (CI [-3.32, -0.83] entirely negative), Sortino -0.89, information_ratio -2.45, PSR 0.0, return_skew -45.7 / kurtosis 2179 (catastrophic left tail), and avg_trade_return_pct 0.14% is below the 0.15% futures fee floor even pre-blowup. Optimizing grid_step/n_levels/mid_lookback/trend_threshold cannot rescue a strategy that liquidates the account — parameter tuning would only shift the blowup date, not remove the accumulate-against-a-trend risk that is intrinsic to a levered inventory grid. Fundamentally broken; not worth 2 hours of optimization.
Implementation
Maker-only range grid / liquidity-provision strategy on BTCUSDT.BINANCE USD-M perp (15m bars). Maintains a rolling EMA mid and posts a ladder of PASSIVE post-only LIMIT orders: n_levels buy limits below mid and n_levels sell limits above, spaced by grid_step (0.35%). Buys accumulate long inventory below mid, sells accumulate short inventory above; every fill immediately posts an opposite take-profit limit one grid_step away, so each completed buy->sell (or sell->buy) cycle captures grid_step minus the ~0.04% maker round-trip. Because grid_step (0.35%) is set well above the maker round-trip, each harvested oscillation clears fees with a buffer — the structural point of using maker execution (0.02%/side) instead of taker (0.05%/side) that killed prior mean-reversion attempts. Risk controls: an EMA-slope trend filter (|slope| over slope_window > trend_threshold) and a price-envelope break (price moves > envelope_mult*n_levels*grid_step from the grid anchor) both trigger a full teardown — cancel all resting orders and market-flatten inventory — then pause new liquidity until the market ranges again; an independent inventory cap flattens if net exposure exceeds inv_cap_mult*n_levels*level_qty. The ladder is rebuilt only on regime transitions and refilled event-driven in on_order_filled, so per-bar work is O(1) (no history rescans → no PERF timeout).
Verification Results
Analyst should ABANDON at BACKTEST_REVIEW — the maker-fee lever is directly tested and does not rescue grid oscillation capture.
Verification Results
Core-thesis falsification (analyst call, not a code defect): the hypothesis's central bet is that maker execution (~0.04% round-trip) flips oscillation capture positive. The sandbox — with maker fills and maker fees — refutes it: total_return -37.3%, Sharpe -1.51 (CI [-3.28, +0.19]), profit_factor 0.68, max_drawdown 38.3% over 1536 trades. Classic grid trend-blowup signature: win_rate 78% but avg_loss $347 is ~5.4x avg_win $64, kurtosis 54.96, tail_ratio 0.42. The maker edge IS harvested per cycle, but trend-accumulation teardowns overwhelm it; trend_threshold=0.012 is too loose on 15m BTC.
Verification Results
Treat the sandbox as an optimistic upper bound; real execution underperforms it, reinforcing abandonment.
Verification Results
Backtest maker-fill realism is optimistic and the whole thesis rests on it: bar-based fills assume a resting post_only limit fills in full on any high/low touch with zero queue position and zero adverse selection. Real maker fills suffer adverse selection and queue competition, so live would be worse than the already -37% sandbox.
Verification Results
Weight dollar expectancy / profit_factor (0.68) over avg_trade_return_pct for this grid.
Verification Results
Misleading per-trade metric: avg_trade_return_pct = 0.155% marginally clears the 0.15% floor, yet avg_trade_pnl_usd is -$24 and total_return -37.3%. The per-notional average is dominated by many small positive cycles while dollar losses concentrate in larger accumulated-inventory teardowns, so the >0.15% reading is an artifact, not a passing viability signal.
Backtest Review
Genuinely novel strategy type (maker-only liquidity provision) not present in the deployed portfolio
Backtest Review
Maker-fee inversion thesis (~0.04% round-trip vs ~0.10% taker) is economically reasonable in isolation
Backtest Review
Perf-timeout defense (O(1) event-driven fills) worked — the run completed without the 300s timeout that killed the prior maker attempt
Backtest Review
ACCOUNT LIQUIDATED on 2022-03-06 — total_return -100%, max_drawdown 100%; the strategy died and produced zero returns for the final ~4 years of the window
Backtest Review
The core grid killer (accumulate-against-a-trend) was realized in the 2022 bear despite the trend-pause + inventory-cap defenses — Feb 2022 was -107%
Backtest Review
profit_factor 0.646, Sharpe -0.95 (CI [-3.32, -0.83] fully negative), Sortino -0.89, information_ratio -2.45, PSR 0.0
Backtest Review
Catastrophic fat left tail: return_skew -45.7, kurtosis 2179, largest_loss -$1,416 vs avg_win $22
Backtest Review
avg_trade_return_pct 0.14% is below the 0.15% futures fee floor even before the blowup
Outcome Summary
This strategy was a genuinely novel type for the portfolio — maker-only liquidity provision — engineered to beat the taker-fee death that killed every mean-reversion this session by capturing grid oscillation through passive post-only limits at spacing well above the ~0.04% maker round-trip, and it successfully avoided the 300s perf-timeout that killed the prior maker attempt. It won 78% of its 13,295 trades, but that was the trap: the wins were tiny (avg $22) and the losses were fat-tailed, and in the sustained 2022 downtrend it accumulated long inventory against the move until the account fully liquidated on 2022-03-06 (-100%, Feb 2022 -107%). The trend-pause and inventory-cap defenses it was built around demonstrably failed to contain the exact grid killer the hypothesis named. The analyst abandoned it at review on its first iteration, since no tuning of grid_step/n_levels/mid_lookback/trend_threshold can rescue a strategy that blows up the account — it would only move the blowup date.
Outcome Summary
The maker-fee inversion did solve the fee-death problem (the perf-timeout defense also worked), but a levered inventory grid's fatal risk is accumulating against a sustained trend — an EMA-slope trend-pause and inventory cap are not sufficient to contain it, so the high win rate masks a catastrophic left tail that liquidates the account.
Outcome Summary
It was abandoned at the pre-optimization backtest-review gate for total account liquidation: the exact grid killer it claimed to defend against was realized — unbounded long-inventory accumulation against the sustained 2022 downtrend (Feb 2022 -107%) that the EMA-slope trend-pause and inventory cap demonstrably failed to contain — and parameter tuning could only shift the blowup date, not remove the intrinsic accumulate-against-a-trend risk.
Outcome Summary
A maker-only range-grid liquidity-provision strategy on BTCUSDT.BINANCE (USD-M perp, 15m bars) that harvests oscillation via a ladder of passive post-only limit orders around a rolling EMA mid, spaced well above the ~0.04% maker round-trip, with a trend-pause filter and inventory cap meant to defend against the accumulate-against-a-trend blowup — a structural attack on the taker-fee death of mean-reversion.
Outcome Summary
It liquidated the account: total return -100%, max drawdown 100%, blown up on 2022-03-06 with zero returns for the final ~4 years; profit factor 0.646, Sharpe -0.95 (CI fully negative), information ratio -2.45, catastrophic left tail (skew -45.7, kurtosis 2179), and avg_trade_return_pct 0.14% below the 0.15% fee floor even before the blowup, across 13,295 trades with a 0.78 win rate.
Backtest and paper results are hypothetical. Trading involves risk of loss.