QA GATE · GOOD 18/18 automated ai-check.js · 18 readability, YMYL and image gates · mechanics verified against vike-indicators · live real-data chart embedded
Burstiness (sentence-length SD)9.7
Lexical diversity (MATTR-50)0.83
Consecutive similar sentences2
Repeated paragraph starts (≥3)0
AI-marker phrases0
Demonstrated experience2
Avg sentence length (words)17.7
Repeated 5-grams0
H2 section balance (50–500w)0 off
YMYL risk disclaimeryes
Mechanics verified vs codeyes
Primary keyword coverageyes
Internal links + CTA3
Content visuals9
Every figure has a caption9/9
Alt / caption text coverage100%
Distributed (≥1 per section)5/6 (83%)
Filenames sluggedn/a (inline)
Live interactive chart4 real
Pair seam counted from source8 functions
Learn · Trading Indicators · Momentum

Relative Strength: Two Different Meanings, and the Kernel Our Engine Ships

Relative strength is two unrelated ideas wearing one name, and mixing them up is the most common mistake on this topic by a wide margin.

One meaning compares an asset to a benchmark: is ETH beating BTC? The other is Wilder's Relative Strength Index, which compares an asset to its own recent gains and losses and never looks at a second instrument. Our indicator engine ships both, on two different seams, and this page is mostly about the first.

Two meanings, one phrase

cross-asset strengthclose ÷ benchmark closeTWO price seriesour name for it: ratioRelative Strength Indexown gains ÷ own lossesONE price seriesour name for it: rsione phrase, two unrelated calculationsgrepping every crate for relative_strength returns zero hits
The overlap is the word, not the arithmetic. Everything on the right is bounded between 0 and 100; nothing on the left is bounded at all.

The vocabulary collided decades ago and nobody has untangled it since.

Cross-asset strength is a comparison between two price series. You divide one by the other and watch the quotient — rising means the numerator is outperforming, falling means it is lagging, and the absolute level means nothing whatsoever on its own. That is the sense in which a fund manager says a sector has relative strength.

Wilder's index is a different animal entirely. batch_rsi, at base.rs:164, splits one instrument's bar-to-bar changes into gains and losses, smooths each with his own recursion, and maps the ratio onto a 0–100 scale. There is no benchmark anywhere in it. The full walkthrough lives on the RSI page, and the only thing the two ideas share is the word "strength" inside a ratio.

Searching every crate for relative_strength returns nothing at all. The concept is real and our name for it is different, which is the sort of detail that makes documentation useless if you skip it.

The seam our engine keeps it on

the pair seam — its own trait, its own registrybuild_pair_registry, pairs.rs:589ratiopairs.rs:215close ÷ benchmarkno paramsspreadpairs.rs:227close − benchmarklog = 0spread_zscorepairs.rs:247z-score of the hedged spreadperiod 20betapairs.rs:272cov(rA, rB) ÷ var(rB)period 5correlpairs.rs:313pearson of price levelsperiod 30correl_logpairs.rs:345pearson of log returnsperiod 30half_lifepairs.rs:402OU reversion time, in barsno python twinkalman_betapairs.rs:459time-varying hedge rationo python twinthe crate header still says 6; the function returns 8so the real total is 171 + 8 = 179, not 177
Counted out of the source by scan_registry.py. The two at the bottom are new work rather than ports, which is the likeliest reason the header never moved.

A two-series question cannot fit the trait every other indicator uses.

That trait hands a function one slice of bars — vectorize(&self, bars: &[Bar]) — so a benchmark has nowhere to enter. Rather than bend it, the crate opened a second seam: pairs.rs, with its own PairIndicator trait whose methods take two aligned series, and its own registry built by build_pair_registry at pairs.rs:589.

Eight functions live there: ratio, spread, spread_zscore, beta, correl, correl_log, half_life and kalman_beta. None of them appear in the 171-entry registry the rest of the section counts, because that one never sees this file.

Two honest caveats come straight out of the source. The crate's own header says wiring a live benchmark feed "is out of scope (no second-instrument live seam exists yet)", so these are batch functions with a parity gate and no live plumbing behind them. And that same header advertises six pair indicators and a total of 177; the registry function actually returns eight rows, which makes the real total 179. I found that by counting the source rather than trusting the summary, and it is worth a look at your own docs.

The ratio, exactly as the kernel computes it

what the engine returnsclose[i] ÷ benchmark[i]empty parameter listwhat the chart shows× 100 ÷ its own first valuethe caller’s choice of start barthe quotient, and the rebasing that is not in itratio parity vs the Python twin: 0.000e+00 over 360,860 valuescorrel 352,218 · beta 359,370 · both also exact
Rebasing moves the whole line when you move the left edge of the window. That is a property of the drawing, not of the two assets.

It is one division, and the sparseness is the interesting part.

How Vike computes it. The kernel behind Ratio is batch_ratio at pairs.rs:215. For each index it writes close_a[i] ÷ close_b[i], leaving NaN wherever the benchmark's close is zero. Its registered parameter list is empty — no length, no smoothing, no rebasing, no warm-up. Registered at pairs.rs:601 as "ratio", pretty-printed as "Price Ratio".

So the "RS line" you have seen on charts is not what the engine returns. That line is usually rebased — divided by its own first value and multiplied by 100 — and the rebasing is a decision about where your window starts, not a property of the data. The figures below draw it that way and label it as ours, not the crate's.

When I ported the kernel and two of its siblings, all three matched their Python twins to the bit: ratio across 360,860 values, correl at period 30 across 352,218, and beta at period 5 across 359,370, every one at 0.000e+00. The two newest pair functions, half_life and kalman_beta, have no Python twin at all — the source says so — so nothing can be checked against them.

What a rising ratio does not mean

as of 2026-01-31 · 279 pairs traded · 273 with enough historybenchmark over the 90 barsBTC -28.8%beat the benchmark AND lost money32 of 273lost to the benchmark AND made money0 of 273the asymmetry is the benchmark’s own fall, not a property of the measure
Outperformance and profit are different quantities. In a falling benchmark almost everything that outperforms is still down.
ROSE/USDT daily — a real ratio reading detected 2026-01-31, gained +37.2% on BTC over 90 bars while its own price fell -2.3%.
AERGO/USDT daily — a real ratio reading detected 2026-01-31, the flattest ratio in the table, +0.2% over 90 bars, while its own price moved -28.6%.
DUSK/USDT daily — a real ratio reading detected 2026-01-31, the strongest ratio on the tape, +212.7% over 90 bars against +122.7% of its own.
NIL/USDT daily — a real ratio reading detected 2026-01-31, the weakest ratio on the tape, -75.5% over 90 bars against -82.7% of its own.
The lower pane on each figure is the rebased ratio, which is the reader’s arithmetic and not the engine’s — batch_ratio returns the bare quotient and rebases nothing. Two of the four below rose against the benchmark while the asset itself went nowhere good.

This is where the concept bites people, and our tape puts a number on it.

A ratio talks about two things at once, so either one can move it. An asset can gain on its benchmark by falling more slowly, which is outperformance and is also a loss. Taking 2026-01-31 as the as-of date — the day the largest number of pairs on our tape traded, 279 of them — Bitcoin had fallen 28.8% over the preceding 90 bars. Of the 273 pairs with enough shared history, 32 gained on Bitcoin while losing money, and none managed the reverse.

One of them is charted below: a token whose ratio climbed 37.2% while its own price slipped 2.3%. Everything about the relative-strength reading was correct and a position in it would still have lost.

The mirror trap is a flat ratio. Another example below shows a ratio that moved 0.2% over the same window while the asset itself dropped 28.6% — perfect tracking, total loss. Relative strength is silent about absolute outcomes by construction, and no amount of smoothing changes that.

Correlation and beta, the two siblings worth reading

-1+0+1-0.77median +0.79+1.00correl(30) against the benchmark, across every paira ratio between two series correlated at +0.9 is mostly noise
The measure is least stable exactly where it looks cleanest. correl_log asks the better version of this question, on returns rather than levels.

If you are going to use a benchmark, two other pair functions tell you whether the comparison is even meaningful.

correl at pairs.rs:313 is a rolling Pearson correlation of price levels, running-sum form, clamped to the −1 to +1 interval, registered default period 30. Its log-return cousin correl_log answers a different and usually better question, since correlated levels can just mean two things drifted upward together.

beta at pairs.rs:272 is a rolling cov(rA, rB) ÷ var(rB) over simple returns, registered default period 5 — a very short window, so expect a noisy line. One detail matters more than the number: its buffer is cleared whenever either return is undefined, so a single unusable bar restarts the whole warm-up rather than straddling the gap.

Across our 273 pairs, correlation to Bitcoin over the trailing 30 bars ran from −0.77 to +1.00. The median sat at +0.79. At the high end a ratio is measuring a small residual between two nearly identical series, which is exactly when it is most tempting and least stable.

Frequently asked questions

Is relative strength the same as RSI? No, and the collision is purely linguistic. RSI reads one instrument against its own history; cross-asset relative strength divides one instrument by another.

What should I use as a benchmark in crypto? Bitcoin is the usual choice and is what every figure here uses. Any liquid, long-history series works; the answer changes with the benchmark, so state it whenever you quote a number.

Does the engine ship a relative strength line? It ships the raw quotient with an empty parameter list. Rebasing to 100, smoothing, or turning it into a rating are all things a caller does afterwards.

How long a window should I compare over? Ninety bars is what these figures use, chosen before the data was inspected. Shorter is noisier; longer is stale.

Can an asset have strong relative strength and still be a bad trade? Yes. On one measured date, 32 of the 273 pairs carrying enough history beat Bitcoin while still losing money outright, which is the single most important line on this page.

This is educational material, not financial advice. Every measurement here comes from bars that have already closed, past behavior generalizes poorly to future bars, and trading carries real risk of loss — size any position so that being wrong stays survivable.

Read the RSI breakdown