Front-Loading a Crypto Grid Bot: More Wins, Less Money
If you take one thing from this post: I made my grid bot win more often and earn less money — on purpose, in a backtest — and that's the whole lesson. Win rate is a vanity metric for grid trading. Here's the experiment on my own live strategy that proved it.
The idea that sounded obviously smart
My live crypto grid bot runs a boring uniform 3% grid: buy rungs every 3% below the anchor, sell each one 3% back up. I already backtested that step size into the ground, and 3% won nearly everywhere.
But there's an itch every grid trader eventually scratches: why space the rungs evenly? Near the current price, small dips happen constantly. If I made the inner rungs tighter — the first rung at −1% instead of −3% — the bot would catch all those little wiggles, cycle more often, and print more profit. Keep the outer rungs wide so the average step is still ~3% and the max depth is still −15%. Same capital, same risk envelope, just smarter spacing. Free money, right?
I've learned to distrust "free money." So I tested it instead of shipping it.
The setup (honest version)
I extended the exact same backtest harness from the 3% post — same data loader, same friction, same windows — and changed only the rung geometry. Five layouts, all 5 rungs, all reaching −15% depth, all deploying identical capital ($11/rung). The only thing that moves is where the inner rungs sit:
- uniform-3% — the live baseline: gaps
3 / 3 / 3 / 3 / 3 - uniform-2% — tighter-but-even, a sanity check:
2 / 2 / 2 / 2 / 2 - asym-mild — gentle front-load:
1.5 / 2.25 / 3 / 3.75 / 4.5 - asym-strong — aggressive front-load:
1 / 2 / 3 / 4 / 5 - asym-tight-inner — very tight inner pair:
1 / 1.5 / 3 / 4.5 / 5
Every layout averages a 3% step. Friction is realistic: 0.26% fee + 5 bps slippage per side (~0.62% round-trip). I ran it over 105 non-overlapping 30-day windows across DOT, LINK, and AAVE. Apples to apples — the only variable is rung spacing.
The results
| Layout | Total PnL | vs. baseline | Win rate | Profitable windows |
|---|---|---|---|---|
| uniform-3% (live) | +$944.6 | — | 78.1% | 82 / 105 |
| asym-mild | +$1014.3 | +7.4% | 77.1% | 81 / 105 |
| asym-strong | +$634.8 | −32.8% | 81.0% | 85 / 105 |
| asym-tight-inner | +$608.8 | −35.6% | 80.0% | 84 / 105 |
| uniform-2% | +$412.8 | −56.3% | 69.5% | 73 / 105 |
(These are backtest aggregates summed across 105 windows on ~$165 of simulated capital. The signal is the comparison between layouts, not the absolute dollar figure — this is research, not live P&L.)
Look at the two aggressive front-loads. They have the highest win rates in the whole table — 81.0% and 80.0%, both beating the baseline's 78.1% — and they earned about a third less money. asym-strong won more often and finished −33%.
The single variant that edged the baseline (asym-mild, +7.4%) did it with a slightly lower win rate — and that margin is comfortably inside backtest noise.
Why winning more lost money
Two mechanisms, both obvious in hindsight:
-
Thin inner take-profits get eaten by fees. A rung that buys at −1% and sells at the next level up nets maybe ~1% gross. Round-trip friction is ~0.62%. So a big chunk of those "extra cycles" the tight rungs generate are barely profitable — and some go net-negative the moment slippage is real. You trade more, you pay more, you keep a sliver. (This is the same reason
uniform-2%— and historicallyuniform-1%— lose outright: more fills, more drag, not more profit.) -
Tight rungs build underwater inventory in downtrends. They fill fast and early. In chop, that's great. In a falling market, they leave you holding more unrealized bags sooner — and the unrealized column was more negative for every front-loaded layout. The extra cycles you enjoy in calm markets are paid for by bigger drawdowns in trends.
Higher win rate is cheap to manufacture: just take smaller profits more often. It tells you almost nothing about whether the strategy actually makes money.
What I changed: nothing
The live grid is still uniform 3%.
The only variant that beat it didn't beat it by enough to justify the extra inventory risk and the added moving parts — and "wins inside backtest noise" is not a reason to complicate a bot that's trading real money. Meanwhile the layouts that felt better because they won more often were the worst performers in the table. That's the trap, in one screenshot.
What this backtest still can't see
Same caveat as last time: a backtest can't fully model real fills on thin inner rungs, exchange order minimums, or the path-dependence of which 30-day window you actually live through. So this informs the default — it doesn't replace watching the thing trade. Which I do, on camera, with real money, live 24/7.
The boring grid wins. Again.