Every losing system starts with a beautiful backtest. That is not a paradox — it is the whole problem. A curve that climbs smoothly from left to right is the cheapest thing to manufacture in this business, and the most expensive thing to believe.
This piece is about the gap between a backtest that looks profitable and one that would actually have made money. Three things live in that gap, and all three are fixable.
The curve is not the evidence
When you fit enough parameters to enough history, you can make almost any rule look like genius. The market has thousands of wiggles; a few knobs will always find some combination that rode them. That is overfitting, and it is invisible in the very chart that sells it to you.
The honest test is brutally simple: hide part of the history, build on the rest, then run the finished system on the part you hid. If it falls apart, it was memorising. If it holds, you have something. We hold out 30% of the timeline, untouched, on every system — and we publish how it did there, not just in-sample.
The three costs that turn a fantasy into a number
A backtest with zero costs is a physics problem with no friction: elegant, and wrong. Real money pays for the privilege of trading, every single time. There are three frictions, and skipping any one of them inflates the result.
1. Spread — the price of admission
You buy at the ask and sell at the bid. The difference is gone the instant you enter. On a tight EUR/USD that is a rounding error; on gold or an index it is a tax you pay on every round trip. A backtest run at spread 0 — the default in many tools — is quietly handing you free entries that no broker will ever give.
2. Slippage — the price of reality
The market does not wait politely at your chosen price. Between the signal and the fill, it moves. We model a fixed 1 basis point of slippage on every fill — small, honest, and applied without exception.
3. Commission and swap — the price of time
Commission is charged per trade; swap is charged for holding overnight. Neither is glamorous, and both compound. A system that trades often, or holds for days, bleeds through these even when every individual trade looks fine.
Here is what those frictions do to the same strategy, on the same data:
| Backtest setting | Reported ROI | Honest? |
|---|---|---|
| Spread 0, no costs | inflated | No |
| Real spread only | closer | Partly |
| Spread + slippage + commission + swap | the real number | Yes |
The point is not the exact figures — it is the direction. Every cost you remove moves the number up and the truth away.
How to read a Sharpe ratio without fooling yourself
Risk-adjusted return is the honest scoreboard, but it is easy to mis-measure. The cleanest version is built from the daily equity path, not from individual trades:
import numpy as np
daily = equity.pct_change().dropna() # returns per trading day
sharpe = daily.mean() / daily.std() * np.sqrt(252)
Per-trade Sharpe can be inflated by a flurry of tiny scalps; per-day Sharpe answers the question an account actually cares about — how bumpy was the ride, day to day? When a number looks too good, check the denominator before you check the strategy.
One backtest is an anecdote — a thousand is a distribution
Even an honest, out-of-sample, fully-costed backtest is a single path through history. Markets could have dealt the same edges in a different order, and the drawdown would have landed somewhere else. So we do not trust one path; we bootstrap thousands of them and read the distribution of outcomes — especially the bad tail.
- The median tells you the typical year.
- The 95th-percentile drawdown tells you the bad week you must survive.
- The funding rate tells you how often the account clears its prop-firm rules.
A system is only as good as its ugly percentiles, never its average.
What "verify before you trust" actually means
None of this is theory you have to take on faith. The whole point of our work is that you can redraw the curve yourself: load the same compiled system in your own cTrader, point it at the same markets, run the same window, and watch the numbers land where we said they would.
Proof is not a marketing word here. It is a procedure you can run on a Tuesday afternoon.
If you want the mechanics — exactly which costs we charge, on which symbol, and how the out-of-sample split works — that lives in the methodology. If you want to see how an honest curve translates into a funded account, the funding model walks through the Monte-Carlo.
The takeaway is small and stubborn: a backtest is worth precisely as much as the costs it refuses to hide.