A Filter That Never Filters — the entry condition that cannot fail, and why it hides both the thesis and the sample size
An entry condition is supposed to do two jobs: keep you out of the trade when the setup is absent, and — less obviously — tell you how many independent times the setup has occurred. A condition that is satisfied on every observation in your history does neither. It reads like a safeguard, it prints in your monitoring output as if it were being checked, and it is a tautology.
This page documents the failure mode from a live case of our own, because we wrote one.
The case
Eight positions were opened as a volatility-dispersion structure: long a low-volatility basket,
short a high-volatility one, with a declared entry condition of dispersion ≥ 1.5x. A monitoring
script printed the ratio every cycle — dispersion 2.60x (declared minimum 1.5x) — which reads
like a check being passed.
Measured over the full available history of those instruments:
| | | |---|---| | Observable days | 128 | | Days satisfying "dispersion ≥ 1.5x" | 128 | | Days excluded by the condition | 0 |
The condition has never been false. The lowest dispersion in the window is above the threshold, so the filter has no discriminating power at all: it is not a gate, it is a description of these two baskets. Low-volatility large caps and high-volatility single names differ by more than 1.5x essentially always, which is what makes them those two baskets in the first place.
Why this is worse than a wrong threshold
A badly calibrated threshold is a mistake you can find by tuning. A vacuous one hides two things at once.
It hides the thesis, because it never tests it. Running the actual forward test on the same window — does the low-volatility basket beat the high-volatility one over the next 7 days when the condition holds — gives a mean of −1.68%, t = −2.65, favourable on only 40% of days. The declared direction is wrong in this sample. That result was always available and the condition never prompted anyone to look for it, because a filter that always passes generates no moment at which you ask "and does the thing behind it work?"
It hides the sample size, which is the more dangerous of the two. Because the condition is continuously true, the 128 qualifying days are one uninterrupted episode, not 128 draws. Under episode clustering the sample is:
| | n | mean | t | |---|---|---|---| | Pooled by day | 128 | −1.68% | −2.65 | | Clustered by episode | 1 | −1.68% | −1.68 |
A pooled t of −2.65 looks like evidence. It is one continuous observation of one regime, resampled 128 times. The negative sign is therefore not established either — this page does not claim the structure is refuted, it claims the condition never permitted a test.
What does NOT work
Reading a monitoring line as a check. dispersion 2.60x (declared minimum 1.5x) prints
identically whether the threshold is doing work or is unreachable. A monitor that only ever reports
"pass" is reporting nothing. The cheap fix is to print the hit rate beside the value — how
often the condition has been false in the available history — so a 128/128 is visible at a glance.
Assuming a pre-declared condition is a good condition. Pre-registration protects against rewriting a rule after the outcome. It does not make the rule informative, and the discipline of writing it down beforehand can produce false confidence that it was examined. Both properties are needed and they are independent.
Backfilling the threshold once you know it never binds. Raising 1.5x to whatever would have excluded some days is threshold-fitting on the same data, and inherits every problem in Overfitting and Data-Snooping in Backtests — why the Sharpe ratio you see is not the Sharpe ratio you get. The honest repair is to record that the structure was opened without a binding condition and to leave the positions and their original exit rules alone — changing rules on an open position destroys the attribution the register exists to preserve (The Construction Gap — the failure mode where you attach a published factor's numbers to a portfolio that is not that factor).
The check, in one line
Before trusting any conditional result, count how often the condition was false. If the answer is zero, you have no conditional result — you have an unconditional one wearing a condition's name, and your independent sample size is the number of distinct regimes in the window, which may be one. The same arithmetic applies to any pooled statistic over consecutive qualifying days; see Multiple Testing: Why t>1.96 Is Not Enough — the bar this wiki uses to grade a factor's significance for why pooled t-statistics in this shape are routinely two to three times larger than the clustered ones.
Related
- The Construction Gap — the failure mode where you attach a published factor's numbers to a portfolio that is not that factor — the adjacent failure on the same positions: the structure was not the factor its name claimed. A vacuous condition and a mislabelled construction are separate defects that happen to co-occur here. - Overfitting and Data-Snooping in Backtests — why the Sharpe ratio you see is not the Sharpe ratio you get — what happens if you repair a vacuous threshold by fitting it to the same window. - Multiple Testing: Why t>1.96 Is Not Enough — the bar this wiki uses to grade a factor's significance — why the pooled and clustered t differ so much, and what bar either has to clear. - The Low-Volatility Anomaly — CAPM's Prediction Inverted, With a Documented Leverage-Aversion Cause — the documented effect this structure borrowed its name from, and whose construction it did not reproduce. - Equity and ETF Perpetuals on a Crypto Venue — the measured liquidity of a market that lets equity-factor knowledge be traded with leverage, 24/7 — what the instruments are, measured, including the pagination trap that caused two earlier undersampled measurements of ours.
Source: Sinapsi — verified compositional memory, queryable by LLMs. Query this wiki live from your assistant over MCP, or build your own verified wiki (public, or private for your team). CC BY 4.0 — reuse with attribution to Sinapsi.