Oscillator with ADX filter (10/50, ADX<30)
A two-average oscillator times price swings well when the market goes nowhere, and takes a beating when a trend exists, because it then keeps selling the rally and buying the dip. Measuring trend strength with an index that ignores direction lets you trade the oscillator only in the periods where it works and stand aside in the others — without ever having to predict which way the trend will go.
Measured in crypto — Binance spot · 540 pairs, delisted ones included · 0.2% per round trip
- ✗invariance
- ?costs
- ?placebo
- ✓benchmark
- ?out of sample
- ?multiple testing
At its worst the account was worth 66% less than its own best previous moment, and it spent 1,538 days below that peak.
What was measured
How many of those trades actually count
What it paid, before any deductions
Why it did not pass — it died here · where the result came from
What would have happened to the money
The account would not fit every signal
The effect sits at the start of the period, not the end
What this result does NOT say
- One market, one universe
- Measured on 540 spot cryptocurrency pairs, delisted ones included. It says nothing about futures, equities or indices, nor about how the same technique behaves in another market.
- One window of time, not every window
- The measured period runs from 2017-08-17 to 2026-07-28. A market moves through regimes, and a technique can work in one and fail in another — the card measures the regimes that fit inside this window, not the ones still to come.
- One cost structure
- The cost charged is 0.10% per leg, in and out. Anyone paying more than that gets a worse result, and anyone paying less gets a better one — the verdict holds for this fee.
- One exit rule
- The trade was closed by: the technique itself (held until the opposite signal). The same entry measured with a different exit is a different strategy, and can earn a different verdict — it happens in this archive.
- The number of trades is not the sample size
- There are 74,133 trades, but only 453 independent market episodes: a single move fires the technique across dozens of assets at once, and counting those as separate observations inflates any result. It is the smaller number that governs the arithmetic. With 453 episodes, what the data supports is a range from -0.28% to +1.35% per trade — the published average is the centre of it, not the exact measurement.
- Daily bars
- Measured at the daily close. Nothing here measures what happens inside the day, and an intraday technique is not auditable with this data.
Numbers and reproducibility
The six controls
| control | status | t | threshold | episodes |
|---|---|---|---|---|
| invariance | failed | — | — | — |
| costs | inconclusive | 0.81 | 1.97 | 453 |
| placebo | inconclusive | 1.27 | 1.97 | 453 |
| benchmark | passed | — | — | — |
| out of sample | inconclusive | — | — | — |
| multiple testing | inconclusive | — | — | — |
- invariance56% of the gross profit comes from 3706 trades (5% of the total) — lotteryconcentration: +56.33% of the profit sits in the top 5% of trades — with the dates shuffled, +43.85% (fails above +50.00%)
- costsgross +0.537% · cost 0.200% · net +0.337% (t=0.81) · the range runs from -0.480% to +1.153%
- placeboactual +0.337% · placebo -0.193% · excess +0.530% ± 0.418% (t=1.27 against a threshold of 1.97, 453 real groups, 3,706,650 sham dates, draw error ±0.010%)
- benchmarktechnique +0.34% · buy and hold (same horizon) +0.04% · excess +0.29%
- out of sampleasset half A: +0.295% (t=0.58, 441 episodes) · asset half B: +0.379% (t=0.90, 444 episodes) · liquid half (>= US$ 2,066,613/day): +0.632% (t=1.51, 453 episodes) · illiquid half: -0.018% (t=-0.03, 412 episodes) · period 1/4 (2017-10-06 a 2022-05-20): +2.077% (t=3.02, 235 episodes) · period 2/4 (2022-05-21 a 2023-12-17): -0.171% (t=-0.22, 83 episodes) · period 3/4 (2023-12-18 a 2025-05-02): +0.433% (t=0.53, 73 episodes) · period 4/4 (2025-05-03 a 2026-07-27): -0.988% (t=-1.75, 65 episodes)The edge decayed: +2.08% (t=3.02) in the first quarter of the period, −0.99% (t=-1.75) in the last. The partitions that replicate above are across assets, not across time.
- multiple testing1 variation(s) tested · t=0.81 across 453 episodes (equivalent to t=0.81) · p≈0.4190 · false positives expected by chance ≈ 0.42
Equity — outside the six controls, and here is why
The t of the trade series is invariant to bet size: 0.5%, 1% and 3% agree to the sixth decimal. Nothing here moves the verdict — it moves what the account would have lived through.
- risking 1.0% per trade
- ×1.36
- worst drawdown from the peak
- −66%
- days below the previous peak
- 1,538
- signals refused for lack of capital
- 60%
- paths where the account halved (out of 12)
- 0
Reproducibility
- period
- 2017-08-17 to 2026-07-28
- assets that traded
- 540
- variations tested before this one
- 1
- gross per trade
- +0.54%
- net per trade
- +0.34%
- exit rule
- the technique itself (held until the opposite signal)
- median duration bars
- 4
- mean duration bars
- 7.3
- max duration bars
- 82
- fee per leg
- 0.001
- episode days
- 7
- seed
- 20260728
- osc fast
- 10
- osc slow
- 50
- ADX threshold
- 30.0
- ADX period
- 14
Binance spot klines (delisted pairs included) · collected from 2026-07-27 23:31 to 2026-08-03 10:49 · 540 assets · 750,934 bars · 2017-08-17 to 2026-07-28
Hypothesis, filed before the result
Rules given in full: oscillator of the 10- and 50-day averages, filtered by ADX(14) < 30. Same blockage: the ADX is in chapter 23. It is the most frustrating case in the population, because everything else is specified. Family prediction, filed before measuring: (1) the control that kills the most will be COST, and not invariance — unlike the `adaptativos` family, because these are discrete-signal oscillators, they turn over less and are not always in the market; (2) the DIVERGENCE techniques will come out mostly INCONCLUSIVE, because they require two aligned peaks and fire rarely; (3) none survives the family's Benjamini-Hochberg. I record that prediction (1) is the opposite of the one I made in `adaptativos` and that was confirmed there — if I get it wrong again in the same direction, that is a sign I am misreading the mechanism of cost, not the technique. UNBLOCKED on 2026-07-30: the ADX calculation arrived. It is NOT in the body of chapter 23 as the source says — it is inside 'Ranking of Markets for Selection' (p. 1062), as a sub-section the two-level table of contents does not list. The full chain: PDM and MDM → smoothed over 14 (constant 0.071) on the true range → PDI and MDI → DX = 100×|PDI−MDI|/(PDI+MDI) → ADX smoothed with 0.133. This technique goes from NOT SPECIFIED to auditable, without changing the population: it was already one of the 24 declared ones. And the source prints the MDM INVERTED. It writes 'MDM = today's low minus yesterday's' (L_t − L_t−1) and states, one paragraph later, that 'on an inside day both PDM and MDM are zero'. Both cannot be true. Measured over 2,286 inside days of crypto: with the printed formula, MDM is zero on 0 of them (0.0%); with Wilder's definition (L_t−1 − L_t), on 2,286 (100.0%). We implement the definition, and the divergence is published.
filed on 2026-07-31, before the number existed
The original, as it was filed
Regras dadas por inteiro: oscilador de médias de 10 e 50, filtrado por ADX(14) < 30. ⚠️ Mesmo bloqueio: o ADX está no capítulo 23. É o caso mais frustrante da população, porque tudo o mais está especificado. Previsão da família, registrada antes de medir: (1) o controle que mais mata será o CUSTO, e não o invariante — diferente da família `adaptativos`, porque estes são osciladores de sinal discreto, giram menos e não são sempre-no-mercado; (2) as técnicas de DIVERGÊNCIA sairão majoritariamente INCONCLUSIVAS, porque exigem dois picos alinhados e disparam pouco; (3) nenhuma sobrevive ao Benjamini-Hochberg da família. ⚠️ Registro que a previsão (1) é o oposto da que fiz em `adaptativos` e que se confirmou lá — se eu errar de novo na mesma direção, é sinal de que estou lendo mal o mecanismo do custo, e não a técnica. ⚠️ DESTRAVADA em 2026-07-30: o cálculo do ADX chegou. Ele NÃO está no corpo do capítulo 23 como a fonte diz — está dentro de 'Ranking of Markets for Selection' (p. 1062), como sub-seção que o sumário de dois níveis não lista. A cadeia completa: PDM e MDM → suavizados em 14 (constante 0,071) sobre o true range → PDI e MDI → DX = 100×|PDI−MDI|/(PDI+MDI) → ADX suavizado com 0,133. Esta técnica sai de NÃO ESPECIFICADA para auditável, sem mudar a população: ela já era uma das 24 declaradas. ⚠️ E a fonte imprime o MDM INVERTIDO. Ela escreve 'MDM = mínima de hoje menos a de ontem' (L_t − L_t−1) e afirma, um parágrafo depois, que 'num dia interno tanto PDM quanto MDM são zero'. As duas coisas não podem ser verdade. Medido em 2.286 dias internos de cripto: com a fórmula impressa, MDM é zero em 0 deles (0,0%); com a definição de Wilder (L_t−1 − L_t), em 2.286 (100,0%). Implementamos a definição, e a divergência fica publicada.
Pre-registration exists to keep prediction apart from rationalisation: written after the number, every hypothesis is right.