TL;DR: the answer box
- On ES the default is below average. 14/28, buy when it crosses below zero, sell 4 days later. Ret/DD 1.00 on ES, better than only 35.1% of reliable long settings. On SPY, 2.20, better than 68.3%.
- Fast longer than slow is not a trick. An inverted 70/30 crosses below zero on exactly the days the normal 30/70 crosses above. Same signal, flipped.
- The side mattered far more than the setting. On ES, 536 of 630 long backtests made money and 94 of 630 short ones did. On the yen it flipped: 205 long, 425 short.
- Rising or falling volume, nearly the same median. On ES long, the typical Ret/DD was 1.59 after a cross below zero and 1.67 after a cross above.
- The typical long setting did not beat drift. The median ES long setting earned -0.009% a trade more than buying any open and holding as long, and only 215 of 467 beat drift at all. On SPY, -0.022%.
- Almost nothing cleared the luck bar. 6 of 294 comparable settings beat a random entry's average by two spreads.
How I tested the volume oscillator
The volume oscillator compares a short average of volume with a long one. The version here is TradeStation's VolumeOsc. Take the simple average of volume over the short length. Subtract the simple average over the long length. Divide by the long average and multiply by 100.
Above zero, recent volume is running above its longer-run level. Below zero, under it. That's all it measures.
Think of volume as the noise level in a room. The oscillator tells you, accurately, whether the room is louder or quieter than usual. The question this test asks is whether that tells you which way the crowd will move next.
The raw difference I described in 2025, fast average minus slow, crosses zero on exactly the same days. StockCharts' Percentage Volume Oscillator is the same idea built on exponential averages, which cross on different days. I did not test that version.
Here is one trade with the default setting, drawn bar by bar.
The oscillator went from 0.9 to -0.4 at the close of 2009-12-22. The trade bought the open of 2009-12-23 at 1,703.00. It sold the open of 2009-12-30 at 1,710.50. $375 on one contract. It is not the best trade. Its profit sits closest to the middle of all 174 default trades.
The sweep.
- 105 settings. Every pair of 15 lengths from 2 to 100, with the short length below the long one.
- Two signals each. A cross below zero (volume dropping under its usual level) and a cross above zero (volume climbing over it). Each traded long and short.
- Three holds: 2, 4 and 10 trading days (daily bars), sold at the open. That is 1,260 backtests per market, 3,780 in all. The same grid ran again on each half of every window.
- Three markets: ES (E-mini S&P 500 futures, one contract) from 2006-01-03, SPY on a $35,000 account from 1994-02-01, and yen futures (one contract) from 2006-01-03. All to 2026-08-20.
- The default, fixed before the run: 14/28, crossing below zero, sold 4 days after entry.
The fills: Execution rule v2. The signal is read at the close. The trade fills at the next open. The exit fills at the open 4 bars after entry: buy Tuesday's open, sell the following Monday's open. One position at a time. No costs in the headline figures, with a costed figure kept on every row.
The scores, in plain words.
- Drawdown: the biggest drop from a high point.
- Ret/DD: net profit divided by the biggest drawdown. Profit per dollar of pain. Higher is better.
- Win rate: the share of trades that made money.
- Drift: what you earn by buying any open and holding as long, with no signal at all.
- Reliable: a setting with 100 trades or more.
Is "fast longer than slow" a better volume oscillator setting?
No. It is the same setting with the signal flipped.
In 2025 I named 16/14, 70/30 and 60/40 as the settings that worked best, and later 75/25. All four put the fast length above the slow one. Here is why that cannot be a separate edge.
A volume average is never negative. So an inverted 70/30 and a normal 30/70 always sit on opposite sides of zero. When one crosses up, the other crosses down, on the same day.
That also turns my 2025 explanation around. With an inverted setting, a cross below zero is a day when recent volume is rising above its usual level. It is not volume "losing steam".
So how did the four named settings score? All over the place.
On the yen, short, the four scored a Ret/DD from -0.28 to 4.53. Typed 70/30: 4.53. Typed 60/40, its neighbour on paper: -0.28. On ES, long, they ran from 0.57 to 4.66. Neither way of typing them wins. That spread is noise.
Where does the default volume oscillator setting rank?
Below the middle on ES. In the top third on SPY.
On ES the default long rule took 174 trades. It won 55.7% of them and made $33,000. Its worst drawdown was $33,162. Ret/DD 1.00, against 1.65 for the typical long setting.
In 2025 I wrote that the default "usually doesn't work very well". On ES it ranked 303 of 467. It still made money. On SPY it ranked 192 of 605, with a Ret/DD of 2.20 and a $7,748 worst drawdown.
The other common default, 5/10, did no better: Ret/DD 1.00 on ES (rank 301 of 467) and 1.77 on SPY (rank 250 of 605).
Now put the default next to doing nothing clever at all.
One ES contract, bought on the first day and held, made $286,838. Its worst fall was $60,562. The default rule made $33,000 and still had a worst fall of $33,162. It sat out most of the rise and took about half the pain.
What are the best volume oscillator settings?
On the ES long map, no single setting earned the title "best". The heat map shows why.
ES long, crossing below zero, 4-day hold. 5/28 scored 8.31. Move the short length to 10 and 10/28 scored 2.18. The default 14/28 scored 1.00. What I look for is a smooth hill of bright cells. This map shows scattered spikes.
The best long cell on ES was 5/30, crossing below zero, hold 4: Ret/DD 8.32 on 264 trades. I'm not using it. The same lengths on the opposite cross scored 3.02. On SPY the best cell, 14/16 with a 10-day hold, scored 12.30, and its opposite cross 4.42. Each is the best only in hindsight, picked after the sweep ran.
For why a hindsight winner deserves suspicion, read the probability of backtest overfitting paper by Bailey, Borwein, López de Prado and Zhu. I learned it the expensive way. I lost roughly $270K early in my trading to overfitting and leverage.
What decides the score, then?
The market, the side and the hold. The typical volume cross added almost nothing over drift.
Read across one row. On ES long, the typical setting scored 1.59 when volume was falling and 1.67 when it was rising. Almost the same. Setting by setting, the cross above won 145 of 315 pairs and the cross below 170. A coin toss.
Now read the hold columns. On ES long, the typical score went from 0.87 at 2 days to 2.44 at 10 days. A longer hold on a rising index catches more of the rise, for every-open entries and volume crosses alike.
Does the side matter more than the setting?
Far more.
On ES, 85.1% of long backtests made money and 14.9% of short ones did. On SPY, 93.0% and 7.0%. On the yen it flipped: 32.5% long, 67.5% short. Costs cut every count, the short side hard on ES and SPY: 536 and 94 fall to 518 and 70 on ES, 586 and 44 to 550 and 30 on SPY, 205 and 425 to 157 and 369 on the yen. The side that wins stays the side that wins.
Whichever length, whichever cross, whichever hold: long on the S&P 500 mostly made money and short mostly lost.
Does a volume oscillator signal beat a random entry?
This is the test that matters most. You can run it on any setting you plan to trade.
First, drift. Buy any ES open, sell 4 days later, and you earned 0.120% on average. On SPY, 0.159%. That's the money the market hands you for showing up. A signal has to beat it.
With the volume signal, the typical ES long setting earned 0.096% a trade at a 4-day hold. With no signal at all, 0.120%. Only one of the nine pairs went the signal's way: ES long at 10 days, by 0.305% to 0.297%.
Spread every setting out and the picture holds.
The typical ES long setting earned -0.009% a trade over drift. Only 215 of 467 beat drift at all, fewer than half. On SPY, -0.022% and 245 of 605. Yen short, -0.004% and 244 of 534. The money the long side made on the S&P 500 is the index rising, not the volume signal.
Second, a random entry. Pick random days, trade as often as the typical hold-4 setting, sell 4 days later, and repeat with 10 random seeds. On ES the random long test made $42,156 on average, with a spread of $27,397 across seeds. To count as beating luck, a setting had to clear the average plus two spreads.
ES long: 3 of 45. SPY long: 0 of 52. Yen short: 1 of 50. The ES default sat 0.3 spreads below the random test's average.
Across all three markets and both sides, 6 of 294. In 2025 I wrote that volume "gives you early warnings before big moves". Traded on its zero cross, it cleared the random entry's two-spread bar in 2.0% of comparable settings.
Did the yen short work?
Over the full window, the default did. 14/28 crossing below zero, short for 4 days: Ret/DD 2.62 on 190 trades, $30,581, with an $11,650 worst drawdown. Rank 49 of 534. It won 54.2% of its trades.
Split the window in two, though, and most of that profit sits in the first half.
From 2006 to 2016 the default made $25,275, Ret/DD 2.17. From 2016 to 2026, $5,306, Ret/DD 0.48. 14 of 21 years made money.
The rest of the grid went the other way.
From 2006 to 2016, 281 of 630 short backtests made money. From 2016 to 2026, 532 of 630. That is the yen's trend, not the volume. One short yen contract, simply held, earned $8,525 in the first half and $62,769 in the second. And the typical yen-short setting's edge over drift stayed near zero in both halves: -0.019%, then -0.001%.
A note on direction: JY is quoted in dollars per yen. A short here is a bet on the dollar gaining against the yen.
The verdict, and the honest limits
What held up from 2025: on ES long, the 14/28 default is nothing special, ranking 303 of 467 long settings there. Testing beats guessing. And looking for stable zones, not one magic combo, is the right instinct. Here the stable zone is not a setting at all. It is the market, the side and the hold: ES and SPY, long, held 10 days.
What did not: the inverted settings are the normal ones flipped, and the "losing steam" reading is backwards. Across the grid, the yen short side followed the yen's trend. The default yen short was the exception: most of its profit came in the first half. And traded on the zero cross, the setup sold as an "early warning" cleared the random entry's two-spread bar in 6 of 294 comparable settings.
The limits, briefly.
- Simple averages only. Exponential versions cross on different days and were not tested.
- Futures volume is front-month volume. It shifts at each roll. SPY, with no rolls, gave the same verdict.
- No stop loss. The largest single loss on one ES contract with the default was -$13,338.
- No costs in the headline figures. The ES default long made $27,954 after costs.
- Zero crosses and time exits only. Other thresholds and the filter use were not retested here.
- A backtest is not a live edge. It is the best evidence about the past.
What this means for you
- Don't trust the tuned length from this sweep. On ES, 5/28 scored 8.31 and 10/28 scored 2.18. There was no smooth region around either.
- Don't set the fast length longer than the slow one. You get the normal oscillator, flipped. Swap the cross instead, so you know what you are trading.
- Pick the side first. Long ES made money in 536 of 630 backtests. Short, in 94.
- Test any entry against drift and a random entry. The typical ES long setting earned -0.009% a trade over drift. Put the trade lists of a few neighbouring settings into AlgoChef and check they behave alike before real money goes on the one that led the sweep.
- Use volume as context, if at all. I tested the filter idea, RSI(2) with the oscillator below zero, in its own article.
LuxAlgo's reference page says the indicator carries no direction on its own. This is the test behind that sentence. The room got louder or quieter. The crowd went wherever the market was already going.
In these tests, volume told you how loud the room was. Its typical zero-cross setting did not beat plain drift.
Reference tables
The default, 14/28 crossing below zero, hold 4, every market and side.
| Market | Side | Trades | Win rate | Net profit | Max drawdown | Ret/DD | Profit factor | Rank by Ret/DD |
|---|---|---|---|---|---|---|---|---|
| ES | long | 174 | 55.7% | $33,000 | $33,162 | 1.00 | 1.22 | 303 of 467 |
| ES | short | 174 | 44.3% | -$33,000 | $55,025 | -0.60 | 0.82 | 175 of 467 |
| SPY | long | 290 | 55.2% | $17,012 | $7,748 | 2.20 | 1.26 | 192 of 605 |
| SPY | short | 290 | 44.8% | -$17,012 | $19,284 | -0.88 | 0.79 | 394 of 605 |
| Yen | long | 190 | 45.8% | -$30,581 | $35,844 | -0.85 | 0.72 | 481 of 534 |
| Yen | short | 190 | 54.2% | $30,581 | $11,650 | 2.62 | 1.39 | 49 of 534 |
Profit factor is dollars won for each dollar lost. A setting counts in the ranking at 100 trades or more.
Each market at a glance.
| Next-open fills, sell 4 days later | ES 2006 to 2026 | SPY 1994 to 2026 | Yen 2006 to 2026 |
|---|---|---|---|
| Default side tested | long | long | short |
| Default rank among reliable settings | 303 of 467 | 192 of 605 | 49 of 534 |
| Typical edge over drift, every reliable setting | -0.009% | -0.022% | -0.004% |
| Comparable settings above the random-entry bar | 3 of 45 | 0 of 52 | 1 of 50 |
Want the next study when it is finished, including the ones that overturn something I believed? That is what the newsletter is for: StatOasis.com/Overfit
Methodology and honesty footer: 3,780 backtests on ES (2006 to 2026), SPY (1994 to 2026) and Japanese yen futures (2006 to 2026) daily bars, Execution rule v2 (signal at the close, fill at the next open, time exit at the open 2, 4 or 10 bars after entry). Flat-only per setting, SPY $35,000 in whole shares, futures one contract, no compounding. Frictionless headline figures with a costed figure on every row. Buy-and-hold and seeded, frequency-matched random controls computed on the same bars. Every figure here comes from the study's own results tables. This is research, not investment advice.






