GUIDES
How to backtest a crypto trading strategy: a complete walkthrough with free sample data
By TraderWe· Published Jul 23, 2026· Updated Aug 21, 2026· 💬 3
Contents
The usual first obstacle with any backtesting tool is having nothing to test against. Recording
your own data takes days before it becomes useful, which makes for a poor first hour.
This guide removes that. Download one day of real recorded market data from our Downloads board,
put it where the app expects, and run a backtest. Then — the part most guides skip, read the
result correctly, which matters more than producing it.
1. What you need
- TraderWe installed and signed in
- One sample file from the Downloads board. Coinbase spot is a reasonable start because the
symbols are familiar; Binance perpetuals if you want the widest symbol list2. Part 1 — Getting data in
1.1 Download a sample
Open Downloads in the community. There is one post per venue, each with a single file, its
size, and a SHA-256 hash. No sign-in required.
Files run 18 to 42 MB. If a download finishes suspiciously fast, compare the hash before using
it. A truncated database opens as a corrupt file rather than failing loudly, and you will spend
an hour debugging a strategy when the problem is the file.
1.2 Understand the data folder
TraderWe keeps your data outside the application folder deliberately, so that an update never
touches your recordings, settings or trade history. Updating replaces the program and nothing
else.
Inside it:
record/crypto/1s/ crypto_1s_20260812.db spot, per-second
record/crypto/1m/ crypto_1m_20260812.db spot, per-minute
record/futures/1s/ futures_1s_20260812.db perpetuals, per-second
record/futures/1m/ futures_1m_20260812.db perpetuals, per-minute
record/stock/1s/ stock_1s_20260812.db equities
settings.db connected venues, universe, order settings
trades.db every fill, permanently
Each recording is a SQLite database with one table per symbol and 68 columns per row: price,
per-interval buy and sell volume, turnover, trade strength, and ten levels of the order book on
both sides.
1.3 Place and rename
Spot files go in record/crypto/1m/, perpetual files in record/futures/1m/. Create the folder if it does not exist.
Then rename. The app reads the asset class from the folder and the date from the filename, the
venue is part of neither:
- coinbase_1m_20260812.db → crypto_1m_20260812.db
- binance-futures_1m_20260812.db → futures_1m_20260812.db
Because the venue is not in the filename, only one venue can occupy a folder at a time. Swap
the file to test a different one. This is a real limitation and it is on our list.3. Part 2 — Running it
Open Backtest. The date appears in the available-data list. Select it.
Now the strategy. Every strategy has two independent parts and beginners routinely write only
the first.
2.1 The entry
# BUY
if Price > Sma(60):
Buy()
Sma(60) is a 60-tick moving average. On a one-minute file that is sixty minutes.
2.2 The exit — the part that decides your results
# SELL
if ProfitPct >= 2.0 or ProfitPct <= -1.0 or HoldTime >= 900:
Sell()
Three independent ways out: a target, a stop, and a time cap. Any one of them ends the trade.
The time cap is the one people omit and the one that matters most. Without it a position that
neither hits target nor stop sits there indefinitely, occupying capital and hiding the fact that
your entry was wrong. HoldTime is in seconds, 900 is fifteen minutes.
Press run.4. Part 3 — Reading the result honestly
You now have a number. Here is what it is and is not.
It is not an edge
One day is one sample. The same rules on the next day will produce a different number, often a
very different one. A single day tells you the rules execute; it tells you nothing about whether
they work.
The minimum honest test is many days across different conditions, and the useful comparison is
against a deliberately uninformative baseline rather than against zero. If your clever entry
does not clearly beat "enter on almost anything with a sensible exit", your edge is in the exit
rules. Which is worth knowing and much cheaper to find out early.
It is not your fill
The simulator uses the recorded book, but a real order removes liquidity and invites reaction.
The gap between simulated and real grows with your size.
We measured this on the same files you just downloaded. Walking a market order down the recorded
ladder, a $1,000 clip costs between 0.7 and 2.6 basis points against the midpoint depending on
venue. A $25,000 clip could not be filled inside ten levels at all in 65% of minutes on the
thinnest venue. If your backtest fills at the touch, it is describing a market that has infinite
depth at the best price.
It is not the whole market
These files hold one venue's view. For the same symbol on the same day we measured a seven-fold
difference in reported volume between two venues. Volume-based conditions calibrated on one feed
are calibrated to a different market than the one you will trade.
Stale data will flatter you
Between 8.5% and 19% of recorded symbol-minutes had no update for five minutes or more. A
moving average over a partially frozen window is smooth, and a volatility filter reading that
window concludes conditions are calm. Both are artifacts. If your strategy looks unusually good
on thin symbols, this is the first thing to check.5. Part 4 — When nothing happens
No date in the list. The file is in the wrong folder, or the name does not match the
crypto_1m_YYYYMMDD.db pattern exactly.
The run completes with zero trades. Usually the entry condition never becomes true. Loosen
it drastically — if Price > 0: will fire on every tick — to confirm the plumbing works, then
tighten back in steps. This isolates "my condition is too strict" from "my data is not loading".
One specific trap: angle conditions. ChangeAngle(n) is an angle in degrees, so the move it
demands scales with the window. ChangeAngle(300) > 45 asks the change rate to rise about 60
points over five minutes, which does not happen. Widen the window and you must lower the angle.
An error about an unknown name. A factor name is misspelled. The editor marks unknown names
with an ✗ as you type and the same check runs before the backtest starts, so this fails loudly
rather than silently treating the condition as false.
Trades fire but sizes are zero. The computed order size landed below one unit, a small
betting amount against a high-priced symbol. The app now states this on screen with the
arithmetic behind it.6. Part 5 — What to do next
Once the mechanics work, more sample days is not the useful next step. Your own recording is.
Sample data tells you the software works. Your own recording tells you about the market you
actually trade — your venue, your symbols, at the times you trade them. Every number in this
guide came from measuring recordings, and the same questions are answerable in an afternoon once
the data is yours.
Our guide on recording your own market data covers universe selection, disk sizing, and what to
verify on the first day.