A trader I know has been running the same breakout setup for a couple of years and has never once checked whether it actually makes money over a decent sample. His reason, when I finally asked, was that he cannot code, and every backtesting tutorial he found opened with a Python install and a data API key. Which is fair, because that is what most tutorials look like. But the coding requirement is mostly a leftover from an earlier era. You can get a genuinely useful backtest out of a chart with bar replay, a spreadsheet, and a few honest assumptions about fees and fills. The honest assumptions are the part everyone skips, so I want to spend most of this on those.
Bar replay is the manual method, and it works
Most modern charting platforms have a replay mode. You wind the chart back a year, the future candles disappear, and you step forward one bar at a time. When your setup appears, you take the trade on paper, write down the entry, the stop, and the target, then keep stepping forward until the trade resolves. That is a backtest, a primitive one, but a real one, and you can run it tonight with tools you already have.
The benefit nobody mentions is that replay forces you to experience the strategy the way you would actually trade it. You see how often the setup almost forms and then does not. You see the ambiguous cases where you genuinely cannot tell whether your rule fired. A coded backtest hides that ambiguity behind a clean number, and the ambiguity is usually where the real work is.
The limitations are just as real. Your sample will be small, maybe forty to eighty trades before boredom wins. Intrabar behavior is invisible on higher timeframes, so when a single candle touches both your stop and your target you have no idea which hit first, and you should count those as losses. The killer is discretion creep: halfway through, you start skipping trades that look wrong, which means the test has stopped measuring the ruleset and started measuring your intuition, and your intuition may already remember what a famous chart did next. Pick markets and periods you do not know well, and take every qualifying trade.
The spreadsheet is where the fantasy dies
Every replay trade goes into a sheet. Date, market, direction, entry, stop, target, exit price, exit reason, and then the two columns almost everyone omits: fees and slippage. Those two columns are the difference between a backtest and a bedtime story.
Fees are the easier of the two. A round trip at taker rates on a major crypto exchange typically costs somewhere around a tenth to a fifth of a percent, and more on smaller venues. Stock trading is commission free at many brokers, but the bid-ask spread is still a cost you pay on every entry and exit. Whatever your market, find the real number and subtract it from every trade in the log.
Slippage is the assumption that you get filled slightly worse than the price on the chart, because you usually do. For liquid majors a small haircut per side is reasonable. For thin altcoins or small caps it can quietly eat the entire edge. Then there is the classic fantasy fill, where you assume your limit order sitting at the exact low of a candle got filled because price touched it. Touching your level does not fill you. A conservative rule that has served me well is to only count a limit fill if price traded through the level rather than merely touching it.
With costs applied, compute the boring numbers: win rate, average win versus average loss expressed in R, meaning multiples of your initial risk, expectancy per trade after costs, and longest losing streak. If the expectancy after costs is a thin sliver of an R, assume live conditions will finish the job the spreadsheet started.
Visual builders, and where they quietly flatter you
The third option is a visual strategy builder, where you assemble rules from dropdowns, something like buy when RSI crosses back above thirty and exit on a moving average cross or a fixed stop, and the platform runs it against years of history in seconds. The advantages over replay are obvious: hundreds of trades instead of dozens, zero discretion creep, and quick testing of variations.
The flattery hides in the default settings. Fees often default to zero. Slippage almost always defaults to zero. Fills are frequently modeled at the close of the same bar that generated the signal, which is mildly optimistic, or in bad implementations at prices the strategy could not have known yet, which is lookahead bias and makes the whole result worthless. Before you believe any equity curve from a builder, open the settings, set fees and slippage to realistic values, and set fills to the open of the next bar if the signal is computed on the close.
The deeper trap is that iteration is nearly free. It takes thirty seconds to nudge a parameter and rerun, so people keep nudging until the curve looks beautiful, and what they end up with is a description of the past rather than a strategy. My working rule is that every parameter you tune against a dataset makes the result less trustworthy on new data. Hold back the most recent stretch of history, never touch it while building, then run the finished ruleset on it exactly once and treat that number as the honest one. This is roughly how we built the backtester at Blockcircle, visual rules with costs modeled explicitly and out of sample checks in the flow, because the recurring disaster we kept seeing was gorgeous in-sample curves falling apart within weeks of going live.
A one week plan for your first real test
- Write the ruleset so a stranger could execute it without asking you anything. Entry trigger, stop placement, exit rule, position size. If you catch yourself writing that you will enter when it looks strong, stop and make it mechanical.
- Pick one liquid market and one timeframe, ideally a market whose history you do not remember well.
- Bar replay through six to twelve months and log every qualifying trade in the spreadsheet, including the ugly ones you would love to skip.
- Apply the cost haircut to every trade, real fees plus a slippage assumption. When unsure, lean pessimistic.
- Compute expectancy after costs and the longest losing streak, then ask honestly whether you would sit through that streak with real money.
- Replay a second period you have not seen, same rules, no tweaks, and compare the two results.
- If it survives both, trade it at small size or paper trade for a month before committing anything meaningful.
None of this is as rigorous as a coded backtest over a decade of tick data, and I will not pretend it is. Samples are smaller, fill modeling is cruder, and portfolio effects are hard to test by hand. But a trader with fifty logged, cost-adjusted trades knows more about their own strategy than most people ever learn about theirs, and every step above is doable without writing a line of code. Start with the ruleset on paper, and be more suspicious of the results that look good than the ones that look bad.