# 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.

Canonical: https://patternsradar.com/blog/chartink-formulas-to-sift

Published 2026-08-16. Related scans: https://patternsradar.com/screener/rsi-oversold-turn.md, https://patternsradar.com/screener/macd-bullish-cross.md, https://patternsradar.com/screener/volume-shockers.md, https://patternsradar.com/screener/previous-day-high-break.md

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:

```sift
rsi(14) crossed above 30
```

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

```sift
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](https://patternsradar.com/screener/rsi-oversold-turn.md) scan is this pattern with a trend filter; the same grammar drives the [MACD bullish cross](https://patternsradar.com/screener/macd-bullish-cross.md).

## 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:

```sift
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:

```sift
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](https://patternsradar.com/screener/previous-day-high-break.md) 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:

```sift
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](https://patternsradar.com/screener/volume-shockers.md), 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](https://patternsradar.com/blog/how-to-backtest-a-stock-scan.md).

The [full language reference](https://patternsradar.com/docs/sift.md) documents every field and operator, with runnable examples; the [comparison page](https://patternsradar.com/compare/chartink-alternative.md) has the feature-by-feature table.
