MACD is probably the most-used momentum oscillator on any charting platform, and the signal-line crossover is how most people use it: histogram turns positive, momentum has turned up; negative, it has turned down. "Does MACD work?" is the question, and in that form it cannot come back no.
So we asked the narrower question the crossover actually implies, registered the test before running it, and ran it on 37 markets. The result was positive at the primary cell, consistent across every horizon and both halves of the sample, and still failed the test that would have credited MACD with anything. Both halves are explained below, because the second is the part most indicator write-ups leave out.
The run used daily bars, the shipped 12/26/9 settings, and the signal-line crossover event only. It says nothing about intraday charts, about other settings, about divergence patterns, or about the many ways MACD gets combined with other tools. It covers 37 instruments across equities, FX, rates, credit, metals, energy, volatility and crypto — 207,790 bars — and it is the third pre-registered look at MACD-family direction on this same panel in three days, a fact that bears on how the result should be read and is returned to below.
A bullish crossover is read as "momentum has turned up", so the claim reduces to: returns after a bullish cross should exceed returns after a bearish one. The test measured exactly that. On each crossing bar the forward 10-bar return was taken from that bar's close, scaled by the instrument's own recent volatility so that a 1% stock and a 4% cryptocurrency pool fairly, and the average after bullish crosses was compared with the average after bearish crosses. Because every instrument produces bullish and bearish crosses in equal number, its drift cancels out of the difference.
Two further arms were registered in advance. The first was the credit test: MACD is a smoothed function of recent returns, so the honest rival is the unsmoothed thing it is built from — a sign flip of the plain 60-bar return, with a 20-bar version alongside. If the crossover cannot beat that, the smoothing contributed nothing. The second was descriptive: is a crossover bar a large-move bar? MACD makes no such claim, so it was not scored on it.
The null was a calendar rotation: the oscillator series for every instrument was shifted by one common offset of at least a year, events were re-derived from the shifted series, and the whole grid was recomputed, for all 340 admissible offsets. That preserves each series' own persistence and the tendency of markets to move together, and destroys only the alignment with price. The reason this null and not a bootstrap decides the outcome is set out in the first post in this series, where the bootstrap said yes three times and the rotation null said no three times.
After 16,297 crossovers, the bull-minus-bear difference in scaled 10-bar return was +0.25 volatility units, with a cluster-bootstrap interval of [+0.06, +0.47] and a per-cell rotation p of 0.006. It was +0.18 at 5 bars and +0.28 at 20 bars, all with p below 0.02 — a smooth curve, not a lucky cell. Twenty-four of the 37 instruments were positive at 10 bars and 30 of 37 at 20 bars. Splitting each instrument's history into halves after the fact gave +0.20 and +0.31, so the sign did not depend on the period. Across the 12-cell grid the family-wise p was 0.041.
On a 1%-a-day instrument, +0.25 volatility units over 10 bars is about 25 basis points, bullish-crossover outcome minus bearish-crossover outcome, before any cost. That is a description of what happened historically on this panel, not a strategy, and past behavior is not a guarantee of future results.
The effect was not uniform. Crypto carried it (+0.97), with credit, precious metals and one bank stock next; the broad US equity indices sat at +0.18; USD currency pairs were flat; and two of the six large tech names were negative, at −0.70 and −0.61. Nor did it come from being right more often: the share of bullish crosses followed by a positive return rose by 0.6 points and the share of bearish crosses followed by a negative one by 1.5 points, neither clearing the null. The difference was in how far price moved, not how often it moved the expected way.
Against the bare 60-bar sign flip the crossover's excess at 10 bars was +0.18. The bootstrap interval excluded zero. The rotation p was 0.114. Against the 20-bar flip the excess was +0.19 with a per-cell p of 0.023, but the nine-cell family did not clear its critical value (family p 0.082). The pre-registered rule required the rotation null on the primary rival, and it was not met.
That is the whole audit in one paragraph. The bootstrap interval and the rotation p disagreed, in the direction they always do on a quantity where the rule chooses its own sample: the bootstrap holds the chosen events fixed and resamples around them; the rotation re-chooses which events exist, and is the honest yardstick. So the crossover was followed by something, and that something was not distinguishable, under the null committed to in advance, from what followed a bare change in the sign of recent returns.
The 60-bar sign itself, held as a state rather than an event, showed +0.29 at 20 bars with a p of 0.05 — a faint version of the documented tendency for recent direction to persist over one to several months. Nothing about markets was discovered here; the crossover appears to be a slow way of reading the sign of the recent return.
Forward 10-bar volatility on crossover bars was 1.01 times that on other bars, and 1.006 after adjusting for the volatility regime and trend — indistinguishable from one. A one-bar abnormal-move flag, set to fire on the same share of bars on each instrument, gave 1.25 times, above one on all 37 instruments. A crossover happens when two averages meet; it is not a large-move day, and it does not mark the start of one.
This panel was examined for MACD-family direction on 15 September (histogram and line states: null), again the same day (momentum conditioned on a recent volatility flag: null at the primary cell), and now (the crossover event: positive at the primary cell, family p 0.041). Three questions, three protocols, one panel. A family-wise p just under 0.05 on the third look is not a validated MACD effect, and treating it as one would be the kind of settings-and-questions search that overfitting describes. The positive Δ goes into a forward-tracking log, to be scored on data that did not exist when the test was written. No further in-sample MACD direction runs are planned on this panel.
On 37 daily instruments at the shipped settings, bullish MACD signal-line crossovers were followed by higher volatility-scaled returns than bearish ones, consistently across horizons and sample halves, and that excess did not clear the pre-registered null against a bare change in the sign of recent returns. A crossover bar was not a volatility event. What that licenses saying is narrow: the crossover carried some directional information on this panel, that information was not shown to be MACD's rather than the recent return's, and it was uneven across asset classes. What it does not license is any claim of edge, entries, or reliability. The reason to publish a result this shape — positive but not creditable — is the same reason we publish our methodology: a reader can only judge a claim if they can see the tests it failed as well as the ones it passed.
Is MACD better than a simple moving average crossover? The MACD line crossing zero is the 12-period EMA crossing the 26-period EMA, so that comparison was run as a robustness arm. The zero-line cross showed +0.13 at 10 bars with a rotation p of 0.33, weaker than the signal-line cross and not clearing the null; the bearish zero cross was followed by a negative return 3.2 points more often than baseline, one secondary cell. On this panel neither version was credited over a bare sign of the recent return.
Does MACD repaint? No. Both EMAs and the signal line are recursions on closes up to the current bar, and a crossover is known at that bar's close and never revised. The audit stamped every event at the crossing bar and started the forward window there, so nothing to the right of the event entered the test.
Would different MACD settings change the result? Untested, deliberately. The audit was of the tool as installed, and sweeping settings until one clears is the search the credit test is designed to catch. If a setting were to be tested it would need its own pre-registered protocol, and the family-wise correction would have to cover every setting tried.
Why publish a positive result you don't credit to the indicator? Because the alternative is publishing only the half that flatters the conclusion. The crossover's Δ was real by every pre-registered criterion at its own cell, and the credit test was equally pre-registered and failed. Reporting one without the other would be the overclaiming this series exists to avoid, and the forward-tracking log is where a borderline result belongs.
If you would like to see what a calibrated expected range shows on the same crossover bars — descriptive context for whether a move was large or ordinary, with its calibration record and limits published on the Proof page — the Behavioral Transform Model draws one on any TradingView chart. You can start a free 30-day trial and compare it with the oscillator you already use.
Oisigma provides descriptive market analytics for educational use. It is not investment advice, does not predict prices, and does not provide buy or sell signals. Statistics referenced are historical and were measured in our working paper (not peer-reviewed); past behavior is not a guarantee of future results. Trading and investing involve substantial risk of loss, including the possible loss of all capital invested. Leveraged products (futures, options, margin) carry additional risk and can result in losses that exceed your initial investment. Bollinger Bands® is a registered trademark of John Bollinger; Oisigma is not affiliated with or endorsed by Mr. Bollinger. RiskMetrics® is a registered trademark of MSCI Inc.; Oisigma is not affiliated with or endorsed by MSCI Inc. Nothing in this article is a recommendation to use any particular strategy. Read the full Disclaimer →
Try it free for 30 days and see the range update as new bars print, on whatever symbols and timeframes you actually trade.
30 days free, then $15/mo. Cancel anytime from your account.
Pick up where you left off.