Strategies
Hummingbot SimplePMM (faithful port): symmetric 10 bp maker quotes around ETHUSDT mid, cancel-and-replace every 15 s, fixed 0.01 ETH per side (ETHUSDT.BINANCE USD-M, quote ticks)
Outcome: Abandoned
EthSimplePmmMakerQuotes
Outcome Summary
EthSimplePmmMakerQuotes tried to port Hummingbot's SimplePMM script to the ETHUSDT.BINANCE USD-M perp at leverage 1.0, quoting a 10 bp maker bid and ask every 15 s. The perp was chosen over spot so that both sides could be quoted from a flat start, and because spot's 0.10% maker fee would cancel the whole spread. The developer rewrote the cancel-and-replace step as in-place order amends to cut engine events, but the run still got stuck at coding with 3 timeouts over 3 iterations. It was abandoned before any backtest, optimization or analyst review took place, so no performance data exists.
Hypothesis
coding_stuck_3_timeouts
Implementation
Faithful port of Hummingbot SimplePMM on ETHUSDT.BINANCE USD-M perp: every refresh, retire all quotes and post a post-only LIMIT BUY at ref*(1-10bp) and LIMIT SELL at ref*(1+10bp), each 1% of equity, with an all-or-none margin budget check; fills never change quoting, inventory accumulates freely.
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 ETHUSDT.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).
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (69 days of ETHUSDT.BINANCE-5-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).
Outcome Summary
A market maker that reprices every 15 s produces a very large number of order events on quote-tick data, so a future attempt should first confirm that the code can finish within the coding and verification time limits (for example with fewer requotes or coarser data).
It was abandoned at the coding stage with reason 'coding_stuck_3_timeouts' after 3 iterations. Backtest review, optimization, analyst review and risk review were never reached.
A faithful port of Hummingbot's SimplePMM: a pure passive market maker posting symmetric 10 bp post-only maker quotes around the ETHUSDT reference price on the Binance USD-M perp. Quotes were cancelled and replaced every 15 seconds, with no signal, inventory control, stop or position limit.
There are no performance numbers. The backtest report is empty and no optimization report exists, so the strategy never produced a return, Sharpe ratio or trade count.
Analysis
SimplePMM
Backtest and paper results are hypothetical. Trading involves risk of loss.