There's a specific kind of heartbreak in systematic trading: a strategy that tests beautifully, goes live, and bleeds. Usually nothing is broken. The strategy just never had enough edge to survive the cost of trading it.

The three costs

Commissions. The obvious one, and usually the smallest. Easy to model, easy to remember.

The spread. Every time you cross the bid-ask, you pay half the spread on the way in and half on the way out. On a liquid stock that's noise. On a thin option it can be several percent of the premium — a cost that dwarfs commissions and gets ignored anyway because it never appears as a line item.

Slippage. The difference between the price you expected and the price you got. It grows exactly when you least want it to: fast markets, thin books, the moment your signal fires. The trades your system likes most are often the ones that fill worst.

A backtest with zero costs isn't optimistic. It's fiction.

Why short-horizon strategies suffer most

Costs are roughly fixed per trade. Your edge is not. So the math is brutally simple: the more you trade and the smaller each move you're capturing, the larger costs loom relative to the edge.

A swing trade holding for a 3% move can absorb a few cents of spread without noticing. A scalp reaching for a small move pays the same few cents against a much smaller prize. This is why high-frequency ideas that look wonderful in a spreadsheet die on contact — they were never capturing more than the cost of capturing it.

Model costs pessimistically

The right instinct is to be harsh:

Assume you cross the spread. Unless your system genuinely waits passively at the bid — and eats the trades it therefore misses — model yourself paying up.

Use real fills, not mid. A backtest filling at the midpoint assumes you got a price nobody offered you. Fill at the ask when buying and the bid when selling, and the picture changes fast.

Measure your actual slippage, then use that. Once live, the difference between your intended price and your fill is a number you can record on every trade. It is far more honest than any assumption. Feed the real figure back into the testing.

Include the trades you didn't get. A passive order that doesn't fill isn't free — it's a missed winner. Systems that look good because they only count the passive fills that happened are measuring survivors (survivorship bias).

The test that matters

Take your expectancy and subtract the full round-trip cost. If the number is still comfortably positive, you have something. If it's marginal, you have a strategy that will be profitable in good conditions and unprofitable the moment spreads widen — which is to say, unprofitable when it matters.

The honest version of this test kills a lot of ideas. That's the point. Better to kill them in a spreadsheet than one fill at a time.

See also: backtest vs forward test and execution speed as edge.