16 Aug 2026

Translating Chartink formulas to Sift

How Chartink's offset-comparison formulas map to Sift's event operators — with side-by-side translations of the crossover, the streak, the N-day high and the volume multiple.

Every Chartink scan is built from one move: compare a value at one offset with a value at another. It is a workable idea that becomes a tower — a crossover is two comparisons, a three-day streak is three, and a "crossed above within the last 3 days" is a stack of parenthesised clauses that you read twice and trust once. Sift's premise is that these are events, and events deserve their own grammar. Here is the translation table, pattern by pattern.

The crossover

Chartink's idiom for "RSI crossed above 30" is yesterday-below-and-today-above:

Daily RSI(14) crossed above 30

— which its interface builds as 1 day ago RSI(14) < 30 AND latest RSI(14) > 30. In Sift the event is the operator:

rsi(14) crossed above 30

And the version Chartink cannot express cleanly — crossed above recently, not necessarily today — is one word longer:

rsi(14) crossed above 30 within 3 bars

That "within" is the difference between catching the turn on the day it happens and catching it while it is still fresh. The RSI oversold turn scan is this pattern with a trend filter; the same grammar drives the MACD bullish cross.

The streak

"Close above the 21-EMA for each of the last 10 days" in offset form is ten ANDed comparisons — latest close > latest EMA(21) AND 1 day ago close > 1 day ago EMA(21) AND … — and nobody writes the tenth without copy-paste. In Sift a streak is a condition with a duration:

close has been above ema(21) for 10 bars

The same shape covers rising sequences: volume rising for 3 bars replaces three chained volume comparisons.

The N-day extreme

Chartink expresses "highest close in a year" through Max(250, close). Sift says which extreme it means:

close is highest in 52w

Windows take natural units — 52w, 3mo, 20 bars — so the number in the query is the number you mean, not a bar-count conversion you did in your head. Yesterday's levels are offsets, exactly as in Chartink but spelled readably: the previous-day high break is built on close > high[-1], plus a volume filter to keep it honest.

The volume multiple

The one everyone builds first. Chartink: latest volume > 2 * SMA(volume, 20). Sift keeps the arithmetic but flattens the ceremony:

volume > 2x avg(volume, 20)

Add and change > 5 and you have rebuilt Chartink's most-cloned scan — which exists here prebuilt as volume shockers, for the same reason it is popular there: it is the shortest path to the day's unusual names.

What does not translate

Honesty owed to anyone migrating: Chartink is a real-time scanner, and its intraday timeframes — 15-minute crossovers, opening-range logic mid-session — have no Sift equivalent, because this dataset updates once, after the close. If your workflow fires during market hours, keep Chartink for that half. What you gain on this side is the other half Chartink does not have: every translated scan carries a hit-rate replay, so the setup you have been running on faith reports whether it has actually worked.

The full language reference documents every field and operator, with runnable examples; the comparison page has the feature-by-feature table.