OPEN-SOURCE SCRIPT
LT's RSI Invalidation Targets

//version=5
indicator("Triple RSI Divergence", overlay=true)
// === INPUTS ===
rsiLength = input.int(14, title="RSI Length")
src = input.source(close, "Source")
lookback = input.int(50, title="Lookback Period")
// === RSI ===
rsi = ta.rsi(src, rsiLength)
// === Find local peaks and troughs ===
isTop = ta.pivothigh(rsi, 5, 5)
isBottom = ta.pivotlow(rsi, 5, 5)
var float[] rsiTroughs = array.new_float()
var float[] priceTroughs = array.new_float()
var int[] rsiTroughBars = array.new_int()
if isBottom
array.unshift(rsiTroughs, rsi[5])
array.unshift(priceTroughs, low[5])
array.unshift(rsiTroughBars, bar_index[5])
if array.size(rsiTroughs) > 3
array.pop(rsiTroughs)
array.pop(priceTroughs)
array.pop(rsiTroughBars)
// === Check for triple bullish divergence ===
bullDiv = false
if array.size(rsiTroughs) == 3
r1 = array.get(rsiTroughs, 2)
r2 = array.get(rsiTroughs, 1)
r3 = array.get(rsiTroughs, 0)
p1 = array.get(priceTroughs, 2)
p2 = array.get(priceTroughs, 1)
p3 = array.get(priceTroughs, 0)
// Price: Lower lows, RSI: Higher lows
if p1 > p2 and p2 > p3 and r1 < r2 and r2 < r3
bullDiv := true
label.new(array.get(rsiTroughBars, 0), low, "Triple Bullish Divergence", style=label.style_label_up, color=color.green, textcolor=color.white)
// === Same for triple bearish divergence ===
var float[] rsiPeaks = array.new_float()
var float[] pricePeaks = array.new_float()
var int[] rsiPeakBars = array.new_int()
if isTop
array.unshift(rsiPeaks, rsi[5])
array.unshift(pricePeaks, high[5])
array.unshift(rsiPeakBars, bar_index[5])
if array.size(rsiPeaks) > 3
array.pop(rsiPeaks)
array.pop(pricePeaks)
array.pop(rsiPeakBars)
bearDiv = false
if array.size(rsiPeaks) == 3
r1 = array.get(rsiPeaks, 2)
r2 = array.get(rsiPeaks, 1)
r3 = array.get(rsiPeaks, 0)
p1 = array.get(pricePeaks, 2)
p2 = array.get(pricePeaks, 1)
p3 = array.get(pricePeaks, 0)
// Price: Higher highs, RSI: Lower highs
if p1 < p2 and p2 < p3 and r1 > r2 and r2 > r3
bearDiv := true
label.new(array.get(rsiPeakBars, 0), high, "Triple Bearish Divergence", style=label.style_label_down, color=color.red, textcolor=color.white)
indicator("Triple RSI Divergence", overlay=true)
// === INPUTS ===
rsiLength = input.int(14, title="RSI Length")
src = input.source(close, "Source")
lookback = input.int(50, title="Lookback Period")
// === RSI ===
rsi = ta.rsi(src, rsiLength)
// === Find local peaks and troughs ===
isTop = ta.pivothigh(rsi, 5, 5)
isBottom = ta.pivotlow(rsi, 5, 5)
var float[] rsiTroughs = array.new_float()
var float[] priceTroughs = array.new_float()
var int[] rsiTroughBars = array.new_int()
if isBottom
array.unshift(rsiTroughs, rsi[5])
array.unshift(priceTroughs, low[5])
array.unshift(rsiTroughBars, bar_index[5])
if array.size(rsiTroughs) > 3
array.pop(rsiTroughs)
array.pop(priceTroughs)
array.pop(rsiTroughBars)
// === Check for triple bullish divergence ===
bullDiv = false
if array.size(rsiTroughs) == 3
r1 = array.get(rsiTroughs, 2)
r2 = array.get(rsiTroughs, 1)
r3 = array.get(rsiTroughs, 0)
p1 = array.get(priceTroughs, 2)
p2 = array.get(priceTroughs, 1)
p3 = array.get(priceTroughs, 0)
// Price: Lower lows, RSI: Higher lows
if p1 > p2 and p2 > p3 and r1 < r2 and r2 < r3
bullDiv := true
label.new(array.get(rsiTroughBars, 0), low, "Triple Bullish Divergence", style=label.style_label_up, color=color.green, textcolor=color.white)
// === Same for triple bearish divergence ===
var float[] rsiPeaks = array.new_float()
var float[] pricePeaks = array.new_float()
var int[] rsiPeakBars = array.new_int()
if isTop
array.unshift(rsiPeaks, rsi[5])
array.unshift(pricePeaks, high[5])
array.unshift(rsiPeakBars, bar_index[5])
if array.size(rsiPeaks) > 3
array.pop(rsiPeaks)
array.pop(pricePeaks)
array.pop(rsiPeakBars)
bearDiv = false
if array.size(rsiPeaks) == 3
r1 = array.get(rsiPeaks, 2)
r2 = array.get(rsiPeaks, 1)
r3 = array.get(rsiPeaks, 0)
p1 = array.get(pricePeaks, 2)
p2 = array.get(pricePeaks, 1)
p3 = array.get(pricePeaks, 0)
// Price: Higher highs, RSI: Lower highs
if p1 < p2 and p2 < p3 and r1 > r2 and r2 > r3
bearDiv := true
label.new(array.get(rsiPeakBars, 0), high, "Triple Bearish Divergence", style=label.style_label_down, color=color.red, textcolor=color.white)
Script open-source
In pieno spirito TradingView, il creatore di questo script lo ha reso open-source, in modo che i trader possano esaminarlo e verificarne la funzionalità. Complimenti all'autore! Sebbene sia possibile utilizzarlo gratuitamente, ricorda che la ripubblicazione del codice è soggetta al nostro Regolamento.
KLR
Declinazione di responsabilità
Le informazioni ed i contenuti pubblicati non costituiscono in alcun modo una sollecitazione ad investire o ad operare nei mercati finanziari. Non sono inoltre fornite o supportate da TradingView. Maggiori dettagli nelle Condizioni d'uso.
Script open-source
In pieno spirito TradingView, il creatore di questo script lo ha reso open-source, in modo che i trader possano esaminarlo e verificarne la funzionalità. Complimenti all'autore! Sebbene sia possibile utilizzarlo gratuitamente, ricorda che la ripubblicazione del codice è soggetta al nostro Regolamento.
KLR
Declinazione di responsabilità
Le informazioni ed i contenuti pubblicati non costituiscono in alcun modo una sollecitazione ad investire o ad operare nei mercati finanziari. Non sono inoltre fornite o supportate da TradingView. Maggiori dettagli nelle Condizioni d'uso.