What running a fleet of autonomous trading bots taught me about picking the right metric.
I run a small fleet of automated trading bots in paper mode. One of them — a mean-reversion strategy on crypto — closed its first 34 trades without a single loss. 34 out of 34. A 100% win rate.
If I put that number on a landing page, it would sell. It's also close to meaningless. Here's why, and why it changed how I evaluate any autonomous system I put in production.
The number is real. The conclusion isn't.
The strategy belongs to the "buy the dip, scale in, exit in profit" family. Two mechanics produce that spotless record:
- It scales into losers. When a position moves against it, it adds to the position at a lower price, dragging down the average entry. A trade that would have been a 4% loss becomes a 0.5% win after two add-ons.
- It only ever closes in green. There's no time-based or loss-based exit in the base logic. A position that's underwater simply... stays open. It isn't a loss until it's realized, and it's never realized at a loss.
Put those together and a 100% win rate isn't evidence of skill. It's the definition of the strategy. The metric is measuring the exit rule, not the edge.
Where the risk actually lives
The losses don't disappear — they move to places the win rate doesn't look:
- Locked capital / time under water. In a bear backtest, this style held some positions for up to 121 days. Capital busy averaging down a bag is capital that isn't compounding. Win rate says nothing about that opportunity cost.
- Tail risk. Scaling into a falling asset works beautifully until the asset doesn't come back. The distribution of outcomes has a fat, ugly left tail that a "100% so far" record hides completely. You don't see it until a trend breaks and the temporary drawdown becomes permanent.
- Sequence risk. 34 trades in a calm, ranging market tells you how the strategy behaves in a calm, ranging market. That's it.
None of this is a knock on the strategy — scaling in is a legitimate approach. The point is that win rate is the wrong lens for it. It's a vanity metric here, the same way "99.9% of requests return 200" is a vanity metric if you never look at the 0.1% that time out and take the checkout flow down with them.
The rule I run by now
Because the flattering metric is worthless, I won't let a bot near real money on the strength of it. The go-live criteria I actually use:
- A minimum number of trades (I use ≥100), so I'm looking at a distribution, not an anecdote.
- Survive at least one real correction in paper mode. The entire risk of this strategy lives in a downtrend it can't average out of. If it hasn't lived through one, I haven't seen the number that matters.
- Drawdown, time-under-water, and a Monte Carlo reshuffle of the trade sequence — because the order the trades happened to arrive in is one sample, and I want the P95/P99 of the drawdown, not the single lucky path.
Win rate isn't on the list. Neither is total P&L over a too-short window.
The general lesson (this isn't really about trading)
The bot is just a clean example of a trap that shows up wherever you operate an autonomous system: the system will happily hand you the metric that looks best, and it's usually the one that hides the failure mode.
An agent that "completes 100% of tasks" might be quietly narrowing what counts as a task. A pipeline with "zero errors" might be swallowing them. A model with a great average score might be catastrophic on the 2% of inputs you actually care about.
The engineering job isn't to collect the flattering number. It's to design the evaluation so the failure mode has to show itself before it costs you. For my bot, that means judging it by how it behaves in the drawdown it's built to avoid looking at — not by the streak it produces when nothing goes wrong.
A 100% win rate didn't make me trust the bot. It's the thing that made me go looking for what it was hiding.
I document a fleet of autonomous trading agents as an engineering problem — evaluation, risk, reliability — not as trading advice. No signals, no tips; just what breaks and how I try to catch it first. Follow along if that's your thing.
Top comments (0)