Wick-Pressure-Zones-BigBeluga

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #250347 quote
    Ciccarelli Franco
    Participant
    Junior

    Da tempo, per individuare zone di inversione, uso l’indicatore di Nicolas Wick Pressure.

    Ma oggi su tradingview  ho trovato l’indicatore in oggetto che mi sembra più completo.

    Ivan se reputi giusto questa mia osservazione , puoi tradurre il codice dell’link qui sotto.

    https://it.tradingview.com/script/4haSPpAE-Wick-Pressure-Zones-BigBeluga/

    Grazie

    #250555 quote
    Ciccarelli Franco
    Participant
    Junior

    Non lo ritieni interessante da pubblicare?

    #250559 quote
    Iván González
    Moderator
    Master

    ecco

    //---------------------------------------------------
    //PRC_Wick Pressure Zones by BigBeluga
    //version = 0
    //09.09.2025
    //Iván González @ www.prorealcode.com
    //Sharing ProRealTime knowledge
    //---------------------------------------------------
    DEFPARAM DrawOnLastBarOnly = true
    //---------------------------------------------------
    // inputs
    //---------------------------------------------------
    lookback = 200
    threshold = 80
    extendBars = 20
    maxLevels  = 10
    rsiLen = 14
    upR = 255
    upG = 0
    upB = 0
    dnR = 0
    dnG = 255
    dnB = 0
    alpha=30
    //---------------------------------------------------
    // Variables auxiliares
    //---------------------------------------------------
    bodyTop = MAX(open, close)
    bodyBot = MIN(open, close)
    // Mechas relativas (evitar división por 0)
    denUp = MAX(bodyTop, 0.0000001)
    denLo = MAX(low,     0.0000001)
    upperWick = (high - bodyTop) / denUp
    lowerWick = (bodyBot - low)  / denLo
    
    maxUpper = HIGHEST[lookback](upperWick)
    maxLower = HIGHEST[lookback](lowerWick)
    
    sizeUpWick = 0
    sizeLoWick = 0
    IF maxUpper > 0 THEN
       sizeUpWick = FLOOR( (upperWick / maxUpper) * 100 )
    ENDIF
    IF maxLower > 0 THEN
       sizeLoWick = FLOOR( (lowerWick / maxLower) * 100 )
    ENDIF
    //---------------------------------------------------
    myrsi = RSI[rsiLen](close)
    vol = volume
    //---------------------------------------------------
    // Separación mínima entre zonas
    ONCE startidx = -100000
    //---------------------------------------------------
    // Boxes
    //---------------------------------------------------
    ONCE n = 0
    
    newUpper = sizeUpWick >= threshold AND NOT (sizeLoWick >= threshold) AND myrsi > 50 AND (BarIndex - startidx > extendBars)
    newLower = sizeLoWick >= threshold AND NOT (sizeUpWick >= threshold) AND myrsi < 50 AND (BarIndex - startidx > extendBars)
    
    // Crear zona superior
    IF newUpper THEN
       startidx = BarIndex
       n = n + 1
       $side[n] = 1
       $left[n] = BarIndex - 1
       $top[n]  = high
       $bot[n]  = bodyTop
       $right[n] = barindex + 1
       $broken[n] = 0
       $volume[n] = volume
       // Límite de zonas: mantener sólo las más recientes
       IF n > maxLevels THEN
          // Shift a la izquierda
          FOR k = 1 TO n - 1 DO
             $side[k] = $side[k+1]
             $left[k] = $left[k+1]
             $top[k]  = $top[k+1]
             $bot[k]  = $bot[k+1]
             $right[k] = $right[k+1]
             $broken[k] = $broken[k+1]
             $volume[k] = $volume[k+1]
          NEXT
          n = maxLevels
       ENDIF
    ENDIF
    
    // Crear zona inferior
    IF newLower THEN
       startidx = BarIndex
       n = n + 1
       $side[n] = -1
       $left[n] = BarIndex - 1
       $top[n]  = bodyBot
       $bot[n]  = low
       $right[n] = barindex + 1
       $broken[n] = 0
       $volume[n] = volume
       
       IF n > maxLevels THEN
          FOR k = 1 TO n - 1 DO
             $side[k] = $side[k+1]
             $left[k] = $left[k+1]
             $top[k]  = $top[k+1]
             $bot[k]  = $bot[k+1]
             $right[k] = $right[k+1]
             $broken[k] = $broken[k+1]
             $volume[k] = $volume[k+1]
          NEXT
          n = maxLevels
       ENDIF
    ENDIF
    
    //---------------------------------------------------
    // DIBUJO y GESTIÓN
    //---------------------------------------------------
    IF islastbarupdate THEN
       
       FOR i = 1 TO n DO
          for j=barindex-$right[i] downto 0 do
             IF $side[i] = 1 AND low[j] > $top[i] THEN
                $broken[i] = 1
                $right[i] = barindex[j]
                break
             ELSIF $side[i] = -1 AND high[j] < $bot[i] THEN
                $broken[i] = 1
                $right[i] = barindex[j]
                break
             ENDIF
          next
          
          vol=$volume[i]
          
          if $broken[i]=1 and $side[i]=1 then
             drawrectangle($left[i],$bot[i],$left[i]+2,$top[i])coloured("red")
             drawsegment($left[i],$top[i],$right[i],$top[i])coloured("grey",125)style(line,3)
          ELSIF $broken[i]=0 AND $side[i]=1 THEN
             leftX  = $left[i]
             rightX = barindex
             topY   = $top[i]
             botY   = $bot[i]
             height = ABS(topY - botY)
             IF height > 0 THEN
                steps  = 10
                stepH  = height / steps
                DRAWRECTANGLE(leftX, topY, leftX + 2, botY) COLOURED(upR,upG,upB)
                FOR s = 0 TO steps - 1 DO
                   segBot   = botY + stepH * s
                   segTop   = segBot + stepH
                   alphaVal = 30 + s * 12
                   IF s = steps - 1 THEN
                      alphaVal = 160
                   ENDIF
                   DRAWRECTANGLE(leftX, segTop, rightX, segBot) COLOURED(upR,upG,upB, 0)fillcolor(upR,upG,upB, alphaVal)
                NEXT
                midY = botY + height * 0.5
                DRAWTEXT("#vol#", rightX, midY)
             ENDIF
          elsif $broken[i]=1 and $side[i]=-1 then
             drawrectangle($left[i],$bot[i],$left[i]+2,$top[i])coloured("green")
             drawsegment($left[i],$bot[i],$right[i],$bot[i])coloured("grey",125)style(line,3)
          ELSIF $broken[i]=0 AND $side[i]=-1 THEN
             leftX  = $left[i]
             rightX = barindex
             topY   = $top[i]
             botY   = $bot[i]
             height = ABS(topY - botY)
             IF height > 0 THEN
                steps  = 10
                stepH  = height / steps
                DRAWRECTANGLE(leftX, topY, leftX + 2, botY) COLOURED(dnR,dnG,dnB)
                FOR s = 0 TO steps - 1 DO
                   segBot   = botY + stepH * s
                   segTop   = segBot + stepH
                   alphaVal = 160 - s * 12
                   IF s = 0 THEN
                      alphaVal = 160
                   ENDIF
                   DRAWRECTANGLE(leftX, segTop, rightX, segBot) COLOURED(dnR,dnG,dnB, 0)fillcolor(dnR,dnG,dnB, alphaVal)
                NEXT
                midY = botY + height * 0.5
                DRAWTEXT("#vol#", rightX, midY)
             ENDIF
          endif
       NEXT
    ENDIF
    
    RETURN
    
Viewing 3 posts - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.

Wick-Pressure-Zones-BigBeluga


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by Iván González
4 months, 4 weeks ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 09/04/2025
Status: Active
Attachments: No files
Logo Logo
Loading...