Trovo l’indicatore in oggetto più completo dei vari precedenti. Chiedo se è possibile una traduzione.
Grazie
https://it.tradingview.com/script/paLrV2ud-Supply-Demand-Cumulative-Volume-Delta-Flow-ChartPrime/
ecco
//--------------------------------------------
// PRC_Supply-Demand-CVD-Flow (by ChartPrime)
// version = 0
// 07.04.2026
// Ivan Gonzalez @ www.prorealcode.com
// Sharing ProRealTime knowledge
//--------------------------------------------
defparam drawonlastbaronly = true
//--------------------------------------------
// === PARAMETERS ===
atrLen = 14 // ATR length
momMult = 1.0 // Breakout body >= ATR * mult
maxZones = 10 // Max active zones per type
showSignals = 1 // Signal triangles (1=yes, 0=no)
//--------------------------------------------
// === ATR ===
myATR = averagetruerange[atrLen](close)
//--------------------------------------------
// === ZONE DETECTION ===
// Base candle = bar[2], breakout candle = bar[1]
IF barindex > 2 THEN
brkBody = abs(close[1] - open[1])
isDemand = (close[2] < open[2]) AND (close[1] > open[1]) AND brkBody >= momMult * myATR[1]
isSupply = (close[2] > open[2]) AND (close[1] < open[1]) AND brkBody >= momMult * myATR[1]
ELSE
isDemand = 0
isSupply = 0
ENDIF
//--------------------------------------------
// === COUNTERS ===
once dCount = 0
once sCount = 0
once sigCount = 0
//--------------------------------------------
// === CREATE DEMAND ZONE ===
IF isDemand THEN
zTop = high[2]
zBot = low[2]
zLeft = barindex - 2
overlap = 0
FOR i = 0 TO dCount - 1 DO
IF $dValid[i] = 1 THEN
IF zBot <= $dTop[i] AND zTop >= $dBot[i] THEN
overlap = 1
BREAK
ENDIF
ENDIF
NEXT
IF overlap = 0 THEN
$dTop[dCount] = zTop
$dBot[dCount] = zBot
$dLeft[dCount] = zLeft
$dValid[dCount] = 1
dCount = dCount + 1
// Trim oldest if exceeds max
activeD = 0
FOR i = 0 TO dCount - 1 DO
IF $dValid[i] = 1 THEN
activeD = activeD + 1
ENDIF
NEXT
IF activeD > maxZones THEN
FOR i = 0 TO dCount - 1 DO
IF $dValid[i] = 1 THEN
$dValid[i] = 0
BREAK
ENDIF
NEXT
ENDIF
// Store signal
IF showSignals = 1 THEN
$sigBar[sigCount] = barindex
$sigPrice[sigCount] = low - myATR * 0.3
$sigType[sigCount] = 1
sigCount = sigCount + 1
ENDIF
ENDIF
ENDIF
//--------------------------------------------
// === CREATE SUPPLY ZONE ===
IF isSupply THEN
zTop = high[2]
zBot = low[2]
zLeft = barindex - 2
overlap = 0
FOR i = 0 TO sCount - 1 DO
IF $sValid[i] = 1 THEN
IF zBot <= $sTop[i] AND zTop >= $sBot[i] THEN
overlap = 1
BREAK
ENDIF
ENDIF
NEXT
IF overlap = 0 THEN
$sTop[sCount] = zTop
$sBot[sCount] = zBot
$sLeft[sCount] = zLeft
$sValid[sCount] = 1
sCount = sCount + 1
activeS = 0
FOR i = 0 TO sCount - 1 DO
IF $sValid[i] = 1 THEN
activeS = activeS + 1
ENDIF
NEXT
IF activeS > maxZones THEN
FOR i = 0 TO sCount - 1 DO
IF $sValid[i] = 1 THEN
$sValid[i] = 0
BREAK
ENDIF
NEXT
ENDIF
IF showSignals = 1 THEN
$sigBar[sigCount] = barindex
$sigPrice[sigCount] = high + myATR * 0.3
$sigType[sigCount] = -1
sigCount = sigCount + 1
ENDIF
ENDIF
ENDIF
//--------------------------------------------
// === MITIGATION ===
FOR i = 0 TO dCount - 1 DO
IF $dValid[i] = 1 AND close <= $dBot[i] THEN
$dValid[i] = 0
ENDIF
NEXT
FOR i = 0 TO sCount - 1 DO
IF $sValid[i] = 1 AND close >= $sTop[i] THEN
$sValid[i] = 0
ENDIF
NEXT
//--------------------------------------------
// === DRAWING ===
IF islastbarupdate THEN
// Demand zones + CVD
FOR i = 0 TO dCount - 1 DO
IF $dValid[i] = 1 THEN
zLen = barindex - $dLeft[i]
cumDelta = 0
FOR k = zLen DOWNTO 0 DO
IF close[k] > open[k] THEN
cumDelta = cumDelta + volume[k]
ELSIF close[k] < open[k] THEN
cumDelta = cumDelta - volume[k]
ENDIF
NEXT
drawrectangle($dLeft[i], $dBot[i], barindex, $dTop[i]) coloured(34,197,94) fillcolor(34,197,143,38)
drawtext("Demand | CVD: #cumDelta#", $dLeft[i]+2, $dBot[i]) coloured(34,197,94)
ENDIF
NEXT
// Supply zones + CVD
FOR i = 0 TO sCount - 1 DO
IF $sValid[i] = 1 THEN
zLen = barindex - $sLeft[i]
cumDelta = 0
FOR k = zLen DOWNTO 0 DO
IF close[k] > open[k] THEN
cumDelta = cumDelta + volume[k]
ELSIF close[k] < open[k] THEN
cumDelta = cumDelta - volume[k]
ENDIF
NEXT
drawrectangle($sLeft[i], $sBot[i], barindex, $sTop[i]) coloured(239,68,68) fillcolor(239,68,68,38)
drawtext("Supply | CVD: #cumDelta#", $sLeft[i]+2, $sTop[i]) coloured(239,68,68)
ENDIF
NEXT
// Signal triangles
IF showSignals = 1 THEN
FOR i = 0 TO sigCount - 1 DO
IF $sigType[i] = 1 THEN
drawtext("△", $sigBar[i], $sigPrice[i]) coloured(34,197,94)
ELSIF $sigType[i] = -1 THEN
drawtext("▽", $sigBar[i], $sigPrice[i]) coloured(239,68,68)
ENDIF
NEXT
ENDIF
ENDIF
RETURN
Ti riferisci alla linea lungo i blocchi? Questo non è possibile.
La grandezza dei blocchi indicano forse le dimensioni del volume?
Grazie
No. La dimensione dipende dai valori massimi e minimi, non dal volume.