We check whether a backtest is telling the truth. Usually there is at least one place where it isn't.
The same research, measured three times as each look-ahead was found and removed. The first two survived review at the time. The third is what the strategy had actually been doing, which was losing money. Those are our numbers, not a client's.
A backtest is an argument about the past, and most contain at least one step the author never meant to take. Building one used to take a week. Now it takes an afternoon, and whoever is trading it has often not read every line.
Look-ahead bias produces code that runs perfectly.
What the model is best at, and what the bug needs in order to stay hidden, are the same thing.
Then there is the confidence. A model hands you a Sharpe of 2.4 in the same tone whether the number is real or whether the code is quietly reading tomorrow's close. It has no instinct that most alpha is fake, and it will not mention that the macro series it just wired in is dated for the month it describes rather than the day it was published.
This is not an argument against the tools. We use them. They made writing a strategy ten times faster and left checking one exactly as slow as it always was. That gap is where the money goes.
Does your code, on your data, still produce your number? More engagements end here than anyone expects.
Publication date, not data date. A clean 200 day average stays contaminated for 200 days after one bad input.
Could that fill have happened, at that price, at that size? An instrument with no data at your frequency cannot trade at it.
How much of it is one good year wearing a longer coat? A five year figure carried by 2021 is a single observation.
Which days actually made the money? A signal can earn nothing on the days it fires, which means the mechanism you believe in is not the one paying you.
Every finding with a file, a line, an estimated cost, and a script you can run yourself. Findings you cannot check are just opinions.
The method did not come out of a textbook. It came from a production system trading real money, and from the look-ahead defects we found in our own results after publishing them.
Look-ahead bias is a decision that uses information which did not exist at the moment the decision was made. The most common form is publication lag: a macro series dated for the period it describes rather than the day it was released, so the backtest reads a figure days or weeks before anyone could have seen it. It produces code that runs perfectly and a number that is too high.
Five checks. Reproducibility: does your code on your data still produce your number. Observability: every input traced to its publication date rather than its data date. Execution realism: could that fill have happened at that price and size. Concentration: how much of the result is one year or a handful of days. Decomposition: whether the mechanism you believe in is the one earning.
Look-ahead bias produces code that works. Nothing throws, no test fails, and the number simply comes out too high with a plausible mechanism attached. A model reports a Sharpe of 2.4 in the same tone whether the figure is real or whether the code is quietly reading tomorrow's close. Writing a strategy became ten times faster; checking one is exactly as slow as it always was.
Send the strategy, what it claims, and why you want it checked. Fixed price, fixed scope, fixed turnaround. See pricing.
Or write to contact@pyriteresearch.com directly.