Most signal indicators rely on one idea: a moving average cross, an oscillator leaving an extreme, a break of structure. Each of them works some of the time and fails often on its own.
The Triple Confluence Navigator by MarkitTick only speaks when three different engines point the same way within a few bars of each other: a filtered RSI cross, a cross of an adaptive RSI against its own supertrend, and a break of market structure. When the three line up it plots a BUY or SELL label and draws a complete trade plan (entry, stop-loss and three take-profit levels), and a dashboard keeps the state of every engine in view.
Engine 1, Cardwell RSI. A fast (9) and a slow (45) filter run on the 14-period RSI. The filter can be a Wilder moving average (RMA), a Kalman filter (default) or a linear regression (“LLAMA” option). A signal fires when the fast line crosses the slow one, checked on the last closed bar.
Engine 2, Adaptive RSI. The ARSI is an oscillator between 0 and 100 built from the 14-bar price channel: when the channel makes a new high it counts the whole channel range as an up move, when it makes a new low it counts it as a down move, and otherwise it uses the change of the close. The ratio of the smoothed moves to the smoothed absolute moves is mapped to 0-100. Its signal line is the average of two things: a filter of the ARSI (Kalman by default, RMA or an adaptive “LLAMA” smoother whose speed grows with the efficiency of the move) and a supertrend computed on the ARSI itself, with a 14-period ATR of the ARSI and a factor of 2. A signal fires when the ARSI crosses that combined line.
Engine 3, Structure. Swing highs and lows are confirmed with 5 bars on each side. A close above the last swing high that has not been broken yet is a bullish break; a close below the last unbroken swing low is a bearish one.
Confluence. The indicator counts the bars since the last signal of each engine. When all three bullish signals are within the confluence window (5 bars by default) a BUY appears; the same for SELL. The label only appears on the first bar of the confluence, not on every bar that keeps it.
Trade levels. The entry is the previous close. The stop-loss is the tighter of two distances: 1.5 ATR, or the distance to the opposite swing (last swing low for a long, last swing high for a short) plus a 0.25 ATR buffer. TP1, TP2 and TP3 sit at 1, 2 and 3 times that risk.
Optional filters. A higher timeframe filter (off by default) only keeps signals in the direction of the higher timeframe bias of each engine, read from the last closed higher timeframe bar. An ADX filter (off by default) only keeps engine 1 signals when the ADX of the previous bar is at least 20.
The colours of the levels and labels are listed in a comment at the top of the code.
//---------------------------------------------------------------
// PRC_Triple Confluence Nav
// version = 0
// 30.10.2026
// Iván González @ www.prorealcode.com
// Author: MarkitTick
// Sharing ProRealTime knowledge
//--------------------------------------------------------------------//
DEFPARAM DRAWONLASTBARONLY = true
// ===================== CARDWELL RSI =====================
rsiLen = 14 // RSI length
rmaFastLen = 9 // fast filter length
rmaSlowLen = 45 // slow filter length
maType = 1 // filter type: 0 = RMA, 1 = Kalman, 2 = LLAMA (linear regression)
// ===================== ADAPTIVE RSI =====================
arsiLen = 14 // ARSI length
arsiSigLen = 14 // signal length
arsiFiltType = 1 // signal filter: 0 = RMA, 1 = Kalman, 2 = LLAMA
kalmanProcN = 0.01 // Kalman process noise
kalmanMeasN = 0.10 // Kalman measurement noise
llamaAlphaMin = 0.05 // LLAMA minimum alpha
llamaAlphaMax = 0.50 // LLAMA maximum alpha
// ===================== SUPERTREND ON THE ARSI =====================
stAtrLen = 14 // ATR length of the ARSI supertrend
stFactor = 2.0 // supertrend factor
// ===================== STRUCTURE =====================
swingLen = 5 // swing length (bars on each side, 3 to 50)
// ===================== TRADE SETUP =====================
atrLen = 14 // ATR length
atrMultSl = 1.5 // stop-loss cap (x ATR)
slStructBuf = 0.25 // buffer beyond the swing for the structural stop (x ATR)
rr1 = 1.0 // TP1 risk:reward
rr2 = 2.0 // TP2 risk:reward
rr3 = 3.0 // TP3 risk:reward
confluenceWindow = 5 // the three signals must fire within this many bars
// ===================== HIGHER TIMEFRAME FILTER =====================
useHtfFilter = 0 // 1 = enable the higher timeframe filter
htfMinutes = 240 // higher timeframe in minutes (240 = 4 hours, 1440 = daily)
// ===================== CHOPPINESS (ADX) FILTER =====================
useChopFilter = 0 // 1 = enable the ADX filter
adxLen = 14 // ADX length
adxMinLevel = 20 // minimum ADX
// ===================== DASHBOARD =====================
showDash = 1 // 1 = show the dashboard
dashPos = 0 // 0 = top right, 1 = top left, 2 = bottom right, 3 = bottom left
// Colours: entry 30,58,92 - SL 122,31,31 - TP1 14,92,74 - TP2 14,110,82 - TP3 18,163,130
// buy label 38,166,154 - sell label 239,83,80
swL = min(50, max(3, round(swingLen)))
htfMin = max(1, round(htfMinutes))
// ===================== RSI (Wilder) =====================
IF barindex = 0 THEN
rsiUp = 0
rsiDn = 0
ELSE
rsiUp = max(close - close[1], 0)
rsiDn = max(close[1] - close, 0)
ENDIF
rsiOk = 0
IF barindex = rsiLen THEN
rsiAvgUp = summation[rsiLen](rsiUp) / rsiLen
rsiAvgDn = summation[rsiLen](rsiDn) / rsiLen
ELSIF barindex > rsiLen THEN
rsiAvgUp = (rsiAvgUp * (rsiLen - 1) + rsiUp) / rsiLen
rsiAvgDn = (rsiAvgDn * (rsiLen - 1) + rsiDn) / rsiLen
ENDIF
IF barindex >= rsiLen THEN
rsiOk = 1
IF rsiAvgDn = 0 THEN
rsiV = 100
ELSIF rsiAvgUp = 0 THEN
rsiV = 0
ELSE
rsiV = 100 - 100 / (1 + rsiAvgUp / rsiAvgDn)
ENDIF
ELSE
rsiV = 50
ENDIF
// ===================== CARDWELL FILTERS =====================
// Kalman filters on the RSI (fixed noise; their gains run from the first bar)
ONCE kfFastP = 1.0
ONCE kfSlowP = 1.0
kfQ = 0.001
kfR = 0.01
kfFastK = kfFastP / (kfFastP + kfR)
kfSlowK = kfSlowP / (kfSlowP + kfR * (rmaSlowLen / rmaFastLen))
IF barindex = rsiLen THEN
kfFastX = rsiV
kfSlowX = rsiV
ELSIF barindex > rsiLen THEN
kfFastX = kfFastX + kfFastK * (rsiV - kfFastX)
kfSlowX = kfSlowX + kfSlowK * (rsiV - kfSlowX)
ENDIF
kfFastP = (1.0 - kfFastK) * kfFastP + kfQ
kfSlowP = (1.0 - kfSlowK) * kfSlowP + kfQ
// Wilder (RMA) filters on the RSI, seeded with the simple average
rmaFastSeed = rsiLen + rmaFastLen - 1
rmaSlowSeed = rsiLen + rmaSlowLen - 1
IF barindex = rmaFastSeed THEN
rmaF = summation[rmaFastLen](rsiV) / rmaFastLen
ELSIF barindex > rmaFastSeed THEN
rmaF = (rmaF * (rmaFastLen - 1) + rsiV) / rmaFastLen
ENDIF
IF barindex = rmaSlowSeed THEN
rmaS = summation[rmaSlowLen](rsiV) / rmaSlowLen
ELSIF barindex > rmaSlowSeed THEN
rmaS = (rmaS * (rmaSlowLen - 1) + rsiV) / rmaSlowLen
ENDIF
lrF = LinearRegression[rmaFastLen](rsiV)
lrS = LinearRegression[rmaSlowLen](rsiV)
IF maType = 1 THEN
cwFast = kfFastX
cwSlow = kfSlowX
cwStart = rsiLen
ELSIF maType = 2 THEN
cwFast = lrF
cwSlow = lrS
cwStart = rmaSlowSeed
ELSE
cwFast = rmaF
cwSlow = rmaS
cwStart = rmaSlowSeed
ENDIF
rawBullCross = 0
rawBearCross = 0
IF barindex >= cwStart + 2 THEN
IF cwFast[1] > cwSlow[1] AND cwFast[2] <= cwSlow[2] THEN
rawBullCross = 1
ENDIF
IF cwFast[1] < cwSlow[1] AND cwFast[2] >= cwSlow[2] THEN
rawBearCross = 1
ENDIF
ENDIF
// ===================== ATR AND ADX =====================
atrOk = 0
IF barindex >= atrLen - 1 THEN
atrOk = 1
atrV = averagetruerange[atrLen](close)
ENDIF
IF barindex >= atrLen THEN
atr1 = atrV[1]
ELSE
atr1 = atrV
ENDIF
adxV = ADX[adxLen]
// ===================== ADAPTIVE RSI =====================
arsiU = highest[arsiLen](close)
arsiL = lowest[arsiLen](close)
arsiR = arsiU - arsiL
IF barindex = 0 THEN
arsiDiff = 0
ELSIF barindex >= arsiLen AND arsiU > arsiU[1] THEN
arsiDiff = arsiR
ELSIF barindex >= arsiLen AND arsiL < arsiL[1] THEN
arsiDiff = 0 - arsiR
ELSE
arsiDiff = close - close[1]
ENDIF
arsiAbs = abs(arsiDiff)
IF barindex = arsiLen THEN
arsiNum = summation[arsiLen](arsiDiff) / arsiLen
arsiDen = summation[arsiLen](arsiAbs) / arsiLen
ELSIF barindex > arsiLen THEN
arsiNum = (arsiNum * (arsiLen - 1) + arsiDiff) / arsiLen
arsiDen = (arsiDen * (arsiLen - 1) + arsiAbs) / arsiLen
ENDIF
IF barindex >= arsiLen THEN
IF arsiDen <> 0 THEN
arsiV = arsiNum / arsiDen * 50 + 50
ELSE
arsiV = 50
ENDIF
ELSE
arsiV = 50
ENDIF
// ARSI signal line: the three filters run on every bar, the parameter picks one
ONCE kCov = 1.0
kCov = kCov + kalmanProcN
kGain = kCov / (kCov + kalmanMeasN)
IF barindex = arsiLen THEN
kEst = arsiV
ELSIF barindex > arsiLen THEN
kEst = kEst + kGain * (arsiV - kEst)
ENDIF
kCov = (1 - kGain) * kCov
sigRmaSeed = arsiLen + arsiSigLen - 1
IF barindex = sigRmaSeed THEN
sigRma = summation[arsiSigLen](arsiV) / arsiSigLen
ELSIF barindex > sigRmaSeed THEN
sigRma = (sigRma * (arsiSigLen - 1) + arsiV) / arsiSigLen
ENDIF
llStart = arsiLen + arsiSigLen
IF barindex = llStart THEN
llOut = arsiV
ELSIF barindex > llStart THEN
llSlope = (arsiV - arsiV[arsiSigLen]) / arsiSigLen
llRng = highest[arsiSigLen](arsiV) - lowest[arsiSigLen](arsiV)
IF llRng <> 0 THEN
llEff = min(abs(llSlope * arsiSigLen) / llRng, 1.0)
ELSE
llEff = 0
ENDIF
llAlpha = llamaAlphaMin + llEff * (llamaAlphaMax - llamaAlphaMin)
llOut = llOut + llAlpha * (arsiV - llOut)
ENDIF
IF arsiFiltType = 0 THEN
arsiSig = sigRma
sigStart = sigRmaSeed
ELSIF arsiFiltType = 1 THEN
arsiSig = kEst
sigStart = arsiLen
ELSE
arsiSig = llOut
sigStart = llStart
ENDIF
// Supertrend on the ARSI
stStart = arsiLen + stAtrLen
arsiMove = abs(arsiV - arsiV[1])
IF barindex = stStart THEN
arsiAtr = summation[stAtrLen](arsiMove) / stAtrLen
ELSIF barindex > stStart THEN
arsiAtr = (arsiAtr * (stAtrLen - 1) + arsiMove) / stAtrLen
ENDIF
ONCE trendUp = 1
stOk = 0
IF barindex = stStart THEN
stLine = arsiV + stFactor * arsiAtr
trendUp = 1
stOk = 1
ELSIF barindex > stStart THEN
upperBand = arsiV + stFactor * arsiAtr
lowerBand = arsiV - stFactor * arsiAtr
stPrev = stLine[1]
IF arsiV > stPrev THEN
trendUp = 1
ELSIF arsiV < stPrev THEN
trendUp = 0
ENDIF
IF trendUp = 1 THEN
stLine = max(lowerBand, stPrev)
ELSE
stLine = min(upperBand, stPrev)
ENDIF
stOk = 1
ENDIF
IF stOk = 1 THEN
rawMerged = (arsiSig + stLine) / 2
ELSE
rawMerged = arsiSig
ENDIF
rawBullCross2 = 0
rawBearCross2 = 0
IF barindex >= max(arsiLen, sigStart) + 2 THEN
IF arsiV[1] > rawMerged[1] AND arsiV[2] <= rawMerged[2] THEN
rawBullCross2 = 1
ENDIF
IF arsiV[1] < rawMerged[1] AND arsiV[2] >= rawMerged[2] THEN
rawBearCross2 = 1
ENDIF
ENDIF
// ===================== HIGHER TIMEFRAME (rebuilt from the chart bars) =====================
// Each higher timeframe bar is closed with close[1] on the first bar of the next one, so the
// values below are those of the last CLOSED higher timeframe bar, without repainting.
ONCE nH = 0
ONCE hRsiN = 0
ONCE hFastN = 0
ONCE hSlowN = 0
ONCE hArsiN = 0
mNow = floor(opentime / 10000) * 60 + floor(opentime / 100) - floor(opentime / 10000) * 100
newP = 0
IF barindex > 0 THEN
IF date <> date[1] OR floor(mNow / htfMin) <> floor(mNow[1] / htfMin) THEN
newP = 1
ENDIF
ENDIF
IF newP = 1 THEN
hc = close[1]
hIdx = nH MOD 500
$hClose[hIdx] = hc
nH = nH + 1
IF nH >= 2 THEN
hUp = max(hc - hcPrev, 0)
hDn = max(hcPrev - hc, 0)
hRsiN = hRsiN + 1
// RSI of the higher timeframe
IF hRsiN <= rsiLen THEN
hSumUp = hSumUp + hUp
hSumDn = hSumDn + hDn
IF hRsiN = rsiLen THEN
hAvgUp = hSumUp / rsiLen
hAvgDn = hSumDn / rsiLen
ENDIF
ELSE
hAvgUp = (hAvgUp * (rsiLen - 1) + hUp) / rsiLen
hAvgDn = (hAvgDn * (rsiLen - 1) + hDn) / rsiLen
ENDIF
IF hRsiN >= rsiLen THEN
IF hAvgDn = 0 THEN
hRsi = 100
ELSIF hAvgUp = 0 THEN
hRsi = 0
ELSE
hRsi = 100 - 100 / (1 + hAvgUp / hAvgDn)
ENDIF
// RMA of that RSI (fast and slow)
hFastN = hFastN + 1
IF hFastN <= rmaFastLen THEN
hSumF = hSumF + hRsi
IF hFastN = rmaFastLen THEN
hFast = hSumF / rmaFastLen
ENDIF
ELSE
hFast = (hFast * (rmaFastLen - 1) + hRsi) / rmaFastLen
ENDIF
hSlowN = hSlowN + 1
IF hSlowN <= rmaSlowLen THEN
hSumS = hSumS + hRsi
IF hSlowN = rmaSlowLen THEN
hSlow = hSumS / rmaSlowLen
ENDIF
ELSE
hSlow = (hSlow * (rmaSlowLen - 1) + hRsi) / rmaSlowLen
ENDIF
ENDIF
// Adaptive RSI of the higher timeframe
hDiff = hc - hcPrev
IF nH >= arsiLen THEN
hU = $hClose[hIdx]
hL = $hClose[hIdx]
FOR jH = 1 TO arsiLen - 1 DO
hK = (nH - 1 - jH) MOD 500
hU = max(hU, $hClose[hK])
hL = min(hL, $hClose[hK])
NEXT
IF nH > arsiLen AND hU > hUPrev THEN
hDiff = hU - hL
ELSIF nH > arsiLen AND hL < hLPrev THEN
hDiff = hL - hU
ENDIF
hUPrev = hU
hLPrev = hL
ENDIF
hArsiN = hArsiN + 1
IF hArsiN <= arsiLen THEN
hSumN = hSumN + hDiff
hSumD = hSumD + abs(hDiff)
IF hArsiN = arsiLen THEN
hNum = hSumN / arsiLen
hDen = hSumD / arsiLen
ENDIF
ELSE
hNum = (hNum * (arsiLen - 1) + hDiff) / arsiLen
hDen = (hDen * (arsiLen - 1) + abs(hDiff)) / arsiLen
ENDIF
IF hArsiN >= arsiLen THEN
IF hDen <> 0 THEN
hArsi = hNum / hDen * 50 + 50
ELSE
hArsi = 50
ENDIF
ENDIF
ENDIF
hcPrev = hc
ENDIF
htfBullBias = 0
htfBearBias = 0
IF hFastN >= rmaFastLen AND hSlowN >= rmaSlowLen THEN
IF hFast > hSlow THEN
htfBullBias = 1
ELSIF hFast < hSlow THEN
htfBearBias = 1
ENDIF
ENDIF
htfArsiBull = 0
htfArsiBear = 0
IF hArsiN >= arsiLen THEN
IF hArsi >= 50 THEN
htfArsiBull = 1
ELSE
htfArsiBear = 1
ENDIF
ENDIF
htfBull3 = 0
htfBear3 = 0
IF hRsiN >= rsiLen THEN
IF hRsi > 50 THEN
htfBull3 = 1
ELSIF hRsi < 50 THEN
htfBear3 = 1
ENDIF
ENDIF
// ===================== SIGNAL 1: CARDWELL RSI CROSS =====================
chopOk = 1
IF useChopFilter = 1 THEN
chopOk = 0
IF barindex >= 1 THEN
IF adxV[1] >= adxMinLevel THEN
chopOk = 1
ENDIF
ENDIF
ENDIF
bullSignal1 = 0
bearSignal1 = 0
IF rawBullCross = 1 AND (useHtfFilter = 0 OR htfBullBias = 1) AND chopOk = 1 THEN
bullSignal1 = 1
ENDIF
IF rawBearCross = 1 AND (useHtfFilter = 0 OR htfBearBias = 1) AND chopOk = 1 THEN
bearSignal1 = 1
ENDIF
// ===================== SIGNAL 2: ARSI CROSS =====================
bullSignal2 = 0
bearSignal2 = 0
IF rawBullCross2 = 1 AND (useHtfFilter = 0 OR htfArsiBull = 1) THEN
bullSignal2 = 1
ENDIF
IF rawBearCross2 = 1 AND (useHtfFilter = 0 OR htfArsiBear = 1) THEN
bearSignal2 = 1
ENDIF
// ===================== SIGNAL 3: STRUCTURE BREAK =====================
ONCE swHiOk = 0
ONCE swLoOk = 0
ONCE lastProcHiBar = -1
ONCE lastProcLoBar = -1
ONCE trend3 = 0
IF barindex >= 2 * swL THEN
// pivot: strictly above the later bars, at least equal to the earlier ones
IF high[swL] > highest[swL](high) AND high[swL] >= highest[swL](high)[swL + 1] THEN
lastSwHi = high[swL]
lastSwHiBar = barindex - swL
swHiOk = 1
ENDIF
IF low[swL] < lowest[swL](low) AND low[swL] <= lowest[swL](low)[swL + 1] THEN
lastSwLo = low[swL]
lastSwLoBar = barindex - swL
swLoOk = 1
ENDIF
ENDIF
breakUp = 0
breakDown = 0
IF swHiOk = 1 AND (useHtfFilter = 0 OR htfBull3 = 1) THEN
IF close > lastSwHi AND (lastProcHiBar = -1 OR lastSwHiBar <> lastProcHiBar) THEN
breakUp = 1
ENDIF
ENDIF
IF swLoOk = 1 AND (useHtfFilter = 0 OR htfBear3 = 1) THEN
IF close < lastSwLo AND (lastProcLoBar = -1 OR lastSwLoBar <> lastProcLoBar) THEN
breakDown = 1
ENDIF
ENDIF
IF breakUp = 1 THEN
lastProcHiBar = lastSwHiBar
trend3 = 1
ENDIF
IF breakDown = 1 THEN
lastProcLoBar = lastSwLoBar
trend3 = -1
ENDIF
bullSignal3 = breakUp
bearSignal3 = breakDown
// ===================== TRIPLE CONFLUENCE =====================
ONCE bsBull1 = 9999
ONCE bsBear1 = 9999
ONCE bsBull2 = 9999
ONCE bsBear2 = 9999
ONCE bsBull3 = 9999
ONCE bsBear3 = 9999
IF bullSignal1 = 1 THEN
bsBull1 = 0
ELSE
bsBull1 = bsBull1 + 1
ENDIF
IF bearSignal1 = 1 THEN
bsBear1 = 0
ELSE
bsBear1 = bsBear1 + 1
ENDIF
IF bullSignal2 = 1 THEN
bsBull2 = 0
ELSE
bsBull2 = bsBull2 + 1
ENDIF
IF bearSignal2 = 1 THEN
bsBear2 = 0
ELSE
bsBear2 = bsBear2 + 1
ENDIF
IF bullSignal3 = 1 THEN
bsBull3 = 0
ELSE
bsBull3 = bsBull3 + 1
ENDIF
IF bearSignal3 = 1 THEN
bsBear3 = 0
ELSE
bsBear3 = bsBear3 + 1
ENDIF
bullConf = 0
bearConf = 0
IF bsBull1 <= confluenceWindow AND bsBull2 <= confluenceWindow AND bsBull3 <= confluenceWindow THEN
bullConf = 1
ENDIF
IF bsBear1 <= confluenceWindow AND bsBear2 <= confluenceWindow AND bsBear3 <= confluenceWindow THEN
bearConf = 1
ENDIF
longSignal = 0
shortSignal = 0
IF barindex > 0 THEN
IF bullConf = 1 AND bullConf[1] = 0 THEN
longSignal = 1
ENDIF
IF bearConf = 1 AND bearConf[1] = 0 THEN
shortSignal = 1
ENDIF
ENDIF
// ===================== TRADE LEVELS =====================
ONCE tradeActive = 0
ONCE tradeIsLong = 1
ONCE nSig = 0
IF longSignal = 1 THEN
entryP = close[1]
capDist = atr1 * atrMultSl
riskDist = capDist
IF swLoOk = 1 THEN
structDist = entryP - (lastSwLo - atr1 * slStructBuf)
IF structDist > 0 THEN
riskDist = min(structDist, capDist)
ENDIF
ENDIF
trkEntry = entryP
trkSl = entryP - riskDist
trkTp1 = entryP + riskDist * rr1
trkTp2 = entryP + riskDist * rr2
trkTp3 = entryP + riskDist * rr3
trkStartBar = barindex
tradeActive = 1
tradeIsLong = 1
$sgX[nSig] = barindex
$sgD[nSig] = 1
$sgY[nSig] = low - 0.5 * atr1
nSig = nSig + 1
ENDIF
IF shortSignal = 1 THEN
entryP = close[1]
capDist = atr1 * atrMultSl
riskDist = capDist
IF swHiOk = 1 THEN
structDist = (lastSwHi + atr1 * slStructBuf) - entryP
IF structDist > 0 THEN
riskDist = min(structDist, capDist)
ENDIF
ENDIF
trkEntry = entryP
trkSl = entryP + riskDist
trkTp1 = entryP - riskDist * rr1
trkTp2 = entryP - riskDist * rr2
trkTp3 = entryP - riskDist * rr3
trkStartBar = barindex
tradeActive = 1
tradeIsLong = 0
$sgX[nSig] = barindex
$sgD[nSig] = -1
$sgY[nSig] = high + 0.5 * atr1
nSig = nSig + 1
ENDIF
// ===================== DRAWING ON THE LAST BAR =====================
IF islastbarupdate THEN
tk = ticksize
IF tk <= 0 THEN
tk = 0.01
ENDIF
// BUY / SELL labels: the original keeps its 500 most recent labels (5 of them are the levels)
IF nSig > 0 THEN
firstSg = max(0, nSig - 495)
FOR k = firstSg TO nSig - 1 DO
sx = $sgX[k]
sy = $sgY[k]
IF $sgD[k] = 1 THEN
DRAWTEXT("▲", sx, sy, dialog, bold, 12) COLOURED(38, 166, 154, 255)
DRAWTEXT("BUY", sx, sy - 0.6 * atr1, dialog, bold, 10) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼", sx, sy, dialog, bold, 12) COLOURED(239, 83, 80, 255)
DRAWTEXT("SELL", sx, sy + 0.6 * atr1, dialog, bold, 10) COLOURED(239, 83, 80, 255)
ENDIF
NEXT
ENDIF
// levels of the last trade: 50 bars wide at most, labels at the right end
IF tradeActive = 1 THEN
x1 = trkStartBar
x2 = min(barindex, trkStartBar + 50)
slP = round(trkSl / tk) * tk
enP = round(trkEntry / tk) * tk
tp1P = round(trkTp1 / tk) * tk
tp2P = round(trkTp2 / tk) * tk
tp3P = round(trkTp3 / tk) * tk
DRAWRECTANGLE(x1, trkSl, x2, trkEntry) COLOURED(122, 31, 31, 0) FILLCOLOR(122, 31, 31, 115)
DRAWRECTANGLE(x1, trkEntry, x2, trkTp3) COLOURED(14, 92, 74, 0) FILLCOLOR(14, 92, 74, 77)
DRAWSEGMENT(x1, trkSl, x2, trkSl) COLOURED(122, 31, 31, 255) STYLE(dottedline2, 1)
DRAWSEGMENT(x1, trkEntry, x2, trkEntry) COLOURED(30, 58, 92, 255) STYLE(dottedline2, 1)
DRAWSEGMENT(x1, trkTp1, x2, trkTp1) COLOURED(14, 92, 74, 255) STYLE(dottedline2, 1)
DRAWSEGMENT(x1, trkTp2, x2, trkTp2) COLOURED(14, 110, 82, 255) STYLE(dottedline2, 1)
DRAWSEGMENT(x1, trkTp3, x2, trkTp3) COLOURED(18, 163, 130, 255) STYLE(dottedline2, 1)
lbX = x2 + 8
DRAWTEXT("✕ SL #slP#", lbX, trkSl, dialog, bold, 10) COLOURED(122, 31, 31, 255)
DRAWTEXT("▶ Entry #enP#", lbX, trkEntry, dialog, bold, 10) COLOURED(30, 58, 92, 255)
DRAWTEXT("● TP1 #tp1P#", lbX, trkTp1, dialog, bold, 10) COLOURED(14, 92, 74, 255)
DRAWTEXT("★ TP2 #tp2P#", lbX, trkTp2, dialog, bold, 10) COLOURED(14, 110, 82, 255)
DRAWTEXT("◆ TP3 #tp3P#", lbX, trkTp3, dialog, bold, 10) COLOURED(18, 163, 130, 255)
ENDIF
// ---------- dashboard ----------
IF showDash = 1 THEN
pz = 10
chW = pz * 0.62
chH = 11 * 0.62
rowH = pz + 8
padX = 6
col0W = 17 * chH + 2 * padX
col1W = 16 * chW + 2 * padX
pW = col0W + col1W
pH = 9 * rowH
// clear of the price scale on the right and, on the left, of the chart legend and the logo
IF dashPos = 1 THEN
pL = 10
pT = 0 - 40
ELSIF dashPos = 3 THEN
pL = 10
pT = 40 + pH
ELSIF dashPos = 2 THEN
pL = 0 - 85 - pW
pT = 12 + pH
ELSE
pL = 0 - 85 - pW
pT = 0 - 12
ENDIF
xM = pL + col0W
xR = pL + pW
vR = xR - padX
yR0 = pT - rowH * 0.5
yR1 = pT - rowH * 1.5
yR2 = pT - rowH * 2.5
yR3 = pT - rowH * 3.5
yR4 = pT - rowH * 4.5
yR5 = pT - rowH * 5.5
yR6 = pT - rowH * 6.5
yR7 = pT - rowH * 7.5
yR8 = pT - rowH * 8.5
// state of each row: 1 = bull, -1 = bear, 0 = wait
st1 = 0
IF bullSignal1 = 1 THEN
st1 = 1
ELSIF bearSignal1 = 1 THEN
st1 = -1
ENDIF
st2 = 0
IF bullSignal2 = 1 THEN
st2 = 1
ELSIF bearSignal2 = 1 THEN
st2 = -1
ENDIF
st3 = trend3
IF bullSignal3 = 1 THEN
st3 = 1
ELSIF bearSignal3 = 1 THEN
st3 = -1
ENDIF
// block bars of the RSI (scale 100) and of the ADX (scale 50)
rsiPct = min(max(rsiV, 0), 100)
rsiN = round(rsiPct / 10)
rsiPctR = round(rsiPct)
adxPct = min(max(adxV / 50 * 100, 0), 100)
adxN = round(adxPct / 10)
adxPctR = round(adxPct)
IF rsiPct >= 66 THEN
rsiCr = 38
rsiCg = 166
rsiCb = 154
ELSIF rsiPct >= 33 THEN
rsiCr = 249
rsiCg = 168
rsiCb = 37
ELSE
rsiCr = 239
rsiCg = 83
rsiCb = 80
ENDIF
IF adxPct >= 66 THEN
adxCr = 38
adxCg = 166
adxCb = 154
ELSIF adxPct >= 33 THEN
adxCr = 249
adxCg = 168
adxCb = 37
ELSE
adxCr = 239
adxCg = 83
adxCb = 80
ENDIF
IF rsiPctR >= 100 THEN
rsiL = 4
ELSIF rsiPctR >= 10 THEN
rsiL = 3
ELSE
rsiL = 2
ENDIF
IF adxPctR >= 100 THEN
adxL = 4
ELSIF adxPctR >= 10 THEN
adxL = 3
ELSE
adxL = 2
ENDIF
rsiX0 = vR - (12 + rsiL) * chW
adxX0 = vR - (12 + adxL) * chW
// live R of the last trade
liveOk = 0
IF tradeActive = 1 THEN
riskUnit = abs(trkEntry - trkSl)
IF riskUnit > 0 THEN
liveOk = 1
IF tradeIsLong = 1 THEN
liveR = round((close - trkEntry) / riskUnit * 100) / 100
ELSE
liveR = round((trkEntry - close) / riskUnit * 100) / 100
ENDIF
IF abs(liveR) >= 100 THEN
liveL = 8
ELSIF abs(liveR) >= 10 THEN
liveL = 7
ELSE
liveL = 6
ENDIF
ENDIF
ENDIF
// the panel, drawn in the chosen corner
IF dashPos = 1 THEN
DRAWRECTANGLE(pL, pT, xR, pT - rowH) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(20, 181, 203, 255)
DRAWRECTANGLE(pL, pT - rowH, xM, pT - pH) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(10, 15, 26, 255)
DRAWRECTANGLE(xM, pT - rowH, xR, pT - pH) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(13, 17, 23, 255)
DRAWTEXT("Triple Confluence", pL + padX + 8.5 * chH, yR0, monospaced, bold, 11) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
DRAWTEXT("Cardwell", pL + padX + 4 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Adaptive ARSI", pL + padX + 6.5 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Structure", pL + padX + 4.5 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("RSI", pL + padX + 1.5 * chW, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("ADX", pL + padX + 1.5 * chW, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("HTF Bias", pL + padX + 4 * chW, yR6, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Trade", pL + padX + 2.5 * chW, yR7, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Live R", pL + padX + 3 * chW, yR8, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
IF st1 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st1 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
IF st2 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st2 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
IF st3 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st3 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
FOR iB = 1 TO 10 DO
IF iB <= rsiN THEN
DRAWTEXT("█", rsiX0 + (iB - 0.5) * chW, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
ELSE
DRAWTEXT("░", rsiX0 + (iB - 0.5) * chW, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
ENDIF
IF iB <= adxN THEN
DRAWTEXT("█", adxX0 + (iB - 0.5) * chW, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
ELSE
DRAWTEXT("░", adxX0 + (iB - 0.5) * chW, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
ENDIF
NEXT
DRAWTEXT("#rsiPctR#%", vR - rsiL * chW / 2, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
DRAWTEXT("#adxPctR#%", vR - adxL * chW / 2, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
IF useHtfFilter = 0 THEN
DRAWTEXT("Off", vR - 1.5 * chW, yR6, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF htfBullBias = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR6, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼ Bear", vR - 3 * chW, yR6, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
IF tradeActive = 0 THEN
DRAWTEXT("—", vR - 0.5 * chW, yR7, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF tradeIsLong = 1 THEN
DRAWTEXT("▲ Long", vR - 3 * chW, yR7, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼ Short", vR - 3.5 * chW, yR7, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
IF liveOk = 0 THEN
DRAWTEXT("—", vR - 0.5 * chW, yR8, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF liveR >= 0 THEN
DRAWTEXT("+#liveR#R", vR - liveL * chW / 2, yR8, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("#liveR#R", vR - liveL * chW / 2, yR8, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
ELSIF dashPos = 3 THEN
DRAWRECTANGLE(pL, pT, xR, pT - rowH) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(20, 181, 203, 255)
DRAWRECTANGLE(pL, pT - rowH, xM, pT - pH) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(10, 15, 26, 255)
DRAWRECTANGLE(xM, pT - rowH, xR, pT - pH) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(13, 17, 23, 255)
DRAWTEXT("Triple Confluence", pL + padX + 8.5 * chH, yR0, monospaced, bold, 11) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
DRAWTEXT("Cardwell", pL + padX + 4 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Adaptive ARSI", pL + padX + 6.5 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Structure", pL + padX + 4.5 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("RSI", pL + padX + 1.5 * chW, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("ADX", pL + padX + 1.5 * chW, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("HTF Bias", pL + padX + 4 * chW, yR6, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Trade", pL + padX + 2.5 * chW, yR7, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Live R", pL + padX + 3 * chW, yR8, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
IF st1 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st1 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
IF st2 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st2 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
IF st3 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st3 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
FOR iB = 1 TO 10 DO
IF iB <= rsiN THEN
DRAWTEXT("█", rsiX0 + (iB - 0.5) * chW, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
ELSE
DRAWTEXT("░", rsiX0 + (iB - 0.5) * chW, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
ENDIF
IF iB <= adxN THEN
DRAWTEXT("█", adxX0 + (iB - 0.5) * chW, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
ELSE
DRAWTEXT("░", adxX0 + (iB - 0.5) * chW, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
ENDIF
NEXT
DRAWTEXT("#rsiPctR#%", vR - rsiL * chW / 2, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
DRAWTEXT("#adxPctR#%", vR - adxL * chW / 2, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
IF useHtfFilter = 0 THEN
DRAWTEXT("Off", vR - 1.5 * chW, yR6, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF htfBullBias = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR6, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼ Bear", vR - 3 * chW, yR6, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
IF tradeActive = 0 THEN
DRAWTEXT("—", vR - 0.5 * chW, yR7, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF tradeIsLong = 1 THEN
DRAWTEXT("▲ Long", vR - 3 * chW, yR7, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼ Short", vR - 3.5 * chW, yR7, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
IF liveOk = 0 THEN
DRAWTEXT("—", vR - 0.5 * chW, yR8, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF liveR >= 0 THEN
DRAWTEXT("+#liveR#R", vR - liveL * chW / 2, yR8, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("#liveR#R", vR - liveL * chW / 2, yR8, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
ELSIF dashPos = 2 THEN
DRAWRECTANGLE(pL, pT, xR, pT - rowH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(20, 181, 203, 255)
DRAWRECTANGLE(pL, pT - rowH, xM, pT - pH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(10, 15, 26, 255)
DRAWRECTANGLE(xM, pT - rowH, xR, pT - pH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(13, 17, 23, 255)
DRAWTEXT("Triple Confluence", pL + padX + 8.5 * chH, yR0, monospaced, bold, 11) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
DRAWTEXT("Cardwell", pL + padX + 4 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Adaptive ARSI", pL + padX + 6.5 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Structure", pL + padX + 4.5 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("RSI", pL + padX + 1.5 * chW, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("ADX", pL + padX + 1.5 * chW, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("HTF Bias", pL + padX + 4 * chW, yR6, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Trade", pL + padX + 2.5 * chW, yR7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Live R", pL + padX + 3 * chW, yR8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
IF st1 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st1 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
IF st2 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st2 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
IF st3 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st3 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
FOR iB = 1 TO 10 DO
IF iB <= rsiN THEN
DRAWTEXT("█", rsiX0 + (iB - 0.5) * chW, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
ELSE
DRAWTEXT("░", rsiX0 + (iB - 0.5) * chW, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
ENDIF
IF iB <= adxN THEN
DRAWTEXT("█", adxX0 + (iB - 0.5) * chW, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
ELSE
DRAWTEXT("░", adxX0 + (iB - 0.5) * chW, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
ENDIF
NEXT
DRAWTEXT("#rsiPctR#%", vR - rsiL * chW / 2, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
DRAWTEXT("#adxPctR#%", vR - adxL * chW / 2, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
IF useHtfFilter = 0 THEN
DRAWTEXT("Off", vR - 1.5 * chW, yR6, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF htfBullBias = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR6, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼ Bear", vR - 3 * chW, yR6, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
IF tradeActive = 0 THEN
DRAWTEXT("—", vR - 0.5 * chW, yR7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF tradeIsLong = 1 THEN
DRAWTEXT("▲ Long", vR - 3 * chW, yR7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼ Short", vR - 3.5 * chW, yR7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
IF liveOk = 0 THEN
DRAWTEXT("—", vR - 0.5 * chW, yR8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF liveR >= 0 THEN
DRAWTEXT("+#liveR#R", vR - liveL * chW / 2, yR8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("#liveR#R", vR - liveL * chW / 2, yR8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
ELSE
DRAWRECTANGLE(pL, pT, xR, pT - rowH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(20, 181, 203, 255)
DRAWRECTANGLE(pL, pT - rowH, xM, pT - pH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(10, 15, 26, 255)
DRAWRECTANGLE(xM, pT - rowH, xR, pT - pH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(20, 181, 203, 102) FILLCOLOR(13, 17, 23, 255)
DRAWTEXT("Triple Confluence", pL + padX + 8.5 * chH, yR0, monospaced, bold, 11) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
DRAWTEXT("Cardwell", pL + padX + 4 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Adaptive ARSI", pL + padX + 6.5 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Structure", pL + padX + 4.5 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("RSI", pL + padX + 1.5 * chW, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("ADX", pL + padX + 1.5 * chW, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("HTF Bias", pL + padX + 4 * chW, yR6, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Trade", pL + padX + 2.5 * chW, yR7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
DRAWTEXT("Live R", pL + padX + 3 * chW, yR8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 178)
IF st1 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st1 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
IF st2 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st2 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
IF st3 = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSIF st3 = -1 THEN
DRAWTEXT("▼ Bear", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ELSE
DRAWTEXT("● Wait", vR - 3 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(249, 168, 37, 255)
ENDIF
FOR iB = 1 TO 10 DO
IF iB <= rsiN THEN
DRAWTEXT("█", rsiX0 + (iB - 0.5) * chW, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
ELSE
DRAWTEXT("░", rsiX0 + (iB - 0.5) * chW, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
ENDIF
IF iB <= adxN THEN
DRAWTEXT("█", adxX0 + (iB - 0.5) * chW, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
ELSE
DRAWTEXT("░", adxX0 + (iB - 0.5) * chW, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
ENDIF
NEXT
DRAWTEXT("#rsiPctR#%", vR - rsiL * chW / 2, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(rsiCr, rsiCg, rsiCb, 255)
DRAWTEXT("#adxPctR#%", vR - adxL * chW / 2, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(adxCr, adxCg, adxCb, 255)
IF useHtfFilter = 0 THEN
DRAWTEXT("Off", vR - 1.5 * chW, yR6, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF htfBullBias = 1 THEN
DRAWTEXT("▲ Bull", vR - 3 * chW, yR6, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼ Bear", vR - 3 * chW, yR6, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
IF tradeActive = 0 THEN
DRAWTEXT("—", vR - 0.5 * chW, yR7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF tradeIsLong = 1 THEN
DRAWTEXT("▲ Long", vR - 3 * chW, yR7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("▼ Short", vR - 3.5 * chW, yR7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
IF liveOk = 0 THEN
DRAWTEXT("—", vR - 0.5 * chW, yR8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 255)
ELSIF liveR >= 0 THEN
DRAWTEXT("+#liveR#R", vR - liveL * chW / 2, yR8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(38, 166, 154, 255)
ELSE
DRAWTEXT("#liveR#R", vR - liveL * chW / 2, yR8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(239, 83, 80, 255)
ENDIF
ENDIF
ENDIF
ENDIF
RETURN