Backtest desk
Testing 13 strategies on data they never saw
Each pair runs its own strategy at a fixed 3:1 reward to risk. Every result below comes from hourly prices with spreads and fees charged. The last 146 days of prices were locked away while the strategies were tuned, so those numbers are the honest ones.
Scoreboard
Results on unseen data (the locked holdout). Dots show the five tuning periods: slate made money, red lost. Tap a pair to open its desk.
| Pair and strategy | Last | Now | Unseen trades | Win rate | Avg win : loss | R per trade | Tuning periods | Verdict |
|---|
Live signals
Loading
Where price could be
Ranges come from current volatility, with fat tails learned from the tuning data. Odds come from a small model trained on the tuning data. Both were scored on the 146 unseen days. That score sits beside each line.
Equity in R, every trade
Cumulative result in risk units. The shaded stretch is the unseen holdout.
Recent trades
| Entered | Side | Entry | Exit | Result | Exit |
|---|
Against your target
Results
| Tuning data | Unseen data |
|---|
Refine
Move a setting and the backtest reruns instantly.
Evolve
Mutates the settings and scores each version on the tuning data and its neighbours. A change is kept only if it is clearly better and still profitable across more periods. The unseen data is never used to choose.
What could move these markets
Further out
Built into every backtest: entries pause for a set number of hours around Fed decisions and US jobs reports (the News blackout setting). Other events above are not filtered, so size down around them.
Read this week against the live setup
Claude reads the headlines and calendar here alongside the pair you are viewing. It cannot browse, so it only knows what this page knows.
Why 80% at 3:1 is the wrong target
At 3:1 a strategy breaks even winning just 25% of trades. Winning 80% at 3:1 would earn about +2.2R per trade, which turns 1% risk into roughly 2% gained on every trade, every time. No public strategy has done that for long. When a backtest shows it, the usual causes are lookahead (using a price before it existed), tiny samples, or settings bent to fit the past.
So JohnnyTrade aims at what can be reached and kept: positive R per trade on data the strategy never saw, profitable in most periods, with enough trades to mean something. A small honest edge at 3:1 compounds. A fake 80% blows up the first month it meets live prices.
How the tests work. Hourly candles up to 14 November 2026: forex from January 2024, gold and silver from June 2024, BTC, XRP and SOL from November 2024, PI from February 2025. The last 146 days, from 21 June 2026, are the locked unseen data for every pair. Signals are read at a bar's close and filled at the next bar's open. If a bar touches both stop and target, the stop counts first. Gaps through a stop fill at the open. Each trade pays a spread (forex and metals) or fees and slippage (crypto, 0.25% to 0.45% round trip).
How evolve avoids fooling you. Everything before 21 June 2026 is cut into five periods for tuning. The last 146 days are locked. A new version must beat the old one on the tuning data and score well when every setting is nudged up or down. It must also keep most of its trades and stay profitable in at least as many periods. Only then does it replace the champion. The unseen numbers are reported, never optimised.
Your own looks count too. Each time you keep an evolved version after seeing its unseen result, those numbers lose a little honesty. The real test is new data after 14 November, which a nightly refresh can add.
Data. Forex majors, gold (COMEX GC futures as the spot proxy, with roll gaps) and silver (SI futures) from Yahoo Finance. BTC, XRP and SOL from Coinbase. PI from OKX PI-USDT. Fed dates from the Fed calendar; jobs-report dates follow the first-Friday rule with the 2025 shutdown delays, so treat them as approximate.
The conditions score. A small model gives every signal a second opinion from eight things measured when the signal fires: trend, recent momentum, volatility against its norm, RSI, hour of day, position in the recent range and stop width. It was trained on tuning data only. The rule for using it was written down before the unseen data was looked at: skip the lowest-scored 40% only if that helped inside the tuning data and also helped on the unseen 146 days. It passed, narrowly. Across all pairs the kept unseen trades averaged +0.04R against -0.04R for all of them. Gold went from +0.20R to +0.29R keeping 41 of 46 trades, EUR/USD from +0.10R to +0.14R keeping 29 of 32, silver kept all 16. Those are small samples, so skipped signals are still tracked live and the score has to keep earning its place.
Live prices. When the Cloudflare Worker runs, forex, metals and oil stream from OANDA through a Durable Object. Crypto streams straight from Coinbase and OKX. The header shows the measured delay from the market's timestamp to this page, usually well under a second. The live read runs each strategy's own rule as if the current hour closed now. That answer is provisional until the hour closes. It says so plainly, because signals that change before the close are how indicator products repaint.
News memory. Every headline is stored with what gold, EUR/USD, USD/JPY and bitcoin did in the 1, 4 and 24 hours after it, in ATRs. New headlines are matched to similar past ones. Both the AI's call and the memory's call are then scored against what happened next. Those hit rates sit above the headlines, so you can see whether either one beats a coin flip.
Run it yourself. The same strategy scripts power this page and a command line kit: node tools/backtest.js, node tools/evolve.js, node tools/test.js (checks for lookahead in all 13 strategies).
This is research software, not financial advice. Past results, including unseen-data results, do not promise future ones.