How the research works
Every strategy on qkt Labs goes through the same automated research pipeline before it can be listed. Nobody types a result in by hand, including us. This page explains every step, so you can judge the evidence for yourself.
The pipeline, step by step
- Upload. The strategy file is stored under a fingerprint (SHA-256) together with the seller's declared number of variants tried. Nothing about it can change later without becoming a new version.
- Static check. The qkt engine parses the file; a strategy that does not compile never reaches a backtest.
- Full runs. The whole test window is replayed tick by tick at $25k, $50k and $100k, each a separate run with the pinned cost profile.
- Walk-forward. Rolling windows: a year of history, then the next quarter the strategy has not seen, stepped through the whole window.
- Cost stress. The full run repeated with commission, slippage and swap at 1.5× and 2×.
- Significance. The deflated Sharpe probability, from daily returns and the declared number of variants.
- Publishing gate. Every check below is applied automatically. One failure and the strategy is not listed; the failure report goes privately to the seller.
- Publish. Metrics, charts, the monthly table, the per-symbol breakdown, correlations with other listings and the research paper are generated from the same reports, and the reports themselves are kept with their fingerprints.
Why you can check it yourself
- Buyers receive the exact strategy file, the exact cost profile, and every raw report the pipeline produced, each with its SHA-256. Re-running the file on the same data with qkt gives the same trades.
- qkt, the engine every test runs on, is open source (Apache-2.0), so how fills, costs and stops are simulated is public.
- The in-sample window is public on every listing; the out-of-sample window, walk-forward and cost stress are included with the strategy, so what you pay for is the evidence the strategy never saw while it was being built.
What every backtest includes
Every listing is tested with the same command. Commission, spread, slippage and overnight swap are all charged by default: nothing here is optional or chosen by the seller.
qkt backtest strategies/your-strategy-v1.qkt \
--from 2021-01-04 \
--to 2025-12-31 \
--instruments instruments.yaml \
--config labs-backtest-100000.yaml \
--broker mt5-sim \
--execution mt5-realistic \
--starting-balance 100000 \
--report-dir ./out| --broker mt5-sim | Fills every order at the real bid (sells) or ask (buys) of the tick it happens on, so the spread is paid on every trade; sizes are rounded to the broker’s lot steps. |
|---|---|
| --execution mt5-realistic | Adds a 250 ms delay before an order reaches the market, the instrument’s slippage on each fill, and the broker’s minimum stop distance. |
| --instruments instruments.yaml | The pinned cost profile: commission per lot, slippage, overnight swap and contract specs. Without it commission and swap would be zero. |
| --config labs-backtest-100000.yaml | The qkt settings every Labs run uses: qkt’s fixed-dollar daily-loss halt off (the publish gate judges drawdown) and a per-order size cap of 30× the account, so the result does not depend on a limit that binds at one account size and not another. |
| --starting-balance | The account size of the run: $25k, $50k and $100k are separate runs, because small accounts hit lot minimums. |
| --from / --to | The whole test window. The last 20% of it is the out-of-sample period the strategy never saw. |
# instruments.yaml: the pinned cost profile a listing is tested with (example values).
instruments:
- qktSymbol: BACKTEST:XAUUSD
contractSize: 100 # ounces per lot
volumeStep: 0.01 # smallest lot increment the broker accepts
volumeMin: 0.01
commissionPerLot: 7.0 # $ per lot, charged on every fill
slippagePoints: 3 # points lost on each fill, on top of the spread
swapLongPoints: -32.4 # overnight financing per long lot (negative = a charge)
swapShortPoints: 14.1 # overnight financing per short lot (positive = a credit)
swapTripleDay: WEDNESDAY # rollover charged three times on this dayThe cost stress re-runs the same command with commission, slippage and swap charges at 1.5× and 2×. The spread is never scaled: it is always the market's own, read from the ticks. Each listing shows its own profile, in full, under its Code tab.
Tick replay, not bar approximations
Each backtest replays recorded bid/ask ticks through the qkt engine's realistic execution model: orders fill at the bid or ask with a fixed latency, stops and take-profits trigger on the tick that crosses them, and position sizes respect the broker's volume steps and minimums. For a CFD, shortcuts that estimate fills from candles are never used for listed results.
Futures and options are the exception, and a listing says so on its page. qkt has no tick replay for a continuous future, so a future is replayed on bars with qkt's exchange simulator (executable price, the contract's fees and slippage, rolls charged as costs, margin enforced). An option is replayed on stored option chain snapshots, filling at the next snapshot's bid or ask. These are approximations of live trading, and the page names which one a listing used.
A cost profile the seller cannot choose
Commission, slippage and overnight swap come from a pinned instrument file taken from a real broker account. The same file is used for every strategy of that market, and buyers receive the exact file a strategy was tested with.
Three account sizes, one continuous run each
Every strategy runs from start to finish at $25k, $50k and $100k. Small accounts can skip trades that would fall below the broker's minimum lot, so results are shown separately for each size.
In-sample and out-of-sample
The last 20% of the test window is held out as out-of-sample. The strategy never saw it while it was being built, which makes it the fairest test of whether the edge carries forward: a strategy must be profitable there, at every account size, to be listed.
Walk-forward
The strategy is re-tested on rolling windows: 365 days of history, then the following 90 days it has not seen, stepping forward 90 days at a time. Walk-forward efficiency is the average out-of-sample Sharpe ratio divided by the average in-sample Sharpe ratio.
Cost stress
The full backtest is repeated with costs multiplied by 1.5× and 2× (commission and slippage scaled up, overnight charges scaled, credits left alone). A listed strategy is still profitable at 2× costs.
Deflated Sharpe probability
If you try enough variations of an idea, one will look good by luck. The deflated Sharpe probability (Bailey & López de Prado, 2014) estimates the chance that a strategy's Sharpe ratio reflects skill rather than the best of many tries, using the number of variants the seller declares. It is shown on every listing and lowers the price when it is weak; it does not block a listing on its own.
What a strategy must pass to be listed
- Net profit over the whole window, at every account size
- Net profit out-of-sample, at every account size
- Maximum drawdown no deeper than 50%, at every account size
- At least 100 trades in total and 30 out-of-sample
- Walk-forward efficiency of at least 0.2, with at least half the folds profitable
- An out-of-sample profit factor across walk-forward folds of at least 1.25, over at least 4 folds
- Still profitable with costs doubled
- No more than 5% of orders refused by the broker at any account size
- Every report file matching the fingerprint the engine recorded when it wrote it
The 50% drawdown ceiling is deliberately wide: some listings are high-risk, high-return strategies. Every listing shows its drawdown, so you can judge that risk yourself.
How the price is set
The price is calculated from out-of-sample results: return relative to drawdown, reduced when the evidence is thin (few out-of-sample trades, a weak deflated Sharpe probability, low walk-forward efficiency, or weakness under doubled costs). It is never set by hand.
Limits you should know about
- These are simulations. Live trading adds slippage, outages and broker differences no backtest captures.
- Simulated stop orders fill at their trigger tick; in live markets stops can fill worse, especially around news.
- Drawdown for the whole test window comes from the engine's own tick-level record. For the in-sample and out-of-sample windows it is measured from sampled equity and may slightly understate the deepest intraday dip.
- Past performance, simulated or real, does not guarantee future results.