Correlation Radar

User guide · reading the matrix

User guide

Turn 1-second ticks into market timing you can actually read

Correlation Radar watches Binance USDT pairs in real time and answers two questions on a rolling window: how closely does a follower move with its leader (correlation, r) and who moves first (lead/lag in seconds). This guide shows what every number means, a repeatable way to analyse it, and the mistakes that make correlation look smarter than it is.

⏱ 8 minute read 📡 Binance public streams 🖥 Desktop & mobile 🧪 Not financial advice

01What this tool measures

Every second, Binance sends a ticker update for each pair. The server stores those prices in an in-memory buffer and converts them to 1-second log returns (percentage moves). For every leader → follower pair it then computes two things on the selected rolling window:

📈 Correlation r

Pearson correlation of the return series, from −1 to +1. It answers: when the leader moves, does this follower move the same way, at the same time?

⏱ Lead / lag

Returns are shifted from −maxLag to +maxLag ticks and the shift with the strongest |r| wins. Negative = follower lags, positive = follower leads.

🧮 Rolling window

1m = 60 ticks, 5m = 300, 15m = 900, 1h = 3600. Shorter windows react faster but are noisier.

Sync, lag or lead?

Sync means the strongest relationship is at zero shift — the pair moves together tick for tick. Lags 2.1s means the follower typically reacts about two seconds after the leader. Leads means the follower is early.

The 0.50 noise guard

Scanning ±20 shifts makes even random series produce a peak near 0.3, so a peak below |r| = 0.50 is shown as “No clear lead/lag” with a zero lag instead of a fake timing edge. The raw peak is still available in the tooltip and the CSV export.

02Quick start (60 seconds)

Nothing needs to be typed to get your first matrix: BTC is the leader and the 20 most liquid USDT pairs are pre-loaded as followers.

1

Open the dashboard

Visit the tool root. On a first visit it starts streaming automatically with the starter set.

2

Prune the followers

Click the × on any chip to remove it, use Clear all to start fresh, or search any Binance USDT pair to add it back.

3

Let the buffer warm up

The status pill turns green after roughly 20 ticks (~20 seconds). Cells show waiting until enough returns exist.

4

Read the strongest rows first

Set the strength filter to Strong only or switch to Heatmap view to see the loudest relationships instantly.

5

Validate on a second timeframe

If r and the lag survive on 1m and 15m as well, the relationship is more than one noisy window.

6

Save or share your setup

Export a CSV snapshot, save a preset for later, or copy a deep link such as the one below.

http://localhost:3000/?leaders=BTCUSDT&followers=ETHUSDT,SOLUSDT,BNBUSDT

Deep links auto-start

When a link contains both leaders and followers, the dashboard applies them, saves them and starts streaming immediately — handy for sharing one specific view.

03Dashboard anatomy

Two cards do all the work. The left one chooses what to compare; the right one shows the answer.

ElementWhat it does
Leaders chips The coin(s) you expect to move first. Up to 6; the default is BTCUSDT.
Followers chips Up to 24 coins tested against every leader. 20 are pre-loaded; remove with × or Clear all.
Timeframe Rolling window length: 1m / 5m / 15m / 1h of ticks. Changing it refetches immediately.
Strength filter Hides rows below |r| 0.3 (Medium+) or 0.5 (Strong only). Purely visual — data stays intact.
Max lag How many seconds around zero the lag scan searches: ±10, ±20 (default) or ±40.
Alerts Toast + desktop notification once per pair when |r| crosses your threshold, then re-arms.
Status pill Idle → Connecting → Warming up → Live. Amber/red means the API is struggling.
Matrix / heatmap One row per follower, one column per leader. Green = positive, red = negative, neutral = no signal.
Meta line Pairs ready, window, samples and the timestamp of the last successful poll.

Everything is in memory

The server keeps roughly 4,000 ticks per symbol. A restart or a Render cold start starts the counters from zero, so the matrix needs its warm-up again.

04How to read a cell

Each cell packs strength and timing. The big number is r; the line under it is the lead/lag verdict.

0.79
sync
0.64
lags 2.1s
0.18
no clear lag
−0.72
leads 1.4s

Hover any cell for the tooltip: peak r, raw lag in ticks, direction and sample count. The same fields appear in the CSV export.

Strength scale

|r| rangeWhat it usually means
0.85 – 1.00Very strong. Near-identical moves; mostly the same trade in two tickers.
0.60 – 0.85Strong. Reliable co-movement inside this window — the useful zone for relative-strength work.
0.40 – 0.60Moderate. Real but loose; verify the lag and the sample count before acting.
0.20 – 0.40Weak. Mostly background noise; only interesting when it persists for hours.
−0.20 – 0.20No usable relationship on this window. The tool says waiting when a series is flat.
−1.00 – −0.60Strong inverse. Moves against the leader — rare on spot pairs, more common around funding/stablecoin quirks.

Timing is the fragile half

Strength repeats; exact latency does not. Treat any lag under 3 seconds as “same tick” in practice — exchange latency, the 3-second poll interval and the 1-second tick cadence are all bigger than the differences you are reading.

05A repeatable analysis workflow

One reading is a data point. The value comes from repeating the same five steps and noticing what changes. This is the routine the tool is designed around.

1

Choose one driver

Start with BTC (or ETH during an ETH-led session). Keep leaders to one or two: every extra leader multiplies the rows you have to interpret.

2

Scan for strength, not for beauty

Switch to Strong only and heatmap view. Write down the top three rows and their sample counts. Ignore everything under 0.4 in the first pass.

3

Stress-test the lag

Flip between 1m, 5m and 15m. A real lead/lag survives with roughly the same sign; a lag sitting exactly at ±maxLag is usually an artefact.

4

Confirm persistence

Leave the tab running for 10–15 minutes (samples above ~150). Watch whether the cell keeps its colour instead of flickering between green and neutral.

5

Record and compare

Export a CSV or save a preset, then repeat at a different time of day. Changes between snapshots are the actual signal; any single snapshot is just context.

What a real read looks like

BTC → ETH at 0.79 · sync and BTC → BNB at 0.80 · sync means those two are effectively the same beta trade right now. BTC → SOL at 0.15 · no clear lag means SOL had its own driver in that window. Conclusion: rotate inside the first group, do not treat SOL as a BTC proxy today.

Beware duplicate rows

In a risk-off hour, almost every alt shows 0.7+ against BTC. That is one piece of information repeated 20 times, not 20 opportunities. Ask “what is different about this row?” before adding it to a watchlist.

06What to use it for

These are analytics jobs the matrix does well. None of them is a buy or sell signal on its own.

🔁 Rotation & relative strength

Find the follower that is decoupling from a strong leader — often the one with its own bid.

⚖ Hedge & beta sizing

A 0.85 pair behaves like one position twice. Use it to see how much overlap a hedge really removes.

🧺 Portfolio concentration

If six of your eight coins sit above 0.7 against BTC, your “diversified” book is one trade.

🆕 Listing & narrative research

Watch a fresh pair for a day: does it track BTC immediately, or trade on its own flow?

⏱ Execution research

Measure how many seconds a thin pair trails the leader before assuming you can front-run it.

🔔 Decoupling alerts

Set a high threshold and let the toast tell you when a normally tight pair breaks its link.

Use it as a filter, not an oracle

The strongest practical use is elimination: skip setups that are just hidden copies of the same trade, and spend attention on the rows that behave differently.

07Feature cheat sheet

ControlWhat happensTip
Start live / Stop live Subscribes the server to the selected streams and polls every 3 s. Stopping releases the streams so the free instance can idle.
Clear all Empties the follower list after a confirmation and pauses streaming. Faster than removing 20 chips one by one.
Heatmap view Same numbers as colour blocks — fastest way to spot outliers. Hover for the exact r and lag.
Export CSV Snapshot of every pair: r, peak r, lag ticks/seconds, direction, samples. Keep snapshots to compare regimes across the day.
Save preset Stores leaders, followers, timeframe, filter, lag, alerts and view in this browser. One preset per strategy: “Majors”, “L2s”, “New listings”.
Alerts Fires once per pair when |r| crosses the threshold, re-arms when it drops. Needs notification permission; falls back to in-app toasts.
Deep link URL query pre-fills both lists and auto-starts streaming. ?leaders=BTCUSDT&followers=ETHUSDT,SOLUSDT
Theme toggle Dark/light, remembered in localStorage across all pages. Light theme is easier on projectors.

08Rules that keep you honest

These are the points most likely to save you from a bad decision made on a green screen.

1

Correlation is not causation — and not direction

r = 0.8 does not mean the leader causes the follower; both may react to the same order flow. And r has no trend in it: two coins can be tightly correlated while both fall.

2

Sample size first, then strength

A 0.9 built on 25 samples is mostly luck. Prefer readings with 150+ samples and plenty of non-zero returns; the sample count is shown in the tooltip and in the meta line.

3

Re-check across timeframes

A relationship that only exists on 1m may be microstructure noise. Strong correlation on 5m and 15m is a much better base.

4

Treat 0.50 as a floor, not a target

The lag guard only filters obvious noise. A 0.52 “lag” is still fragile — do not build a strategy on the weakest cell that happens to pass the filter.

5

Read percentage moves, not price levels

A $100k coin and a $0.00001 coin can both move 1% in a second. The tool compares returns for exactly this reason, so never translate r into “similar price”.

6

Expect the data to disappear

Buffers are in memory. Server restarts, deploys, Render free-tier sleeps and idle stops all reset the window — the matrix will say warming up again.

7

This is an analytics tool, not advice

Nothing here is a recommendation, a forecast or a promise. Trading crypto can lose money faster than it makes it — read the disclaimer before acting on anything you see.

09Troubleshooting & FAQ

Cells say “waiting” and nothing else

The buffer has not collected enough returns yet, or the selected pair is barely trading. Wait ~20 seconds after starting; if it stays empty on 1h, switch to 1m or pick a more liquid follower.

The status pill is amber / red

Warming up is normal. Connection issue or Reconnecting… means the local API poll failed — check that npm start is still running and open /health in a new tab.

A coin disappeared by itself

Binance rejected the pair (delisted, wrong suffix or not a spot USDT market), so the server reported it as invalid and the UI removed the chip. Add it again from the search results to use the exact symbol.

The lag is exactly ±10, ±20 or ±40

The scan hit its search boundary. That usually means there is no real peak inside the range — raise max lag, or accept no clear lag and work with r only.

Alerts are not popping up

Browser notifications need permission and HTTPS (or localhost). If permission is blocked the tool still shows in-app toasts. Also check that |r| actually crossed your threshold after you enabled alerts.

I cleared my followers — is that permanent?

Only for this browser profile: the saved selection is empty, so the pre-loaded starter set is not refilled again. Search any pair to rebuild the list, or save a preset first.

Does this work if Binance is blocked in my region?

Not without a proxy or a different host. The server needs outbound access to Binance's public WebSocket and REST endpoints; without it the matrix stays empty and health shows reconnect attempts.

10Glossary

TermMeaning in this tool
TickOne price update stored with its timestamp. Binance's mini-ticker pushes about once per second.
Log returnln(pricenow / price1s ago) — the percentage move the maths runs on.
Rolling windowThe last N returns used for a calculation: 60 / 300 / 900 / 3600.
Pearson rLinear co-movement between two return series, −1 … +1.
Peak rThe strongest |r| found across all lag shifts, before the 0.50 noise guard.
Lag / leadFollower reacting after (lag) or before (lead) the leader, measured in seconds.
SyncStrongest relationship at zero shift — no usable timing difference.
SamplesNumber of paired returns in the window; a proxy for how much evidence backs the number.
Warm-upThe first ~20 seconds after starting, while the buffer fills.
Preset / deep linkA saved setup in this browser, or a URL that carries leaders and followers.