The 2–30 minute trap: how churn and fees quietly eat a "profitable" system
A strategy can show a clean edge on paper, get filled at real prices on a real broker, and still bleed — not because the signal stopped working, but because of how long you hold and how often you trade. Here is the autopsy, with real fills.
Every prop trader has seen it: the backtest curve climbs, the win rate looks fine, you go live — and the account drifts down. The usual reflex is "the edge stopped working." Usually it didn't. The edge is still there. It's just buried under two costs a naïve backtest barely models: commissions on every round trip and the trades you take that you shouldn't.
We ran one of our own bots on a real broker account and pulled the actual fills — not a notebook simulation, the broker's own trade report. 68 closed trades. Here's what the paper version never showed us.
1. The system was near-breakeven gross — and fees nearly doubled the loss
| Metric | Real fills (68 trades) |
|---|---|
| Gross P&L | −$473 |
| Commissions / fees | −$339 |
| Net P&L | −$813 |
| Win rate | 50% |
| Profit factor | 0.90 |
Read that again: fees were 72% of the gross loss. On a system that is roughly breakeven before costs, the commission is not a rounding error — it is the result. A backtest that uses zero or token commissions will paint this exact system as a flat-to-slightly-up performer. The broker statement calls it a −$813 month.
2. Where the money actually went: bucket by holding time
| Hold time | Trades | Net | Win% |
|---|---|---|---|
| < 2 min | 9 | −$36 | 33% |
| 2–30 min (churn) | 36 | −$4,141 | 44% |
| > 30 min (holds) | 23 | +$3,364 | 65% |
This is the whole story in one table. The trades held longer than 30 minutes were the entire edge: +$3,364 at a 65% win rate. The 2–30 minute trades — over half the activity — bled −$4,141. Same bot, same signal, same week. The difference between a winning system and a losing one was holding time, and the churn bucket is exactly where the fee drag compounds: more trades, more round-trip commissions, smaller edge per trade to absorb them.
We call this duration = leverage. The longer holds let the move develop; the short churn pays the broker to be wrong faster. A backtest that fills every bar cleanly and counts every signal as a free entry will happily show the churn as "more opportunities." Real fills show it as a fee pump.
3. The proof it's discipline, not the signal
We ran the same bot on a second account where it happened to churn far less. The contrast is brutal:
| Disciplined run | Churning run | |
|---|---|---|
| Churn rate (% of trades 2–30 min) | 12% | 51% |
| Fees as % of gross | 4% | 72% |
| Profit factor | 3.64 | 0.90 |
| Net per contract | +$21.77 | −$2.27 |
Identical logic. The only material difference was how often it traded. One run was a PF 3.64 winner; the other a PF 0.90 loser. The signal didn't change — the discipline did.
4. How to make a backtest stop lying to you
- Charge full round-trip commissions (and realistic slippage). If the system only works at $0 fees, it doesn't work.
- Bucket your results by holding time. If you can't see which duration band makes the money, you can't tell the edge from the churn.
- Report gross and net side by side. A big gap between them is a flashing warning that fees own your P&L.
- Count the trades you'd skip. The most valuable filter is often "don't take the 2–30 minute trade at all."
The takeaway: "trade less, hold longer" sounds like timid advice. On real fills it was the difference between +$3,364 and −$4,141 on the same signal. Backtests lie when they hide the cost of churn. Price it in, and the strategy tells you the truth.
Educational case study using our own automated-trading test accounts; figures are historical results of our internal testing, not a performance guarantee or an offer to trade. Trading futures involves substantial risk of loss and is not suitable for everyone. Hypothetical and historical results have inherent limitations.