Building a Maker Scalper for ETHUSDC Futures — A Practical Guide

Published: Updated:

Why a Maker Scalper?

Maker orders earn you the maker rebate on Binance Futures — typically 0.02% per fill. For high-frequency strategies, this rebate alone can cover slippage and leave you net positive even on break-even trades.

The core idea is simple:

  1. Place limit orders slightly below the bid (long) or above the ask (short)
  2. Collect the spread + maker rebate when filled
  3. Exit quickly with a tight take-profit
  4. Cancel and replace if the market moves away

But executing this reliably at scale requires careful engineering.

The Architecture

Binance Futures REST + WebSocket

   ┌────▼────┐
   │ @trade   │  ← real-time tick data
   │ bookTicker│  ← best bid/ask updates
   └────┬────┘

   ┌────▼────┐
   │ 16 indicators  │  ← ATR14, CVD, depth pressure, VWAP...
   └────┬────┘

   ┌────▼────┐
   │ Trade Gate │  ← 6 rules: cooldown, volatility gate, time window...
   └────┬────┘

   ┌────▼────┐
   │ Order Engine│  ← GTX Post-Only, GTC fallback, batch splitting
   └──────────┘

Key Components

1. Tick-Level Signal Pipeline

Every incoming @trade event flows through a chain of 16 hand-written indicators. No TA-Lib, no pandas-ta — pure Python math + decimal + collections.deque:

# ATR(14) — Wilder's smoothing, not SMA-based RMA
class ATR14:
    def __init__(self, period=14):
        self.period = period
        self.prev_close = None
        self.atr = 0.0

    def update(self, high, low, close):
        if self.prev_close is None:
            self.prev_close = close
            return None
        tr = max(high - low, abs(high - self.prev_close), abs(low - self.prev_close))
        self.atr = (self.atr * (self.period - 1) + tr) / self.period
        self.prev_close = close
        return self.atr

2. Trade Gate — 6 Local Rules

The trade gate runs purely locally — no network calls, no external dependencies. Six rules determine whether a signal is eligible for execution:

RuleWhat It Does
Close CooldownN seconds ban after a regular close
Stop-Loss CooldownN minutes ban after being stopped out
Large Loss CooldownExtended cooldown after a large single-trade loss
Volatility GateBlock if ATR14 percentile exceeds threshold
Indicator GateScore + depth pressure direction confirmation required
Time Window GateBlock trading during specified time windows (supports crossing midnight)

All states persist to SQLite for restart recovery.

3. Bot Manager — From Simulation to Live

The Bot Manager maintains a pool of paper bots competing for promotion:

This creates a natural selection loop — only strategies that prove themselves in simulation ever touch real money.

Next Steps

If you want to run a maker scalper yourself:

  1. Clone apebot lite on GitHub
  2. Set up your Binance API keys (futures enabled, GTX allowed)
  3. Create a paper bot and let it run in simulation for at least 48 hours
  4. Review the stats, tweak the scorer configuration, and iterate

Or if you have a TradingView Pine Script strategy you want converted to Python — find me on Fiverr.