Iván González

Triple Confluence Navigator

Category: Indicators By: Iván González Created: November 6, 2026, 5:29 PM
November 6, 2026, 5:29 PM
Indicators
0 Comments
Triple Confluence Navigator

Introduction

 

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.

Theory Behind the Indicator

 

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.

Key Features at a Glance

 

  • Three independent engines: filtered RSI cross, adaptive RSI against its supertrend, and break of structure.
  • BUY and SELL labels only when the three agree within a configurable window.
  • Automatic trade plan for the last signal: entry, structural or ATR stop-loss and three R-multiple targets, with shaded risk and reward zones.
  • Choice of Kalman, Wilder or regression filters for both RSI engines.
  • Optional higher timeframe and ADX filters.
  • Dashboard with the state of each engine, RSI and ADX block bars, higher timeframe bias, active trade and live R multiple, placeable in any corner.

How to Read the Indicator

 

  • BUY label (teal triangle): the three bullish engines fired within the window. SELL label (red triangle): the same for the bearish side.
  • Dashed lines of the last signal: SL (dark red), Entry (dark blue), TP1, TP2 and TP3 (shades of green), each with its price at the right end. The lines run for at most 50 bars.
  • Red zone: the risk between entry and stop-loss. Green zone: the reward between entry and TP3.
  • Dashboard:
  • Cardwell, Adaptive ARSI and Structure: “▲ Bull” or “▼ Bear” on the bar where that engine fires, “● Wait” otherwise (Structure keeps showing the direction of the last break).
  • RSI and ADX: ten-block bars with the percentage (ADX on a 0-50 scale), green above 66%, amber from 33% and red below.
  • HTF Bias: the higher timeframe direction when the filter is on, “Off” when it is not.
  • Trade and Live R: direction of the last signal and how many R the current close is from its entry.

Practical Applications

 

  • Signal filter: the confluence requirement removes many isolated crosses. Use the BUY/SELL labels as candidates and the trade levels to judge whether the risk/reward makes sense.
  • Trade management: the three targets make partial exits easy to plan, and the Live R line shows at a glance where the trade stands.
  • Trend alignment: switch on the higher timeframe filter (useHtfFilter = 1) to trade only with the bias of a larger timeframe, for example 240 minutes on a 15-minute chart.
  • Avoiding chop: switch on the ADX filter in ranging markets so that engine 1 only counts when there is some directional strength.

Indicator Configuration

 

  • rsiLen (default 14): RSI length.
  • rmaFastLen / rmaSlowLen (default 9 / 45): fast and slow filter lengths of engine 1.
  • maType (default 1): engine 1 filter, 0 = RMA, 1 = Kalman, 2 = LLAMA (linear regression).
  • arsiLen (default 14): Adaptive RSI length.
  • arsiSigLen (default 14): length of the ARSI signal filter.
  • arsiFiltType (default 1): ARSI signal filter, 0 = RMA, 1 = Kalman, 2 = LLAMA.
  • kalmanProcN / kalmanMeasN (default 0.01 / 0.10): process and measurement noise of the ARSI Kalman filter.
  • llamaAlphaMin / llamaAlphaMax (default 0.05 / 0.50): speed range of the LLAMA smoother.
  • stAtrLen / stFactor (default 14 / 2.0): ATR length and factor of the supertrend on the ARSI.
  • swingLen (default 5, 3 to 50): bars on each side of a swing.
  • atrLen (default 14): ATR length for the stop-loss.
  • atrMultSl (default 1.5): maximum stop distance in ATR.
  • slStructBuf (default 0.25): buffer beyond the swing for the structural stop, in ATR.
  • rr1 / rr2 / rr3 (default 1 / 2 / 3): risk:reward of the three targets.
  • confluenceWindow (default 5): bars within which the three signals must fire.
  • useHtfFilter (default 0): 1 = enable the higher timeframe filter.
  • htfMinutes (default 240): higher timeframe in minutes, up to 1440 (daily).
  • useChopFilter (default 0): 1 = enable the ADX filter on engine 1.
  • adxLen / adxMinLevel (default 14 / 20): ADX length and minimum level.
  • showDash (default 1): show the dashboard.
  • dashPos (default 0): dashboard corner, 0 = top right, 1 = top left, 2 = bottom right, 3 = bottom left.

The colours of the levels and labels are listed in a comment at the top of the code.

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

Download
Filename: PRC_Triple-Confluence-Nav.itf
Downloads: 0
Iván González
Iván González Legend
Code artist, my biography is a blank page waiting to be scripted. Imagine a bio so awesome it hasn't been coded yet.
Author’s Profile

Comments

ProRealCode ProRealCode
Loading...