The key blocks
- Chronological splitting is a starting point: features, training labels and preprocessing must respect when information became available.
- A clean bias report does not verify every signal or establish that a strategy will make money.
- List fees, spreads, slippage and applicable funding separately; missing data does not establish a zero cost.
1. Draw the timeline before reading the return curve
For a model predicting future markets, mark when data becomes available, a signal is generated, an order is submitted and its outcome becomes known. Scikit-learn's TimeSeriesSplit addresses the risk of training on future observations and evaluating the past. Randomly shuffling dependent market observations can break that chronology. BlockBlah suggests drawing each training interval and its subsequent evaluation interval, then checking the actual generated indices against that drawing instead of trusting a function's name.
A row's timestamp does not establish that every field was already available. A training label based on a future price change becomes known only after its outcome window ends. A signal using closing data also needs a plausible later execution. TimeSeriesSplit's gap excludes samples at the training boundary; it does not inspect publication delays or overlapping labels. Design the interval around the data and prediction horizon, and inspect boundary cases. No universal gap repairs every form of leakage.
2. Split the data before preprocessing learns from it
Leakage extends beyond obvious future prices. Scikit-learn's pitfalls guide says learned preprocessing, such as scaling, imputation and feature selection, must learn its parameters from training data. Apply those learned transformations to the test data. Computing averages or selecting features across the entire dataset before splitting can expose the research to test information. A correctly used Pipeline helps keep preprocessing inside each training round, but cannot rescue input columns that already reveal the future.
Make a card for each feature: source fields, calculation window, earliest availability, missing-value treatment and recomputation procedure. Choose one decision, hide everything after that time, and trace whether all inputs remain obtainable. This is our proposed research exercise, not a completed test. Keep parameter changes in a log too. Once a supposedly reserved test result influences a model change, record that dataset as part of development rather than continuing to describe it as an untouched final exam.
3. Treat diagnostics as evidence with a scope
Freqtrade's lookahead-analysis compares indicators and trading signals across backtests to identify clues of future information use. Its documentation also describes limits: untriggered signals remain unchecked, while some logic depending on the full pair list or limit-order settings can generate false positives. A clean report means no corresponding problem was found under that run's data and configuration. It does not establish that every code path is correct or that reported performance is reliable.
Keep a coverage sheet listing triggered and untriggered entry and exit branches, settings overridden by the diagnostic, and whether a warning can be reduced to one signal. Investigate warnings instead of removing inconvenient observations to obtain a pass. Separately examine whether changing the amount of starting history changes indicator calculations; that is a different question from seeing future data. Preserve evidence for each check, so passing one diagnostic never becomes acceptance of the entire trading system.
4. Expose the cost and execution assumptions
Freqtrade's backtesting documentation applies a specified fee at both entry and exit. Its fill assumptions include execution at the requested price without slippage when that price lies within the candle range. These are separate issues: accounting for commissions does not establish that spreads, queues, partial fills or market impact were simulated. Our worksheet separates modeled conditions, omitted conditions and missing data, then asks how less favorable execution assumptions change the result. A summary saying 'after costs' is insufficient.
For perpetual contracts, record funding sources, timestamps and payment direction separately from transaction fees. Freqtrade's leverage documentation warns that false substitutes for missing historical funding rates make backtests inaccurate. Mark the gap, narrow the evaluable period or disclose a scenario assumption; missing observations are not observed zeros. Cost stress tests reveal which assumptions a strategy depends on. They cannot guarantee an eventual fill price, and funding assumptions should not be silently folded into a fixed commission.
5. Freeze a research version and observe new data
A useful research handoff includes data source and version, timezone, pair selection, code and dependency versions, split indices, parameter-search history, and execution and cost assumptions. This is BlockBlah's proposed checklist. After freezing a strategy, observe subsequently arriving data in simulation and record gaps between signals, intended orders and execution constraints. Simulated observations are still not evidence of real fills. If parameters change again, start another version and identify data already examined rather than presenting the best revised curve as a first prediction.
This original evergreen guide draws on official documentation consulted on November 2, 2026, in Asia/Taipei, not on an event or software release that day. We ran no strategy backtest, paper trading or live trading for this article and claim no returns. It provides neither a strategy recommendation nor personalized investment advice. There is no sponsorship or affiliate link; the cover is a conceptual illustration. Recheck behavior against the actual software version. Historical and simulated results cannot guarantee future performance.
Sources & further reading
For information and education, not investment advice. Crypto assets are volatile. Verify independently.

