Knowledge · Research · Scalping & Market-Making for Botty - why both variants die (fee floor vs. adverse-selection floor)

Scalping & Market-Making for Botty - why both variants die (fee floor vs. adverse-selection floor)

Strategy analysis 2026-06-20 5 sources
Scalping sounds tempting (many small wins add up), but it splits into two variants with two different causes of death. TAKER scalping (taking with market orders) dies at the fee floor - measured in `liquidation_mr_scout`: 56% hit rate, yet net -7 to -10bps in 0/7 years. MAKER market-making (providing liquidity, earning spread + rebate) is the only structurally conceivable way out - but it dies at the ADVERSE-SELECTION floor: measured in the new `spread_capture_scout.py` (BTC/ETH/SOL, 6+ years) it is deeply negative everywhere at the HL base maker fee, positive in 0/7 years, and even with a rebate only crosses zero marginally and unstably. Graveyard. The structurally clean 'scalping cousin' we DO have is the delta-neutral [[funding_carry_botty]] (live on Wallet 3).
  • TWO VARIANTS, TWO CAUSES OF DEATH. Scalping = many micro-trades, seconds-to-minutes holding time, each only a few basis points. It splits cleanly into (a) TAKER scalping: you TAKE liquidity (market order) and pay the taker fee - dies at the fee floor; (b) MAKER market-making: you PROVIDE liquidity (limit quotes) and earn the spread + possibly a rebate - dies at adverse selection. Both measured separately.
  • TAKER FLOOR (already established, `liquidation_mr_scout`): HL taker ~3.5bps/fill -> ~7bps round-trip. A liquidation mean-reversion scalp across 5,300 cascades / 7 years had a 56% hit rate, gross ~0, but net -7 to -10bps, profitable in 0/7 years. The fee eats exactly the micro-edge that made the signal interesting. This is the death of every retail taker-scalper.
  • MAKER FLOOR (newly measured, `spread_capture_scout.py`, BTC/ETH/SOL 1m, 6+ years): symmetric quotes around the open, fills from high/low, each leg marked to close (= adverse selection modeled honestly). At the HL base maker fee (+1bp): deeply negative everywhere, positive in 0/7 years across ALL three assets. At the breakeven tier (0bp): 1-2/7 years. Only with a rebate (-0.5bp) AND the widest quote (delta=21bps, where you only fill 6-22% of bars) does net/bar barely cross zero (+0.008 BTC, +0.002 ETH, SOL stays negative) - and unstably (3-4/7 years).
  • THE MECHANISM (two-bucket decomposition). When BOTH quotes are filled ('both fill'), you pocket a clean spread: +2 to +43bps - looks dreamy. But when only ONE side fills ('one-sided', trending bar), you hold inventory that moved against you: -1.3 to -10.4bps. And the one-sided bucket is 3-10x MORE FREQUENT -> it dominates the average. That is adverse selection: your quotes get filled preferentially exactly when the market runs against you.
  • THE PRETTIEST FINDING (refutes the naive hope). SOL - the most illiquid, most volatile of the three - is NOT the best MM choice but the WORST (-0.46bps/bar at base fee vs. -0.09 BTC). The wider natural spread of an illiquid alt is eaten EXACTLY by worse adverse selection. Volatility gives you more spread and takes it away in the same breath. 'Illiquid alt = more spread to capture' is therefore measured to be false.
  • THE MODEL IS AN UPPER BOUND. Queue position (are we really best-quote or standing at the back of the line?), inventory carry beyond bars, and latency are deliberately abstracted away. In reality maker-MM would be EVEN worse than the already-negative numbers. The only lever that flips the sign at all is a guaranteed maker rebate - and even that is only marginally enough.
  • VERDICT: GRAVEYARD. Neither variant is for us: taker at the fee floor, maker at the adverse-selection floor, and the only positive region (rebate + ultra-wide quote) is marginal, unstable, and would require an entirely new machinery chapter (real-time order book, constant re-quoting, inventory management). The structurally clean 'scalping cousin' we already run live is the delta-neutral [[funding_carry_botty]]: directionless, earning from a structural payment instead of micro-forecasts.
Do NOT build a scalping/market-making bot. Taker scalping dies at the fee floor (measured liquidation_mr_scout: 56% hit rate, net -7..-10bps, 0/7 years), maker-MM at the adverse-selection floor (measured spread_capture_scout: 0/7 years at base fee, only marginally & unstably positive with a rebate). The only positive region needs real-time order-book infrastructure for an edge near zero - not buildable/worthwhile.
If ever reconsidered: only under (1) a GUARANTEED maker-rebate tier AND (2) on an instrument where we realistically hold queue priority / best-quote - neither given today. Without both, the sign is negative.
Generalized lesson as a negative gate (alongside [[what_doesnt_work]]): every 'many small trades' idea must clear both floors BEFORE any infrastructure investment - fee floor (edge > round-trip fee?) and adverse-selection floor (do I get filled preferentially when the market runs against me?). High hit rate != edge.
Reinvest the 'scalping appeal' into the delta-neutral [[funding_carry_botty]] - already structural, directionless, and live on Wallet 3. It is the only market-structure edge that passes our gates, because it pockets an owed payment instead of selling an option to the market.

What scalping actually is

Scalping = not one big correct forecast, but hundreds of tiny trades, each holding seconds to a few minutes, each capturing only a few basis points. The hope: the statistical edge of many micro-decisions adds up.

The edges scalpers draw from are almost always microstructural - not 'where is BTC going' but order-book mechanics: collecting the spread, reading order flow, fading short momentum bursts or overreactions.

Crucially: scalping splits into two variants with two completely different causes of death. We measured both.

                          SCALPING
                              |
          +-------------------+-------------------+
          |                                        |
   (a) TAKER scalping                      (b) MAKER market-making
   you TAKE liquidity                      you PROVIDE liquidity
   (market order)                          (limit quotes)
   pay taker fee (~3.5bps)                 pay maker fee (~1bp) / rebate
          |                                        |
   dies at the  FEE FLOOR                  dies at the  ADVERSE-SELECTION FLOOR
   (measured: liquidation_mr_scout)        (measured: spread_capture_scout)

Variant (a): taker scalping - death at the fee floor

You see a micro-signal and fire a market order. You take liquidity and pay the taker fee for it: on Hyperliquid ~3.5bps per fill, i.e. ~7bps round-trip (in + out). A scalp trade would have to earn net more than 7bps - on a move that often has only 5-15bps gross.

We already measured this (liquidation_mr_scout - a genuine taker-scalping strategy: fading liquidation cascades, capturing the rebound):

Metric Value
Events 5,300 cascades over 7 years
Hit rate 56 % - looks winnable!
gross ~0 bps
net (after ~7bps RT) -7 to -10 bps
Profitable years 0 / 7

The classic scalping trap: the hit rate looks like edge, but the fee eats exactly the micro-advantage that made the signal interesting in the first place. Taker scalping is dead for us before it begins.


Variant (b): maker market-making - the only conceivable way out

The one lever that theoretically flips the math: becoming a maker instead of a taker. Instead of taking liquidity, you provide it. You simultaneously post a buy order below and a sell order above the current price and wait for others to trade against you. Then you don't pay 3.5bps taker - you pay the far smaller maker fee (HL base ~1bp), and in high volume tiers you even get a rebate (negative fee).

How it should work

        Price
          ^
  ask  ---+ <-- LIMIT SELL  (Mid + delta)   "I sell delta above market"
          |
  Mid  ---+ <- current price (open of the bar)
          |
  bid  ---+ <-- LIMIT BUY   (Mid - delta)   "I buy delta below market"
          v

  delta = half the quoted spread per side (in bps)
  Idea: BOTH get filled -> you bought cheap AND sold expensive
        -> you pocket the full spread 2*delta, minus 2x maker fee.

If the price drifts calmly around the mid, exactly that happens - a clean spread gain:

  GOOD  - calm bar, price oscillates  ("both fill")

  ask +====O  <- sold @ ask
  Mid +  / \   /  bid +=O   \ /   -> close ~ Mid
        ^ bought @ bid
  Result:  +2*delta - 2*fee   OK  (you were the calm hand in the market)

Why it dies anyway: adverse selection

The problem: your quotes get filled preferentially exactly when the market runs against you. If the price breaks in one direction, only one of your two orders gets hit - and the price keeps running, leaving you sitting on a losing position:

  BAD - trending bar, price breaks out  ("one-sided")

  ask +====O  <- sold @ ask ...
  Mid +      \
  bid +       \____  -> close FAR below ask
                   (bid was never hit - no counter-trade)
  Result:  you are SHORT @ ask, price fell further -> loss
             (reversed on an upward breakout: only bid filled, long into the fall)

That is adverse selection: the calm market in which you pocket the spread cleanly is also the one where there is least to capture; the moving market with lots of spread on the table is exactly the one that runs you over. Whoever provides liquidity sells an option to the market - and it gets exercised against them when they can least defend themselves.


Measured: spread_capture_scout.py

Data-gate trick (as with the liquidation scout - no order book / tick feed needed): we quote each 1m bar symmetrically around the open (causal, known at bar start) and read the fills from high/low: bid fills if low <= bid; ask fills if high >= ask. Each filled leg is marked to close (against the bar's close) - that models adverse selection honestly, because a one-sidedly filled leg in a trending bar automatically lands in the red.

Tested: BTC / ETH / SOL, 6+ years of 1m data each, quote distances delta in {1,2,3,5,8,13,21} bps, in three maker-fee worlds.

Result (best delta per scenario, net/bar in bps)

Maker fee BTC ETH SOL Positive years
+1.0 bp (HL base) -0.085 -0.165 -0.459 0 / 7 everywhere
0 bp (breakeven tier) -0.023 -0.054 -0.112 1-2 / 7
-0.5 bp (rebate) +0.008 +0.002 -0.011 3-4 / 7 (unstable)

The positive region exists only with a guaranteed rebate, only at the widest quote (delta=21bps, where you fill a mere 6-22 % of bars at all), and at ~+0.008 bps/bar it is marginal as well as not stable across years.

Where the money is lost - the two-bucket decomposition (BTC, base fee)

 delta(bps)  both-fill%   both-gain      one-sided%   one-sided-loss    ->  net/bar
   1        40.3 %       ~  0 bps        53.4 %        -5.08 bps          -2.71
   3        15.6 %       + 4 bps         58.4 %        -4.20 bps          -1.83
   8         2.6 %       +14 bps         30.9 %        -3.31 bps          -0.65
  21         0.2 %       +40 bps          5.8 %        -2.78 bps          -0.09

You can see the conflict directly: the clean both-bucket pays excellently (+4 to +40bps), but it is rare (0.2-16 %). The one-sided bucket (adverse selection) is consistently negative (-2.8 to -5.1bps) and 3-10x more frequent -> it dominates the average. Quoting wider (large delta) reduces the adverse-selection frequency, but then you almost never fill -> the edge goes toward zero instead of into the black.

The twist: illiquid alts are WORSE, not better

The naive hope reads: 'BTC is too efficient, the spread too tight - take an illiquid alt, there's more spread on the table.' Measured false. SOL (most illiquid, most volatile of the three) is the worst choice at -0.459 bps/bar, BTC the least bad at -0.085. The wider natural spread is compensated exactly by worse adverse selection - volatility gives you more spread and runs you over more often. The two forces don't just cancel, volatility wins.


Why this is a graveyard entry (and not a to-do)

It closes the loop cleanly and symmetrically:

  • Taker scalping dies at the fee floor (~7bps RT, fixed).
  • Maker market-making dies at the adverse-selection floor (structural, not parametrizable away).

A positive edge arises only with a guaranteed rebate + ultra-wide quote + accepting instability - for an amount near zero. For that we would need an entirely new machinery chapter: real-time order-book feed, limit orders with constant re-quoting, inventory-risk management, low latency, queue position. That is a market-making bot, not a signal bot - huge infrastructure effort for a marginal, unstable, rebate-dependent edge. And our model is still an upper bound (queue/carry/latency abstracted away) -> worse in reality.

The silver lining: we've already satisfied the scalping appeal

The structurally clean 'scalping cousin' is the delta-neutral Funding carry at Botty — the first structural edge, and what really defines it live - the slow, safe relative:

Maker scalping Funding carry
directionless? ideally, in reality no (adverse selection) yes, truly delta-neutral
earns from micro-spread (eaten by AS) structural funding payment
frequency hundreds of trades/day, latency-critical settled hourly, set-and-forget
infra real-time order-book MM bot existing signal bot
status for us graveyard live & healthy on Wallet 3

Both are 'earn from market structure instead of forecast' - but the carry pockets a payment the market owes, instead of selling an option that gets exercised against it. That is exactly why one survives our gates and the other does not.

What this teaches in general

Every 'many tiny trades' idea has to clear two floors before it is worth infrastructure: the fee floor (do I pay more fee than the edge is big?) and the adverse-selection floor (do I get filled exactly when it hurts?). Scalping almost always fails at one or the other. Whoever builds it anyway confuses a high hit rate with an edge.