Markets › Stocks & ETFs · SPY daily, real volume, total return

Accumulation/Distribution Indicator on the S&P 500: 33 Years of SPY

Marc Chaikin built the A/D line for daily stock charts. After it failed on Bitcoin, we tested it where it was designed: every trading day of SPY since 1993, with real volume, dividends, cash interest, and a comparison with simply holding.

SPY (S&P 500 ETF) · daily bars, real volume · long only: A/D divergence, A/D vs its 20-day average, Chaikin oscillator · Protocol v1.0 plus the 8 Oct 2026 rules

Buried · Fragile

Built for stocks. Beaten by holding them, and by chance.

BornFrozen 22 Oct 2026 (adspy_spec.md), before any A/D value on SPY was computed
Died22 Oct 2026

Variants tried: 3 · Passed every gate: 0 · Beat random long periods: 0 · Holdout opened: yes (already used)

Short answer: not on the S&P 500. On SPY daily data from 1993 to 2026, the A/D line crossing its 20-day average and the Chaikin oscillator crossing zero, long only with cash when out, earned +0.13% and +0.12% a trade, less than the same holding periods on random days (about +0.46%), and grew 1 unit to x1.96 and x1.74 against x29.8 for buy and hold.How much costs took here, compared across all 54 of our tests →Did the same rules work on other markets? The cross-market scoreboard →

00The verdict in three lines

  • We tested the Accumulation/Distribution line on stocks where it was designed: SPY daily bars from 1993 to October 2026, long only, cash when out, with the three common uses: a bullish divergence, the A/D line crossing its 20-day average, and the Chaikin oscillator crossing zero.
  • It did worse than random timing. The two crossing rules earned +0.132% and +0.121% a trade; the same holding periods on random days earned about +0.461%. Their signals ranked below 99% of the random runs.
  • Holding SPY turned 1 unit into x29.8; the A/D rules, into x1.74 to x2.11. The divergence fired too rarely to judge. Buried, all three.

01The A/D line on stocks, in one paragraph

The Accumulation/Distribution line adds each day's volume, weighted by where the close sits in the day's range (+1 at the high, −1 at the low), to a running total; the Chaikin oscillator is the 3-day EMA of that line minus its 10-day EMA. A rising line is read as accumulation, a falling one as distribution. The full explanation, and the same three rules on 4-hour Bitcoin candles, are in our Bitcoin A/D test, where none of them proved an edge either.

02The rules, adapted to a stock index

  • ADS-DIV: a swing low is a day whose low is below the five days on each side; when a new swing low is lower than the previous one (within 60 trading days) but the A/D line is higher, buy at the next open. Stop at the swing low, target twice the risk, out after 30 trading days. With daily bars only, a day that touches both the stop and the target counts as a stop.
  • ADS-MA: buy when the A/D line crosses above its 20-day average, sell to cash when it crosses below.
  • ADS-CHO: buy when the Chaikin oscillator crosses above zero, sell when it crosses below.
  • Long only, signals at the close, fills at the next open, dividends earned while invested, Treasury-bill interest while in cash. Shorting an index that rose about thirtyfold with dividends would mostly measure that rise, so the yardstick is buy and hold.

We fixed these rules on 22 October 2026, after the Bitcoin result and before computing a single A/D value on SPY. This SPY history was used before by our 200-day moving average test, whose numbers appear below for comparison.

03How we tested it

SPY daily bars, 29 January 1993 to 20 October 2026 (8,489 trading days), from Yahoo Finance, with each day's volume and SPY's dividends; SPY has never split. Costs: 0.04% a round trip, also shown at 0.10%. Periods: 1993 to 2005, 2006 to 2015, and a holdout from 2016 already used by the 200-day test. First-period bar t ≥ 2.0. Control: every trade's holding period, kept at its length, moved together to other days, 500 times. Engine check: the A/D line and the oscillator against a hand calculation, crosses and next-open fills, a dividend inside a trade, swing points, divergences, a gap through the stop, both levels on one day, the 30-day exit, and an independent re-implementation that matched every one of the 1,041 trades (adspy_selftest_result.txt).

04Results: is the A/D line useful on stocks?

VariantRuleTradesWin rate (95% range)Net per tradeNet, sum of tradesProfit factorVerdict
ADS-DIVBullish divergence; stop at the swing low, target 2R, out after 30 days7647.4% (37% to 58%)+0.166%+12.6%1.09Buried
ADS-MAA/D line crossing its 20-day average; long or cash51037.8% (34% to 42%)+0.132%+67.4%1.13Buried
ADS-CHOChaikin oscillator crossing zero; long or cash45539.6% (35% to 44%)+0.121%+55.1%1.10Buried
x1x2x5x10x201995200020052010201520202025validationholdout*Buy and holdADS-DIVADS-MAADS-CHO

Growth of 1 unit from November 1993, each strategy with Treasury-bill interest while in cash, against buy-and-hold SPY with dividends (dashed); log scale. * Holdout already used before this test.

Accumulation/Distribution vs buy and hold

From November 1993Growth of 1 unitYearly (CAGR)Worst drawdown (end of day, open losses included)Time invested
Buy and hold SPYx29.810.9%-55.2%100%
200-day moving averagex16.48.9%-24.6%75.0%
ADS-DIVx2.112.3%-27.2%16.9%
ADS-MAx1.962.1%-61.3%67.9%
ADS-CHOx1.741.7%-56.6%67.0%

The two crossing rules were in the market about two thirds of the time and kept a small part of its gain. The average-cross version even had a deeper drawdown than holding (end of day, open losses included): it lost 62.3% on closed trades in 2008 (sum of trades), buying rebounds that failed.

05A/D signals or random days?

VariantTradesReal net per tradeRandom days, medianRandom, 5th to 95thPercentile (95 needed)
ADS-DIV76+0.166%+0.756%+0.122% to +1.467%6.2
ADS-MA510+0.132%+0.461%+0.330% to +0.597%0.2
ADS-CHO455+0.121%+0.508%+0.364% to +0.673%0.2

The control keeps every trade's length and moves the trades to other days. Because SPY rose over the period, almost any long holding period earned something; what matters is whether the A/D chose better ones. It chose worse: for both crossing rules the real result was below nearly every random run.

06By period and by year

Variant1993 to 2005, net per trade (trades)2006 to 2015 (trades)Holdout* 2016 to Oct 2026 (trades)t, first periodPF, second period
ADS-DIV+0.252% (32)-0.140% (24)+0.395% (20)0.300.93
ADS-MA+0.231% (201)-0.284% (155)+0.422% (154)1.080.78
ADS-CHO+0.115% (191)-0.141% (133)+0.396% (131)0.480.89
YearADS-MA sum of trades (trades)ADS-CHO sum of trades (trades)
1993+0.5% (13)+0.3% (13)
1994+1.7% (12)-1.6% (15)
1995+26.0% (6)+20.6% (9)
1996+19.4% (12)+15.9% (12)
1997+0.0% (20)+1.0% (19)
1998+14.7% (19)+16.9% (16)
1999-9.5% (18)-11.0% (17)
2000-20.5% (24)-20.7% (19)
2001-0.3% (20)-13.0% (20)
2002-18.5% (18)-22.3% (15)
2003+19.2% (12)+20.2% (10)
2004+7.9% (13)+10.3% (12)
2005+5.8% (14)+5.4% (14)
2006+3.0% (15)+2.9% (11)
2007-3.6% (13)+6.7% (11)
2008-62.3% (28)-42.6% (19)
2009-1.9% (17)-7.8% (15)
2010+16.5% (14)+16.4% (11)
2011-6.8% (15)-10.4% (15)
2012+5.1% (13)+15.2% (10)
2013+11.8% (11)+7.2% (10)
2014+8.6% (9)+11.5% (9)
2015-14.6% (20)-17.7% (22)
2016+7.6% (14)+4.2% (14)
2017+13.8% (13)+12.7% (8)
2018+0.2% (11)+0.7% (12)
2019+12.6% (12)+15.8% (12)
2020-8.2% (24)-6.6% (18)
2021+10.3% (14)+15.5% (10)
2022-23.0% (18)-23.3% (17)
2023+35.1% (11)+19.3% (9)
2024+13.6% (7)+18.5% (9)
2025+0.4% (17)-6.1% (12)
2026 (to 20 Oct)+2.5% (13)+1.2% (10)

The divergence version traded only 76 times in 33 years (32, 24, 20 trades in the three periods), below the 50 per period our protocol asks for; its year-by-year results are in the trade log.

07The gates

VariantTrades1. PF ≥ 1.2 in validation2. ≥ 50 trades in each period3. t ≥ 2.0 on development4. Above the 95th percentile of the shifted-holding control5. Positive without the 10 best trades6. Holdout net positive (already used)
ADS-DIV76failfailfailfailfailpass
ADS-MA510failpassfailfailfailpass
ADS-CHO455failpassfailfailfailpass
VariantCauseGates failedVerdict
ADS-DIVFragile1, 2, 3, 4, 5Buried
ADS-MAFragile1, 3, 4, 5Buried
ADS-CHOFragile1, 3, 4, 5Buried

Fragile: positive as a sum of trades, negative without the ten best. The holdout gate passed for all three only because SPY rose strongly from 2016; random long periods did better still.

TWhat this shows, and what to take into your own tests

What the results show

  • On 33 years of SPY, with real volume and dividends, the A/D line crossing its 20-day average and the Chaikin oscillator crossing zero picked worse moments to be long than chance: the same holding periods placed at random days earned +0.461% and +0.508% a trade, the real signals +0.132% and +0.121%.
  • With cash interest when out, 1 unit grew to x1.96 and x1.74 from November 1993, against x29.8 for holding SPY and x16.4 for the 200-day moving average.
  • The divergence signal, the use most often taught, fired only 80 times in 33 years of daily bars: 76 trades, too few to judge.

What remains unknown

  • Single stocks, where the A/D line is most often drawn. We tested the index ETF; individual shares have their own volume patterns.
  • Other averages and oscillator settings. We used the usual 20-day average and Chaikin's 3 and 10.
  • Short selling. We tested long only, as most people use the indicator on stocks.

Why it was buried

The two crossing rules bought after days that closed near their highs on volume and sold after days that closed near their lows; one likely reason for the result, which we did not test separately, is that on SPY this often meant buying after a bounce and selling after a dip. They held about 67.9% of the time and still had a worse drawdown than buy and hold, end of day with open losses included (-61.3% for the average-cross version, -55.2% for holding), with -62.3% on closed trades in 2008 alone. The sum of trades was positive for ADS-DIV, ADS-MA and ADS-CHO, and turned negative once the ten best trades of each were removed.

What you can apply to your own tests

  • On a market that rises over time, compare a long-only signal with random long periods of the same length. Being long at all is what earns; the question is whether the signal adds to that.
  • Compare with simply holding, after costs and with cash interest. Here the indicator kept less than a tenth of the market's gain.
  • A volume indicator built for daily stock charts still has to be tested on daily stock charts before you trust it. It did not survive that test here.

A note on the numbers: drawdown figures are measured on closed trades unless a table says it includes open losses. Open losses inside a trade are not counted in a closed-trade drawdown, so real account risk is higher, especially for systems with no stop. Backtests are not live trading.

FAQCommon questions

Is the A/D line useful for stocks?

Not as a timing signal on SPY in our test: both crossing rules ranked below 99% of random long periods of the same length, and the divergence fired only 80 times in 33 years of daily bars.

Does the Chaikin oscillator work on the S&P 500?

Not in our test: buying when it crossed above zero and selling when it crossed below made +0.12% a trade over 455 trades from 1993 to 2026 and grew 1 unit to x1.74 with cash interest, against x29.8 for holding SPY.

Accumulation/Distribution vs buy and hold: which did better?

Buy and hold, by far: x29.8 from November 1993, against x2.11 at best for the A/D rules and x16.4 for the 200-day moving average. The A/D average-cross rule also had a deeper worst drawdown than holding (end of day, open losses included).

Does A/D divergence work on daily stock charts?

It is rare: 80 bullish divergences on SPY in 33 years with our swing rule, 76 trades, too few for our gates; the trades it did take were slightly positive on average but negative without the ten best.

How was the strategy tested?

On SPY daily data with volume and dividends, 1993 to 2026, long only, Treasury-bill interest in cash, 0.04% a round trip, with rules written and dated before the data was run, costs included on every trade, results split into development, validation and holdout periods, a random-entry control as the benchmark, and every variant reported. Read the protocol.

08Check our arithmetic

Frozen specificationThe rules on SPY, costs, periods, gates and control, dated before any A/D value on SPY was computed.
adspy_spec.md
CodeThe engine (its readings of the rules at the top), the independent re-implementation, the self-test and the run (node adspy_run.js), which also runs the 200-day rule for comparison. The SPY history comes from Yahoo Finance; we do not republish it.
adspy_lib.js · adspy_ref.js · adspy_selftest.js · adspy_run.js
Shared code it usesThe 200-day rule engine, statistics and control helpers.
control_audit_lib.js · gh_lib.js · hourly_lib.js · ma_lib.js · rsi2_protocol.js · sma200_lib.js
ResultsSelf-test result, the console output of the run and all numbers.
adspy_selftest_result.txt · adspy_results.txt · adspy_summary.json
Trade logs (CSV)Every trade: entry date and open, exit date and price, exit reason, days held, gross and net % (total return).
ADS-DIV · ADS-MA · ADS-CHO

Code provenance: our own code, written from the specification and Chaikin's published formula.

09Data notes

Source. The SPY daily history (prices, volume, dividends) from the Yahoo Finance page saved for our 200-day test, and the 3-month Treasury-bill rate from FRED. Daily bars cannot show which of a day's high and low came first, so a divergence trade whose stop and target were both inside one day is counted as stopped, the cautious choice. Fills: the next day's open for signals, stops and targets at their level or at a gapped open.

10Corrections

22 Oct 2026, navigation: added a link to the new guide comparing trading costs across all our tests. No result changed. 22 Oct 2026, navigation: added a link to the new cross-market scoreboard, which includes this test. No result changed. 22 Oct 2026, navigation: added a link to the new guide comparing trend following and mean reversion across all our tests. No result changed.

+More tests and guides