On-balance volume (100)
Volume reveals intent before price reveals direction: when buyers dominate, the running balance rises even while price still hesitates. Using that balance in place of price to find the trend gets you into the move ahead of anyone watching the chart alone.
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 91% less than its own best previous moment, and it spent 1,908 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
What this result does NOT say
- One market, one universe
- Measured on 539 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 28,451 trades, but only 29 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 29 episodes, what the data supports is a range from -4.83% to +8.31% 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.48 | 2.05 | 29 |
| placebo | inconclusive | 0.15 | 2.05 | 29 |
| benchmark | failed | — | — | — |
| out of sample | passed | — | — | — |
| multiple testing | failed | — | — | — |
- invariance82% of the gross profit comes from 1422 trades (5% of the total) — lotteryconcentration: +81.51% of the profit sits in the top 5% of trades — with the dates shuffled, +63.38% (fails above +50.00%)
- costsgross +1.740% · cost 0.200% · net +1.540% (t=0.48) · the range runs from -5.033% to +8.113%
- placeboactual +1.540% · placebo +1.033% · excess +0.507% ± 3.451% (t=0.15 against a threshold of 2.05, 29 real groups, 1,422,550 sham dates, draw error ±0.072%)
- benchmarktechnique +1.54% · buy and hold (same horizon) +1.90% · excess -0.36%
- out of sampleasset half A: +0.887% (t=0.39, 29 episodes) · asset half B: +2.268% (t=0.46, 29 episodes) · liquid half (>= US$ 2,069,553/day): +2.273% (t=0.78, 29 episodes) · illiquid half: +0.315% (t=0.07, 28 episodes) · period 1/4 (2017-11-24 a 2022-05-02): +11.167% (t=1.92, 15 episodes) · period 2/4 (2022-05-03 a 2024-02-13): +1.685% (7 episodes — too small, does not count) · period 3/4 (2024-02-14 a 2025-05-25): -2.663% (5 episodes — too small, does not count) · period 4/4 (2025-05-26 a 2026-07-27): -4.024% (5 episodes — too small, does not count)
- multiple testing4 variation(s) tested · t=0.48 across 29 episodes (equivalent to t=0.46) · p≈0.6461 · false positives expected by chance ≈ 2.58
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.30(×0.94–×2.00 depending on the drawn ordering)
- worst drawdown from the peak
- −91%
- days below the previous peak
- 1,908
- signals refused for lack of capital
- 62%
- paths where the account halved (out of 12)
- 0
Reproducibility
- period
- 2017-08-17 to 2026-07-28
- assets that traded
- 539
- variations tested before this one
- 4
- gross per trade
- +1.74%
- net per trade
- +1.54%
- exit rule
- the technique itself (held until the opposite signal)
- median duration bars
- 3
- mean duration bars
- 23.4
- max duration bars
- 1250
- fee per leg
- 0.001
- episode days
- 112
- seed
- 20260728
- OBV period
- 100
- OBV filter
- none
- OBV f
- 1.0
- OBV window
- 20
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
pp. 537–540. Granville's OBV: the day's volume is added when the close rises and subtracted when it falls, accumulating. The source's closed form: `OBV_t = OBV_{t−1} + [(C_t − C_{t−1})/|C_t − C_{t−1}|] × V_t`. The trading rule is the crossing of the accumulation with its own average: «identifying a simple volume direction when the OBV value crosses the trend». THE PERIOD IS OPEN AND THE SOURCE GIVES TWO INCOMPATIBLE VALUES: the text on p. 538 says «a moving average trend of up to 100 weeks» and Figure 12.4, from which it takes the signals, uses **40 days**. Both are its numbers; picking one would be our choice, and the period enters as a SWEEP. THE SOURCE CONFESSES IT NEVER TESTED: «it would be necessary to do a comprehensive test over many markets to find out whether the OBV produces better trend results than simply using price». It is the declared BASE of this family's two filter layers. Family-level prediction, recorded before measuring: (1) NONE survives the corpus-wide Benjamini-Hochberg; (2) the gravedigger in crypto will be CONTROL 1, concentration, as in `volatilidade` (7 of 7) and `posicao` (10 of 10) — in crypto what pays a lot pays it concentrated, and this has been measured three times already; (3) SAITTA'S VOLUME FILTER will cut trades without improving the `t`, which is the signature of a filter that does not separate — PROTOCOLO.md already records the measured case in which the volume filter cut 73% of the trades, left the gross WORSE and inflated the error by 42%; (4) the VOLUME SPIKE as a reversal will have the family's best `t`, being the chapter's only claim about a rare and dated EVENT instead of an accumulated index — and even so it will not pass; (5) the three layers over on-balance volume (raw, filtered by low volume, filtered by movement) will differ from one another by LESS than the error bar, because filtering days out of an accumulator changes the accumulated series little; (6) ON-BALANCE VOLUME will do worse than the moving average crossover the corpus already publishes — if replacing price with volume in a moving average worked, the chapter would not have to admit it never tested that.
filed on 2026-08-04, before the number existed
The original, as it was filed
p. 537–540. O OBV de Granville: soma-se o volume do dia quando o fechamento sobe e subtrai-se quando cai, acumulando. Forma fechada da fonte: `OBV_t = OBV_{t−1} + [(C_t − C_{t−1})/|C_t − C_{t−1}|] × V_t`. A regra de operação é o cruzamento do próprio acumulado com a média dele: «identificando uma direção simples de volume quando o valor do OBV cruza a tendência». ⚠️ O PERÍODO É ABERTO E A FONTE DÁ DOIS VALORES INCOMPATÍVEIS: o texto da p. 538 diz «uma tendência de média móvel de até 100 semanas» e a Figura 12.4, de onde ela tira os sinais, usa **40 dias**. Os dois são números dela; escolher um seria escolha nossa, e o período entra como VARREDURA. ⚠️ A FONTE CONFESSA QUE NUNCA TESTOU: «seria necessário fazer um teste abrangente em muitos mercados para descobrir se o OBV produz resultados de tendência melhores do que simplesmente usar o preço». ⚠️ É a BASE declarada das duas camadas de filtro desta família. Previsão da família, registrada antes de medir: (1) NENHUMA sobrevive ao Benjamini-Hochberg do corpus; (2) o coveiro em cripto será o CONTROLE 1, concentração, como em `volatilidade` (7 de 7) e `posicao` (10 de 10) — em cripto o que rende muito rende concentrado, e isso já foi medido três vezes; (3) o FILTRO DE VOLUME DE SAITTA cortará operação sem melhorar o `t`, que é a assinatura de filtro que não separa — o PROTOCOLO.md já registra o caso medido em que o filtro de volume cortou 73% das operações, deixou o bruto PIOR e inflou o erro em 42%; (4) o PICO DE VOLUME como reversão terá o melhor `t` da família, por ser a única alegação do capítulo sobre um EVENTO raro e datado em vez de um índice acumulado — e ainda assim não passará; (5) as três camadas sobre o saldo de volume (bruta, filtrada por volume baixo, filtrada por movimento) diferirão entre si por MENOS que a barra de erro, porque filtrar dias de um acumulador muda pouco a série acumulada; (6) o SALDO DE VOLUME irá pior que o cruzamento de médias que o corpus já publica — se substituir preço por volume numa média móvel funcionasse, o capítulo não precisaria admitir que nunca testou isso.
Quotations from the source were translated from the Portuguese record and back into English — they are not the author's exact words.
Pre-registration exists to keep prediction apart from rationalisation: written after the number, every hypothesis is right.
This claim has been audited once — there is no history to compare against.