Building a Maker Scalper for ETHUSDC Futures — A Practical Guide
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:
- Place limit orders slightly below the bid (long) or above the ask (short)
- Collect the spread + maker rebate when filled
- Exit quickly with a tight take-profit
- 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:
| Rule | What It Does |
|---|---|
| Close Cooldown | N seconds ban after a regular close |
| Stop-Loss Cooldown | N minutes ban after being stopped out |
| Large Loss Cooldown | Extended cooldown after a large single-trade loss |
| Volatility Gate | Block if ATR14 percentile exceeds threshold |
| Indicator Gate | Score + depth pressure direction confirmation required |
| Time Window Gate | Block 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:
- Simulation Pool: Multiple bots run against live market data with simulated fills
- Ranking: Sort by Sharpe ratio, PnL, win rate, or max drawdown
- Promotion: The best paper bot gets promoted to the single live trading slot
- Demotion: If the live bot underperforms, it gets demoted back to simulation
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:
- Clone apebot lite on GitHub
- Set up your Binance API keys (futures enabled, GTX allowed)
- Create a paper bot and let it run in simulation for at least 48 hours
- 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.