Get started

How to Turn a Multi-Signal Feed Into a Single Ranked Trade Queue

Momentum, whale, insider and political signals fire on different clocks. Here is a scoring model that normalizes each one, decays it over time, and merges the pile into one queue you work top-down.

The problem shows up the moment you subscribe to more than one signal source. A momentum trigger fires. Two minutes later a whale wallet moves. An hour after that a political disclosure lands, and somewhere in between an insider filing shows up on a delay that has nothing to do with when the insider actually traded. You end up staring at a feed that is sorted by arrival time, which is the one ordering that tells you nothing about what to do first.

I kept trying to work these feeds like an inbox, oldest at the bottom, newest at the top, and it never worked. The good signals got buried under a pile of noisy momentum flips, and by the time I scrolled to something worth acting on it was half dead. So I stopped treating the feed as a list and started treating it as a queue with a real ranking function behind it. The idea is simple. Every signal, regardless of type, gets collapsed into one number, and you work the queue from the highest number down until you run out of time or conviction.

Get every signal onto the same scale first

The first mistake is comparing raw signals directly. A momentum score and a whale flow number and a congressional trade are not measured in the same units, and they are not even measured in comparable ranges. If you feed them into one ranking without normalizing, whichever signal happens to produce the biggest raw numbers wins every time, which is usually momentum, which is usually the least reliable of the bunch.

So the first step is to map each signal type onto a common zero to one scale before anything else touches it. How you normalize depends on the signal, but the goal is always the same, which is that a 0.8 from a whale feed should mean roughly the same strength of evidence as a 0.8 from a political feed.

  • For continuous signals like momentum or a reversal indicator, rank the current reading against its own recent history. A percentile against the trailing distribution works better than a fixed threshold, because it adapts when volatility changes.
  • For flow signals like whale movements, normalize the size against what is normal for that wallet and that asset. A one million dollar move from a wallet that trades that size all day is a 0.2. The same move from a wallet that has been dormant for months is closer to a 0.9.
  • For discrete events like insider filings or political disclosures, you cannot rank them against a smooth distribution, so score them by category. A cluster of buys from multiple filers scores higher than a single sale, and a sale by someone rebalancing scores near zero because it usually means nothing.

Do this per signal type in isolation, before you ever try to combine anything. If the normalization is wrong, everything downstream inherits the error, and you will spend weeks blaming the merge logic for a problem that lives here.

Decay each signal on its own half-life

This is the part people skip, and it is the part that actually makes the queue usable. A momentum trigger and a political disclosure do not age at the same rate. A momentum flip is close to worthless twenty minutes after it fires. A cluster of insider buys can stay meaningful for weeks, because the people filing them are not trading on a twenty minute view.

So each signal type needs its own decay curve. I use exponential decay, which just means the score fades by a fixed fraction over a fixed period, and you pick that period per signal type based on how long the edge historically persists. The mechanics look like this. Take the normalized score at the moment the signal fired, then multiply it by a decay factor that shrinks as the signal gets older. Assign a half-life to each type, which is the time it takes for the score to fall to half its original value, and let the math do the rest.

Rough half-lives I have landed on, and you should tune your own:

  • Momentum and short reversal signals, measured in minutes to a couple of hours. These die fast and you want them out of the queue quickly.
  • Whale flow, measured in hours to a day, because the position is real and takes time to play out, but the information edge erodes as others notice the same wallet.
  • Insider filings and political disclosures, measured in days to a couple of weeks, because they reflect slow-moving conviction and the disclosure delay already ate the fast part of the edge before you saw it.

The nice property of decay is that it fixes the arrival-time problem automatically. A strong signal from this morning can outrank a weak one that just landed, which is exactly what you want, and a stale momentum flip drops off the queue without you having to manually clear it.

Merge into one priority number

Now you combine. Each live signal has a normalized strength and a decayed weight, and you fold in a conviction multiplier per signal type that reflects how much you trust that source based on how it has actually performed for you. Insider clusters get a higher multiplier than raw momentum because they have earned it. The priority score for a single signal is the normalized strength times the decay times your conviction weight.

The interesting case is when several signals point at the same asset. A whale buys, a political filer discloses a buy, and momentum turns up on the same name inside the same window. You do not want to just take the highest of the three, because agreement across independent signal types is itself information. I add the scores rather than taking the max, but with a cap, so that three weak agreeing signals can climb the queue without a single mediocre signal getting inflated past where it belongs. Independent confirmation is the strongest thing this whole system produces, and the ranking should reward it.

Sort the merged scores descending and you have your queue. Work it top down. The asset with the highest combined, decayed, conviction-weighted score is the first thing you look at, and you keep going until the scores drop below whatever threshold means it is not worth your attention.

Where this goes wrong

A few failure modes worth naming, because I hit all of them.

Correlated signals that pretend to be independent. If your momentum indicator and your reversal indicator are both really just reading price, adding them together double counts the same evidence and the queue rewards a name for one underlying fact twice. Before you trust the additive confirmation logic, check that your signal types are actually measuring different things.

Decay tuned by vibes. It is tempting to guess half-lives. Do not. Look at how long each signal type has historically kept predicting, and set the half-life so the score is roughly worthless right about when the edge is. Backtest the decayed score against forward returns if you can, even crudely.

A threshold that never gets revisited. The cutoff at the bottom of the queue is not fixed forever. In quiet conditions almost nothing clears it and that is correct. In loud conditions everything clears it and the queue becomes an inbox again, so you raise the bar. The threshold is a dial, not a setting.

None of this is fancy. It is normalize, decay, weight, sum, sort. The value is not in any one step, it is in refusing to look at the raw feed ever again. Once the queue is doing the ranking, your job shrinks to working it from the top and being honest about where you stop.

WRITTEN BY
Blockcircle Team

Financial market intelligence covering crypto, stocks, commodities, precious metals, and prediction markets.