---
name: quanterlab-research-hygiene
description: The traps of quantitative backtesting, stated so a model recognises them before it commits rather than after. Use before designing or running any study on QuanterLab, on the desktop or through the hosted connector, and again before any result is reported. Triggers on any request to test a strategy, screen a universe, walk a study, or explain why a result looks good.
---

# QuanterLab research hygiene

Every trap below has produced a published result that was not there. Read the list before the design is fixed, not after the number is in hand. When a trap applies, say so in the plan, in one sentence, and say what the design does about it.

## Look-ahead, in every form it takes

Look-ahead is any number used at a date when it was not yet knowable at that date. It never announces itself; the result simply improves.

- **Restated fundamentals.** A statement as it stands in today's database is not the statement the market saw. Use point-in-time fundamentals gated on the acceptance date of the filing. If the source has no acceptance date, treat the fundamentals as unusable for that period and say so.
- **Index membership as it is today.** Screening today's constituents over past years reads the survivors' returns back into history. Use the membership as of each anchor. QuanterLab's S&P 500, NASDAQ-100 and Dow 30 universes resolve point-in-time; the European and Asian samples are current members only, and a study on them must say that in its limitations.
- **A signal computed on a close and traded at the same close.** The close that produced the signal was not tradeable at that close. Enter at the next session's price, or later, and say which.
- **Full-history series clipped by hand.** A moving average computed over the whole series and then sliced is not the same as one computed on data ending at the anchor when the window touches the anchor. Compute on data that ends at the anchor. The engine's price loader ends every series there; a custom primitive passes the anchor and reads nothing past it.
- **The wall clock.** `today` is never a date in a study. Dates come from the anchor.
- **Parameters chosen after looking.** A lookback picked because it produced the best curve is look-ahead across the whole sample.

## Survivorship

If delisted names are absent, the universe is a fiction and every long-only result is inflated. Point-in-time membership includes the names that later left. When the price source drops delisted tickers (QuanterLab's vendor serves no delisted prices), a walk that reselects from point-in-time membership still holds them at the anchor and loses them when they leave; state the count of names that could not be priced, and never fill them.

## Costs and financing charged as real

A result with no costs is a result with a missing term. State the spread, the commission, the borrow cost of any short leg and the financing of any leverage, and charge them every time a position changes. A leveraged or hedged book that is not charged its financing is the version everyone else publishes; charging it is what separated the platform's All Weather test from the usual one. If costs are not modelled, say so in the first paragraph of the limitations, not the last.

## Multiple testing, stated loudest

A model will try forty configurations and report the best one as a finding. It is not a finding; it is the maximum of forty draws.

- Every configuration tried is a trial, including the ones that were abandoned, including the ones that were "just a check".
- The number of trials is declared before the result is read, and the pooled Sharpe is deflated against it. On QuanterLab a registered walk seals the claim before the run, and a family declaration on the paper carries the count.
- A study that cannot state its trial count reports itself as unrecorded. That word is a warning to the reader, not a formality.
- One registration per window. A re-registration after a result is seen is a new trial and is counted as one.

## The limits of the data, checked before design

Before the design, not after the disappointment:

- Is there point-in-time membership for this universe? For European indices there is not; a study on them is on current members and says so.
- Is the market thin enough that a monthly reselect of the book moves the price? Then the costs are not the quoted spread.
- Are the fundamentals point-in-time with acceptance dates? If not, the fundamentals lane is closed for that period.
- How far back does the price history reach, and does the first window sit on data that exists? A fund born in 2006 has no 252-session window in early 2007; a window that cannot be computed is excluded and printed as excluded, never filled.

## What a clean report says

One line each, in the plan and again in the write-up: the anchor rule, the membership rule, the entry timing, the cost model, the trial count, and the data limits that applied. A reader who finds all six can trust the number. A reader who finds five knows which one is missing.
