How It Trades
- Compute a very short 2-bar RSI (a dip detector), a 200-bar SMA (the long-term trend filter), and a 5-bar SMA (the exit line).
- Buy when the 2-bar RSI drops below 10 while the close is still above the 200-bar average: a sharp two-bar sell-off inside a market that is in a long-term uptrend.
- Sell as soon as the close rises back above its 5-bar average: the dip has bounced; the trade never waits for a big move.
Example Strategy
Pine Script
Paste it into TradingView’s Pine Editor to run these rules on any chart.
//@version=6
// Connors RSI 2 — sort.finance. Fills at the signal bar's close, 0.02% fee a side,
// whole account per trade, as the backtest. History and indicator warm-up
// differ from the site's, so expect close to the same trades, not identical.
strategy("Connors RSI 2", overlay=false,
initial_capital=100, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, commission_type=strategy.commission.percent,
commission_value=0.02, process_orders_on_close=true, pyramiding=0)
// The bar the current position opened on, and the bar the last one closed on.
var int entryBar = na
var int exitBar = -1
// ── Signals ──────────────────────────────────────────────────────────────
rsi = ta.rsi(close, 2)
regime = ta.sma(close, 200)
exitAverage = ta.sma(close, 5)
enterNow = rsi < 10 and close > regime
exitNow = close > exitAverage
// ── Orders ───────────────────────────────────────────────────────────────
// Open on the first bar the entry holds while flat; close on the first
// later bar the exit holds; never reopen on the bar a position closed.
inTrade = strategy.position_size != 0
if inTrade and bar_index > entryBar and exitNow
strategy.close("Long")
exitBar := bar_index
else if not inTrade and bar_index > exitBar and enterNow
strategy.entry("Long", strategy.long)
entryBar := bar_index
// ── Drawing ──────────────────────────────────────────────────────────────
plot(regime, "SMA 200", color=#8a92a0, force_overlay=true)
plot(exitAverage, "SMA 5", color=#e0a03a, force_overlay=true)
plot(rsi, "RSI 2", color=#4d8dff)
hline(10, "Oversold 10", color=color.new(#8a92a0, 40), linestyle=hline.style_dashed)