📜 Permanent Scientific Registry & DOI: This empirical experiment is permanently registered at CERN Zenodo:
— View CERN Zenodo Record
The question
Is Gueta able to validate a population of strategies without selection bias?
⚠️ Erratum (2026-08-16): after an external audit and cross-checking against the original papers, we published an addendum that corrects the execution model (a loader bug: signals were computed on the open price, not the close — the pipeline is internally consistent, but different from the pre-registered model) and the PBO convention (the published value measured the paper’s “probability of loss”, not its rank-based PBO). Corrected results: 13 → 8 → 7 → 0 → 0 holds; PBO 0.5639 → 0.5639; convention sensitivity: 0.5551 / 0.9782 / 0.6385 — the conclusion (0 survivors) is invariant under every convention. Full details: ADDENDUM-2026-08-16.
This is the first publication of Gueta Research, our public and reproducible research program. Instead of showing a pretty backtest of one hand-picked strategy, we did the opposite: we pre-registered 13 common trading strategies, tested all of them with the same pipeline, the same costs and the same rules, and published the full count at every stage of the funnel. If none survive, that is the answer.
Result: 13 → 0. None of the 13 strategies passed all four gates. That zero is the outcome we pre-registered and publish today.
Methodology (pre-registered)
The full protocol was frozen on 15 August 2026, before execution, in our pre-registration document (funnel-001-pre-registration.md). Nothing changed afterwards: not strategies, not parameters, not thresholds. Any deviation would have invalidated the study and would have to be published as a separate analysis.
Four gates, with thresholds set by the academic literature (Bailey & López de Prado, 2014; Bailey et al., 2017):
| Gate | Criterion | Threshold |
|---|---|---|
| G1 IS/OOS | OOS net return @ 2 pips > 0 AND OOS Sharpe > 0 | strict > |
| G2 WFO | Cumulative walk-forward net return @ 2 pips > 0 | strict > |
| G3 DSR | Deflated Sharpe Ratio | ≥ 0.95 |
| G4 PBO | Probability of backtest overfitting (CSCV) | < 0.50 |
A strategy is only labelled “survived the v1 (2026-08) funnel” if it passes all four. Nothing in this project is called “validated” without passing the full funnel.
Data and execution
- Instrument: EURUSD daily (OHLC), full window 2020-01 → 2025-12 (1,561 bars).
- Split: IS 2020-2023 (first 50% temporally) · OOS 2024-2025 (last 50%).
- Execution: signals at bar
tclose, fills at that same bar’s close, position from the next bar. No lookahead: the engine was verified by reproducing the Phase A results (exact 3/3 match) before running the funnel. - Costs: 0 pips (control) and 2 pips per side (realistic EURUSD spread), charged per side on each position change.
Trial registry: the 13 strategies
| # | Strategy | Rule (deterministic, D1) | Parameters |
|---|---|---|---|
| 1 | SMA Cross | Long if SMA5 > SMA100, short otherwise | 5 / 100 |
| 2 | RSI2 | Long if RSI(15) < 2, short if RSI(15) > 98 | 15 / 2 / 98 |
| 3 | Momentum | Long if ROC(60) > 0, short if ROC(60) < 0 | 60 |
| 4 | ATR Channel | Close breakout ± 1.5·ATR(14) | 14 / 1.5 |
| 5 | SuperTrend | Classic Chande–Kroll | 10 / 3 |
| 6 | Bollinger Reversion | Close below lower band (20, 2), exit at mean | 20 / 2 |
| 7 | MACD Trader | Long if MACD line > signal | 12 / 26 / 9 |
| 8 | Ichimoku Cloud | Close above/below the cloud | 9 / 26 / 52 / 26 |
| 9 | EMA Cross | Long if EMA20 > EMA50 | 20 / 50 |
| 10 | Mean Reversion (RSI) | RSI(14) < 30 / > 70, exit at 50 | 14 / 30 / 70 |
| 11 | Volume Profile proxy | Anchored POC proxy (HLC3, 20 bars) | 20 / 0.3 |
| 12 | Breakout Channel | 20-bar high/low breakout | 20 |
| 13 | Range Channel | Close breakout ± 0.1·ATR(14) | 20 / 0.1 |
The multiple-testing family is N = 14: it includes Donchian as an already-tested hypothesis (it failed MT5 parity with 0 trades; it still counts as a trial). The family was fixed before execution and admits no retroactive additions or removals.
Execution and cost assumptions
- ATR and RSI use Wilder smoothing (documented; the Wilder-vs-SMA divergence was already analysed in Phase B).
- The Volume Profile proxy (#11) is explicitly labelled a proxy: the daily dataset has no tick volume. If it ever does, that requires a new pre-registration, not an adaptation.
- Commission and slippage are zero inside the funnel: a more conservative cost model would only have reduced survival further.
Out-of-sample and walk-forward protocol
- OOS: the strategy is evaluated strictly on 2024-2025, data never used to tune anything (parameters are fixed by pre-registration).
- WFO: rolling 2-year train / 6-month test windows, with the same pre-registered parameters; we report the accumulated return of the OOS windows.
DSR and PBO: the overfitting control
These two metrics are the heart of the research, because they answer the underlying question: how much of the apparent performance is noise? Neither is presented alone: each carries its full configuration, because a number without configuration is not evidence.
- Deflated Sharpe Ratio (DSR) — Bailey & López de Prado (2014): inflates the observed Sharpe with the penalty for testing 14 strategies (family N = 14, fixed before execution). Configuration: daily OOS Sharpe @ 2 pips, kurtosis correction (raw, not excess), expected best Sharpe under N=14. The best individual result (Bollinger Reversion) had a DSR of 0.38, far from the required 0.95. With N = 14, the best expected Sharpe by pure chance is too high for any of these rules to beat it with significance.
- Probability of Backtest Overfitting (PBO) — Bailey et al. (2017), CSCV with S = 16 contiguous blocks (97 bars per block, partial final block excluded), 12,870 exhaustive IS/OOS combinations, selection rule = best IS Sharpe per combination (deterministic tie-break). Result: 0.5639. Interpretation: in this sample, a selector that picks the best strategy in-sample has more than a 50% probability of losing its edge out-of-sample. It is a family-level metric (identical for all 13 strategies), and it quantifies the probability that the best backtest is overfitted — it is not, by itself, proof that no edge exists: that weight is carried by per-trial DSR and the G1–G3 gates.
Every statistic in this post ships with its D8 checklist (formula → primary paper → edge cases → sensitivity), so the number can be independently checked against its source — the standard that any published backtest must now meet.
The full funnel: 13 → 0
| Stage | Criterion (exact definition) | Survivors |
|---|---|---|
| 13 | All pre-registered strategies, run with fixed parameters and the same pipeline | 13 |
| G1 | OOS net return @ 2 pips > 0 AND OOS Sharpe > 0 (strict) | 8 |
| G2 | Walk-forward cumulative return @ 2 pips > 0 | 7 |
| G3 | DSR ≥ 0.95 (deflation with family N = 14) | 0 |
| G4 | Family PBO (CSCV S=16) < 0.50 | 0 |
What each number means: the 13 is the complete pre-registered registry. The 8 are those that passed the out-of-sample test with costs. The 7 are those that also passed walk-forward. The first zero is per-strategy: none withstood the statistical deflation (the best, Bollinger Reversion, reached DSR 0.382 — far from 0.95). The second zero is family-level: the overfitting probability of the set (0.5639) already exceeds the pre-committed threshold, so no strategy can pass G4 — the funnel ends there by design.
The 8 that passed G1 (SMA Cross, Momentum, Bollinger Reversion, Ichimoku, EMA Cross, Breakout, Range, and SuperTrend only to G1) showed small positive OOS returns (+0.85% to +6.28% @ 2 pips), but none withstood the statistical deflation.
Why each strategy failed (full table in the report)
| Strategy | Params | OOS ret @ 2 pips | WFO | DSR | Failed at |
|---|---|---|---|---|---|
| RSI2 | 15/2/98 | 0.00% (0 trades) | 0.00% | — | G1 |
| ATR Channel | 14/1.5 | −1.90% | −10.61% | 0.030 | G1 |
| MACD Trader | 12/26/9 | −15.15% | −22.66% | 0.000 | G1 |
| Mean Reversion (RSI) | 14/30/70 | −0.10% | +10.20% | 0.042 | G1 |
| Volume Profile proxy | 20/0.3 | −8.42% | −12.31% | 0.005 | G1 |
| SuperTrend | 10/3 | +1.82% | −1.68% | 0.066 | G2 |
| SMA Cross | 5/100 | +2.66% | +17.37% | 0.077 | G3 |
| Momentum | 60 | +1.92% | +3.79% | 0.067 | G3 |
| Bollinger Reversion | 20/2 | +6.28% | +7.91% | 0.382 | G3 |
| Ichimoku Cloud | 9/26/52/26 | +2.34% | +8.17% | 0.073 | G3 |
| EMA Cross | 20/50 | +3.95% | +11.14% | 0.097 | G3 |
| Breakout Channel | 20 | +1.52% | +16.05% | 0.062 | G3 |
| Range Channel | 20/0.1 | +0.85% | +5.81% | 0.054 | G3 |
Causes: RSI2 — extreme thresholds never triggered on daily EURUSD (zero is zero: no trades means no evidence). MACD — the worst performer (−15.2%, Sharpe −1.11). ATR Channel and VP proxy — OOS-negative at both cost levels. SuperTrend and MR(RSI) — OOS-positive but negative cumulative walk-forward. The remaining 7 — OOS- and WFO-positive, but indistinguishable from noise after correcting for multiple testing. The full table with IS, cost sensitivity and MT5 parity status is in funnel-001-results.md in the research repository.
Negative results are the finding
Three conclusions, all pre-committed and now published. With exactly the scope the evidence allows — no more:
- 13 → 0, with precise scope. Within this cohort of 13 pre-registered simple strategies, on this dataset (daily EURUSD 2020–2025), under these execution assumptions (bar-close, 2 pips per side), these cost scenarios (0/2 pips) and this validation protocol (G1–G4, N=14), no strategy passed the final criterion. This is not a claim that “no simple strategy is profitable” — outside this cohort, this dataset or this protocol, anything is possible. It is a claim about this experiment, and that is precisely the point: claims require experiments with this shape.
- The spread is not the main killer. The average return of the 8 G1 winners goes from +3.1% to +2.3% when 2 pips are added. What kills is deflation (G3) and family overfitting (G4).
- Selection bias is now quantified, not assumed. With its full configuration (family N=14, S=16 blocks, 12,870 combinations), PBO = 0.5639 means the individual backtests of these rules establish no real edge without family-level correction. If a signals seller shows you the backtest of a single strategy, this research explains exactly why that is never enough.
At Gueta we prefer to publish an honest, reproducible zero over an imaginary alpha. That is our public answer to the question we started with.
Reproducibility
Data limitation, disclosed rather than hidden: the dataset is from Yahoo Finance and cannot be redistributed (terms of service). That is why public reproduction runs on a user-supplied CSV (Date,Open,High,Low,Close) verified against the published sha256 checksums. The protocol, thresholds, engine and per-trial results are 100% public; the data are not. An identical CSV reproduces the published counts; a different CSV runs the same contract and publishes its own honest result.
- Public repository: github.com/guetaquant-byte/guetaquant-research — pre-registration, engine, immutable trial ledger (tag
v1.0.0-funnel-001),REPRODUCIBILITY.md(full procedure in under 15 minutes) andREPRODUCTION_LOG.md(independent reproduction pass: 0 differences, byte-identical CSVs). - Research certificate:
CERTIFICATE_001.md(+ JSON) — Experiment ID | Data | Code | Protocol | Trial Family | OOS | WFO/CPCV | DSR | PBO | Costs | Execution Model | Reproduction Status. Evidence level: E3 (WFO/CPCV) + E4 (independent reproduction); E5 (execution parity) and E6 (live fidelity) are not claimed. - Effective trial count: raw family N=14 (fixed), N_effective ≈ 3.6 (spectral method over correlations; the 13 variants are highly correlated — max. 0.90). DSR deflation was applied with the raw N: conservative by design.
- Data: user-supplied (Yahoo ToS); checksums in
results/funnel-001/CHECKSUMS.txt. - No randomness in execution: CSCV is exhaustive (12,870 combinations) with a deterministic tie-break.
- Open invitation: if you are a quant and want to re-run this funnel on your own data, the repository’s issue tracker is open. An independent reproduction is worth more than any claim of ours.
Frequently asked questions
Does this mean quantitative trading doesn’t work? No. It means these 13 simple rules, on this instrument and window, show no edge after correcting for multiple testing. The research doesn’t prove no strategies with an edge exist: it proves that claiming an edge requires exactly this kind of evidence. That is the standard we want to set.
Why publish a result where everything fails? Because the negative result is the most informative one and the one the industry hides. We pre-registered 13 → 0 as a valid outcome before executing. Hiding it would have been publication bias, which is precisely what this funnel fights.
Are the three “survivor” strategies from earlier phases still valid? They are not labelled validated. SMA Cross, RSI2 and Momentum passed MT5 parity (Phase B), but in this v1 funnel with fixed thresholds: RSI2 ended with 0 trades, and SMA Cross and Momentum did not pass the DSR. The honest label is: tested, not validated.
Can I reproduce the study with my own data? Yes. The engine accepts a CSV with columns Date, Open, High, Low, Close. The exact instructions are in the research repository. Reproducibility does not depend on our data: it depends on the protocol.
Is this an investment recommendation? No. Gueta Quant is an educational platform. This research is academic and demonstrative in simulation; it does not constitute financial advice, operational signals or promises of profitability (Decreto 2555 de 2010).
Reproducibility and sources: protocol pre-registered 2026-08-15 (docs/research_2026-08/funnel-001-pre-registration.md), full results 2026-08-16 (docs/research_2026-08/funnel-001-results.md), engine and input data documented in the public repository guetaquant-byte/guetaquant-research (funnel-001/). Statistical thresholds per Bailey & López de Prado (2014) and Bailey et al. (2017). OHLC data are not redistributed (Yahoo Finance terms); the engine accepts any CSV of the same schema.
Por