Momentum Trading: What It Means, and the 36 Momentum Functions Our Engine Ships
Momentum trading is a methodology rather than a tool. It buys what has been going up on the theory that it keeps going up a while longer, and the whole discipline lives or dies on that one unproven clause.
No single function implements it. What our indicator engine does have is a family: 36 registered functions whose job is to say how one-sided the recent move has been. This page walks that family, ports four of its kernels straight out of the source, and shows where they stop agreeing with each other.
What the idea actually claims
Strip the vocabulary away and one assertion is doing all the work: recent direction persists.
That is a claim about autocorrelation, and it is testable rather than philosophical. It is also fragile — the same assertion inverted gives you mean reversion, and both camps point at real charts. Which one holds depends on the asset, the horizon and the regime, none of which any momentum function is given.
Every indicator below is a measurement, not the methodology. A function that reports the last ten bars were strongly up has told you something true about the past. Turning that into a position adds an assumption the function never made.
The 36 functions our registry files under momentum
registry.rs by scan_registry.py, never typed — which is why this grid can be trusted after the engine changes.Counted out of registry.rs rather than typed, which is what makes the number worth printing.
They are not in one file, and the reason is in a comment. momentum.rs opens by saying it is a port of the Python engine's momentum module and that it "skips the names already in base.rs (rsi/macd/stochastic/cci/roc/ao→awesome/williams_r→williams)". Twenty-nine kernels there plus seven in base.rs gives the 36 the registry reports.
Five of them have full pages here: the RSI, the MACD, the stochastic oscillator, the Stochastic Momentum Index and the Relative Vigor Index. A sixth, ADX, is filed here too, which surprises people who think of it as a trend tool.
Look down the list and the redundancy is impossible to miss. Four separate registered functions — mom, rocp, rocr, rocr100 — differ only in whether the answer arrives as a difference, a fraction, a ratio or a percentage, and a fifth, roc, is a sixth variation living in another file entirely.
Four kernels, one question, four answers
Here is what those four actually execute, in full, because it takes four lines.
How Vike computes them.batch_momatmomentum.rs:72returnsc[i] − c[i−p].batch_rocpatmomentum.rs:82returns(c[i] − prev) ÷ prev.batch_rocratmomentum.rs:93returnsc[i] ÷ prev. Andbatch_roc, over inbase.rs:255, returns100 × (c[i] − prev) ÷ prev. Registered default period is 10 for all four. Nothing is smoothed, nothing is bounded, and the warm-up is not a partial value — it is nothing at all.
Because they are monotone transforms of the same two prices, the four cannot disagree about the sign of momentum on a single asset. I checked that rather than assuming it: across 357,868 daily bars carrying all four readings, the number of bars where they disagreed about sign was zero.
One parity result here is unusual enough to state plainly. Three of the four match their Python twins bit for bit, on all 361,157 values. The fourth does not, and the reason is pure floating point: our crate writes 100.0 (c[i] - prev) / prev while the Python side writes (v[i] / v[i-p] - 1.0) 100.0. Those are the same number in real arithmetic and different numbers in IEEE-754. They differed on 308,956 of 361,157 values, by at most 4.547e-13.
Where the four stop agreeing
Change the question from "is this asset up?" to "which asset is up most?" and the family splits immediately.
batch_mom answers in price units. A coin trading near 3,000 that moves 1% produces a bigger reading than one priced at 0.30 that triples. Rank a universe by it and you have ranked it largely by price tag.
Take a single day off our tape to see the size of it. On 2026-01-23, with 279 symbols reporting, the ten strongest by batch_mom and the ten strongest by batch_roc shared just seven names — and the first list opens with PAXG, a token pegged to an ounce of gold, which had barely moved. The percentage form put AXS, DUSK and STG on top instead.
So the rule I use is simple. For one asset over time, pick whichever of the four you find readable, because they carry identical information; for a screen across a universe, only the normalized forms mean anything at all.
What a reading does not tell you
Four real readings sit below, and two of them reversed inside ten bars.
A momentum value is a completed measurement of bars that have closed. It carries no forecast, and the size of the number is not the size of the edge — very large readings are frequently the tail end of a move rather than the start of one. Our own examples were deliberately drawn from ordinary readings, between 15% and 80% over ten bars, because the spectacular ones on this tape are all 2021 microcap blow-offs and they teach the wrong lesson.
When I am reading one of these, two further limitations stay in mind. There is no volume in any of these functions, so a move on nothing and a move on everything read identically. And there is no volatility normalization either — a 20% reading means something quite different on a stablecoin than on a token that routinely swings 20% in a session, which is the gap batch_natr and the ATR family exist to close.
Frequently asked questions
Is momentum trading the same as trend following? They overlap and are not identical. Trend following usually needs a direction to persist over a long horizon; momentum, as measured by these functions, is a fixed-lookback statement about recent one-sidedness.
What is the best momentum indicator? For a single asset the four kernels above are informationally identical, so readability decides. Across assets, use a normalized one.
What period should I use? Ten bars is our registered default and every figure here uses it. Shorter windows react faster and produce more reversals; there is no setting that removes the trade-off.
Does momentum work in crypto? The arithmetic works on any bars. Whether the persistence assumption holds is an empirical question that changes by asset and regime, and no function on this page answers it for you.
Why is ADX filed under momentum? Because our registry sorts by what a function reads, not by how traders talk about it. The ADX kernel reads directional movement between bars, which puts it in this family regardless of how it is used.
This is educational material, not financial advice. Every number on this page came 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.