The 2:1 Setup That Paid Out at 0.75:1

작성자

카테고리:

← 피드로
DEV Community · Valerii Sakara · 2026-08-31 개발(SW)

Valerii Sakara

This is one from a bot I run myself, not a client audit — but the same shape shows up often enough in code I review that it’s worth writing up on its own. “Backtest looked fine, live looks worse” usually gets diagnosed as slippage or a broken exit. This one wasn’t either. The stop-loss and take-profit fired exactly where they were supposed to. The problem was one line above that: what “reward” and “risk” actually meant once real costs were counted.

What the setup was supposed to be

The stop-loss was ATR-based — sized to the instrument’s recent volatility, not a fixed dollar amount. The take-profit was set to roughly double that distance, a standard 2:1 target. Checking the actual price levels on every trade in the sample against entry, stop, and target confirmed the designed reward:risk ratio really was there in price terms: ≈1.94:1, almost exactly as intended. Nothing wrong with the setup on paper.

What the fills actually showed

Pulling realized PnL from the broker’s own commission reports — not derived, not estimated, read directly off the fills — and comparing it to that same price-based risk and reward told a different story. Average realized win: $1.57, slightly above the average designed reward of $1.41 — so the win side wasn’t the issue, if anything it was doing a little better than planned. The losing side was where the gap showed up: average realized loss exceeded the pure price-based stop-loss risk by $1.37 on average (median $1.60), on every losing trade in the sample. That’s not a rounding error — it’s a consistent, one-directional tax on every loser and none of the winners.

Where the missing dollars went

Round-trip commission on this setup ran $0.92–$1.78 per trade — and that range fully accounts for the gap on its own, no other explanation needed. The mechanism is arithmetic, not behavioral: commission is close to a fixed dollar amount per round trip, regardless of how far price moves. An ATR-based stop keeps the loss side narrow in dollar terms by design — that’s the point of volatility-based sizing. A take-profit twice that distance is correspondingly wide. The same roughly-fixed commission is a large fraction of a narrow loss and a small fraction of a wide win. It barely touches the winners and eats disproportionately into every loser — quietly dragging the realized ratio down from a designed ~2:1 toward under 1:1, with zero bugs in the stop or target logic.

Why the fix isn’t the exit logic

The natural first move is to tighten the exits — add a trailing stop, take partial profit earlier, tune the take-profit distance. None of that addresses the actual cause, because the exit levels were never the problem. The three levers that actually move this number:

  • Widen the stop. A wider ATR-based stop makes fewer trades “commission-marginal” — the same fixed cost becomes a smaller fraction of a bigger price-based risk.
  • Size up per trade. The same commission spread over a larger dollar risk has less relative drag — this only works if your risk-per-trade rules have room for it.
  • Price it in up front. Subtract expected round-trip commission from your minimum edge threshold before a signal is approved, instead of finding out about it in the PnL after the fact.

How to check this in your own numbers

  • Pull PnL from actual fills or commission reports — not the backtest’s internal accounting — and compare it trade-by-trade to the price-based risk and reward implied by your stop and target. Don’t assume they match.
  • Compute your round-trip commission in dollars for your typical size, and compare it to your typical stop-loss distance in dollars. If commission is a double-digit percentage of that distance, your realized reward:risk will measurably underperform your designed reward:risk — every time, not occasionally.
  • Check whether most backtest engines even model your real commission schedule by default. Plenty default to zero or a flat generic value that has nothing to do with your actual broker’s tier — which means the price-based ratio your backtest reports can be correct and still not be the ratio you’ll realize.

Nothing about this required a bug. The stop fired where it should have, the target fired where it should have, and the price-based math behind both was right. The gap was entirely in what “reward” and “risk” meant once a mostly-fixed dollar cost got applied to a narrow side and a wide side unevenly. A backtest that only checks prices — not fills, not commission — can be completely honest about the setup and still hand you a ratio you will not actually get.

Originally published on Honest Backtest.

원문에서 계속 ↗