A three-part momentum oscillator that blends a short-term RSI, an RSI of price streaks, and a percentile rank of recent price change into one 0-100 line.
Connors RSI (CRSI) is a composite momentum oscillator developed by Larry Connors and Connors Research. Instead of measuring momentum a single way like the classic RSI, it combines three separate measurements into one value that oscillates between 0 and 100. The intent is a faster, more sensitive reading of short-term momentum than a standard RSI alone. It is an educational analysis tool, not a buy or sell signal, and nothing about it predicts future price. Trading carries a real risk of loss.
CRSI is the simple average of three components, each scaled 0-100: 1. Price RSI: a short-period RSI of the closing price (default length 3). This is the standard RSI most traders already know, just run on a very short lookback. 2. Streak RSI: an RSI (default length 2) applied to the "up/down streak" — a counter that increases by 1 for each consecutive higher close, decreases by 1 for each consecutive lower close, and resets to 0 on an unchanged close. This component reflects how persistent a run of closes has been. 3. Percent Rank of ROC: the percentile rank (default lookback 100) of the most recent single-period rate of change relative to the prior rate-of-change values in the lookback window. It places the latest price change in the context of recent changes. The final value is (PriceRSI + StreakRSI + PercentRank) / 3. Because two of the three inputs use very short periods, CRSI tends to move faster and reach extremes more often than a standard 14-period RSI. Note that the components measure related but distinct things, so combining them does not necessarily make the result more reliable — only more responsive.
Defaults from Connors Research: Price RSI = 3, Streak RSI = 2, Percent Rank lookback = 100. Commonly referenced zones are above 90 (short-term overbought) and below 10 (short-term oversold), with 50 as the midline. All of these are conventions to test, not fixed rules, and they are not signals to act on.
//@version=6
indicator("Connors RSI (CRSI)", shorttitle="CRSI")
rsiLen = input.int(3, "Price RSI Length")
streakLen = input.int(2, "Streak RSI Length")
rankLen = input.int(100, "Percent Rank Length")
// 1) RSI of price
priceRsi = ta.rsi(close, rsiLen)
// 2) Up/down streak length
var float streak = 0.0
streak := close > close[1] ? (streak >= 0 ? streak + 1 : 1.0) :
close < close[1] ? (streak <= 0 ? streak - 1 : -1.0) : 0.0
streakRsi = ta.rsi(streak, streakLen)
// 3) Percent rank of 1-period ROC
roc = ta.roc(close, 1)
pctRank = ta.percentrank(roc, rankLen)
crsi = (priceRsi + streakRsi + pctRank) / 3
plot(crsi, "CRSI", color=color.blue)
hline(90, "Upper", color=color.gray)
hline(10, "Lower", color=color.gray)
hline(50, "Mid", color=color.new(color.gray, 60))Pro tip: Before relying on any CRSI threshold, check how often your chosen instrument and timeframe actually reach it. On short default settings, 90/10 extremes can appear several times a week, so many traders treat the level as context to study alongside trend or structure rather than reading any single extreme in isolation. This is an observation about behavior, not a recommendation to trade.
Educational only — not financial advice, not a recommendation to trade. No indicator is predictive; trading involves substantial risk of loss.