Skip to content
All hypotheses

Hypotheses

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)

A faithful statement of Hummingbot's 'SimplePMM' script (BotCamp Cohort Sept 2022, Apache-2.0; credit: hummingbot,…

Hypothesis

A faithful statement of Hummingbot's 'SimplePMM' script (BotCamp Cohort Sept 2022, Apache-2.0; credit: hummingbot, https://github.com/hummingbot/hummingbot/blob/9af100d6822da7d2d0291a906c730ef172284ee2/scripts/simple_pmm.py). It is a real trading strategy: a pure passive market maker with no signal, no inventory control, no stop and no position limit. Rules in the source, with defaults exactly as written: trading_pair ETH-USDT; order_amount = 0.01 ETH; bid_spread = 0.001 (10 bp); ask_spread = 0.001 (10 bp);……Show moreShow less

A faithful statement of Hummingbot's 'SimplePMM' script (BotCamp Cohort Sept 2022, Apache-2.0; credit: hummingbot, https://github.com/hummingbot/hummingbot/blob/9af100d6822da7d2d0291a906c730ef172284ee2/scripts/simple_pmm.py). It is a real trading strategy: a pure passive market maker with no signal, no inventory control, no stop and no position limit. Rules in the source, with defaults exactly as written: trading_pair ETH-USDT; order_amount = 0.01 ETH; bid_spread = 0.001 (10 bp); ask_spread = 0.001 (10 bp); order_refresh_time = 15 seconds; price_type = 'mid' (MidPrice; 'last' switches the reference to LastTrade). On every tick, when create_timestamp <= now: (1) cancel ALL active orders on the pair; (2) ref_price = mid price (or last trade price if price_type == 'last'); (3) build a LIMIT BUY of order_amount at ref_price*(1 - bid_spread) and a LIMIT SELL of order_amount at ref_price*(1 + ask_spread), both flagged is_maker=True; (4) run the budget checker with all_or_none=True (each order is either kept at full size or dropped if the account can't afford it; there is no partial resizing); (5) place the surviving orders; (6) set create_timestamp = now + order_refresh_time. did_fill_order only logs; fills do NOT change quoting. Inventory accumulates freely in whichever direction fills land. VENUE CHOICE (the one adaptation): the source runs on binance_paper_trade spot, where the paper account starts with BOTH ETH and USDT, so both sides are always quoted. On our BINANCE_SPOT CASH account the strategy starts with USDT only, so the sell quote would be dropped by the budget check until a buy fills, and the bot would turn into a one-sided dip-buyer. Spot maker fee is also 0.10% per side, so a full 10 bp + 10 bp round trip earns 0.20% gross against 0.20% of maker fees: zero edge by construction. The Binance USD-M perp (ETHUSDT.BINANCE, MARGIN, maker 0.02%) keeps both sides quotable from a flat start, matching the source's two-sided behaviour, with leverage 1.0. ETHUSDT is chosen because the source names ETH-USDT; the mechanism is venue/pair-specific, so the corpus ETH/BINANCE concentration is accepted here and noted.

Analysis

SimplePMM

Backtest and paper results are hypothetical. Trading involves risk of loss.