I was helping someone tune a composite score last quarter, one of those blends that mixes momentum, trend, and volatility signals into a single number between zero and a hundred. It looked reasonable on paper. Twelve inputs, each contributing a slice of the score, all sensibly named. Then I ran the correlation matrix on the underlying series and three of the twelve inputs were basically the same line drawn three times.
RSI, a fast stochastic, and Williams %R. If you have ever plotted those on the same chart you already know where this is going. They turn at roughly the same time, they bottom at roughly the same time, and their day-to-day moves track each other closely enough that calling them three separate signals is generous. So this composite was not weighting momentum at one twelfth. It was weighting momentum closer to a quarter, because one idea had snuck in wearing three different name tags.
Why the same oscillator keeps showing up
Most bounded momentum oscillators are doing the same arithmetic with cosmetic differences. They ask where the current price sits relative to its recent range, and they normalize that into a fixed band. Williams %R is close to a mirror image of the fast stochastic %K, just flipped and shifted. RSI gets there by a different route, comparing average up-moves to average down-moves, but over a similar lookback it ends up strongly correlated with the other two because it is answering the same underlying question. Is price stretched high or stretched low inside its recent range.
When you stack correlated inputs in an unweighted or naively weighted composite, you are not adding independent evidence. You are letting one factor speak louder by giving it more microphones. The score feels confident because three of its components agree, but of course they agree. They were always going to. The dangerous part is that the confluence looks earned. A composite that reads eighty because momentum, trend, and value all lined up is telling you something. A composite that reads eighty because momentum showed up three times is telling you the same thing three times and pretending it counted the votes.
Running the check
The fix is not exotic. You need a correlation matrix on the candidate inputs and a little discipline about reading it. Here is the workflow I use.
- Compute each candidate indicator over your actual universe and history, not a toy sample. Redundancy is data-dependent, so use the series you will really feed the composite.
- Take the pairwise correlations. I lean on Spearman rank correlation rather than Pearson, because a lot of these signals relate monotonically without being cleanly linear, and rank correlation is harder to fool.
- Convert correlation into a distance, roughly one minus the absolute correlation, so that highly correlated pairs sit close together. Absolute value matters because a signal that is the perfect inverse of another, like a raw and a flipped oscillator, is just as redundant as a perfect copy.
- Cluster on that distance. Hierarchical clustering works well here because you can look at the tree and pick the cut yourself rather than committing to a number of clusters up front.
- Keep one representative per cluster. Everything else in that cluster gets dropped or explicitly down-weighted, not silently averaged in.
A rough threshold I have found useful is treating pairs above roughly 0.8 absolute correlation as candidates for the same cluster, and looking hard at anything above 0.9. Those numbers are not sacred. They depend on your timeframe and how many inputs you have. On short lookbacks the momentum family tends to cluster tighter, and on longer horizons trend indicators start bleeding into each other too. The point of the threshold is to force a decision, not to make it for you.
Choosing the survivor
Once a cluster is identified, you keep one representative, and which one you keep is a judgment call worth spending a minute on. I tend to favor the input that is cheapest to compute, easiest to explain, and most stable to small parameter changes. If RSI, a stochastic, and Williams %R are clustered, I usually keep RSI, because it is the one most people can reason about and it does not swing wildly when I nudge the lookback by a day. But if one of the others has a cleaner relationship to the thing I actually care about downstream, I will keep that instead. The rule is one survivor per cluster, not one specific favorite indicator forever.
There is a subtler version of this trap worth naming. Two inputs can be individually distinct and still be redundant as a pair once a third input is in the mix. Correlation is pairwise, so a plain correlation matrix will not always catch a signal that is a near combination of two others. If you want to be thorough, you can check whether any candidate is well predicted by a regression on the rest, which is the variance inflation idea from ordinary regression. For most practical composites the pairwise matrix catches the loud offenders, and the loud offenders are usually the momentum triplets. I would start there before reaching for anything heavier.
What you get back
After the prune, each point of the composite reflects a genuinely separate piece of evidence, which changes how you read confluence. When four uncorrelated inputs line up, that agreement means something, because they had no structural reason to agree. When your old bloated version lit up green, half the time it was momentum congratulating itself. When we rebuilt the market scorecards inside Blockcircle, collapsing the redundant momentum inputs did not make the scores look dramatically different day to day. What it changed was the edge cases, the moments where the naive composite screamed a strong reading off the back of one over-represented idea and the pruned one stayed honest and merely warm.
You do not have to do this constantly. Run the correlation matrix once when you design the composite, run it again if you add or swap inputs, and glance at it if you ever move to a very different timeframe where the clustering can shift. The rest of the time you can trust that your score is counting distinct votes. It is a small piece of hygiene, and it is the difference between a composite that measures several things and one that measures one thing loudly and calls it a consensus.