Indicatore VOB volume order block: evidenziare candela origine rettangoli

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #258464 quote
    Msport71
    Participant
    Junior

    Buongiorno,

    volevo chiedere cortese modifica dell’indicatore in oggetto in modo che possa evidenziare con un colore (ad esempio giallo) la candela ( frequentemente con spike pronunciati o doji) dalla quale iniziano a propagarsi i rettangoli che identificano le aree viola e azzurre di Order block sul grafico.


    Grazie del cortese aiuto.


    Volume Order Blocks (VOB)



    #258489 quote
    Iván González
    Moderator
    Master

    Qualcosa del genere

    //----------------------------------
    // PRC_Volume Order Blocks by BigBeluga
    //----------------------------------
    DEFPARAM DRAWONLASTBARONLY = TRUE
    //DEFPARAM CALCULATEONLASTBARS = 500
    
    //----------------------------------
    // INPUTS
    //----------------------------------
    length1 = 5
    length2 = length1 + 13
    midL = 1 // 1=true, 0=false.
    trendShadow = 1 // 1=true, 0=false.
    showLastN = 100
    showbroken = 1 // 1=true, 0=false.
    
    // highlight origin candle
    highlightCandle = 1 // 1=true, 0=false.
    hlColorR = 255
    hlColorG = 255
    hlColorB = 0
    
    // shadow color
    col1R = 38
    col1G = 186
    col1B = 159
    col2R = 102
    col2G = 38
    col2B = 186
    
    // block color
    bullColorR = 38
    bullColorG = 186
    bullColorB = 159
    bearColorR = 102
    bearColorG = 38
    bearColorB = 186
    
    //----------------------------------
    // EMA CALCULATION
    //----------------------------------
    ema1 = exponentialaverage[length1](close)
    ema2 = exponentialaverage[length2](close)
    
    crossUp = (ema1 crosses over ema2)
    crossDn = (ema1 crosses under ema2)
    
    //----------------------------------
    // Shadow
    //----------------------------------
    difff = ema2 - ema1
    IF difff > 0 THEN
       colorShadowR = col2R
       colorShadowG = col2G
       colorShadowB = col2B
    ELSE
       colorShadowR = col1R
       colorShadowG = col1G
       colorShadowB = col1B
    ENDIF
    
    IF trendShadow THEN
       colorbetween(ema1, ema2, colorShadowR, colorShadowG, colorShadowB, 30)
    ENDIF
    
    //----------------------------------
    // ATR calculation
    //----------------------------------
    atrPeriod = 200
    myAtr = averagetruerange[atrPeriod](close)
    atr = myAtr * 3
    atr1 = myAtr * 2
    
    //----------------------------------
    //--- Bullish blocks detection
    //----------------------------------
    ONCE b = 0
    IF crossUp THEN
       myLowest = lowest[length2](low)
       myLowestIndex = 0
       vol = 0
       src = 0
       
       i = 0
       FOR i = 1 TO length2 DO
          IF low[i] = myLowest THEN
             myLowestIndex = barindex[i]
             src = min(open[i], close[i])
             // Store origin candle High and Low for highlight
             $bullOriginHigh[b] = high[i]
             $bullOriginLow[b] = low[i]
             $bullOriginOpen[b] = open[i]
             $bullOriginClose[b] = close[i]
             BREAK
          ENDIF
       NEXT
       
       IF myLowestIndex > 0 THEN
          FOR k = 0 TO myLowestIndex DO
             vol = vol + volume[k]
          NEXT
          
          // ATR
          IF (src - myLowest) < (atr1 * 0.5) THEN
             src = myLowest + atr1 * 0.5
          ENDIF
          
          // store block
          $bullIndex[b] = myLowestIndex
          $bullUpper[b] = src
          $bullLower[b] = myLowest
          $bullMid[b] = (src + myLowest) / 2
          $bullVol[b] = vol
          $bullIsActive[b] = 1
          $bullValid[b] = 1
          b = b + 1
       ENDIF
    ENDIF
    
    //----------------------------------
    //--- Bearish blocks detection
    //----------------------------------
    ONCE z = 0
    IF crossDn THEN
       myHighest = highest[length2](high)
       myHighestIndex = 0
       vol = 0
       src = 0
       
       i = 0
       FOR i = length2 DOWNTO 1 DO
          IF high[i] = myHighest THEN
             myHighestIndex = barindex[i]
             src = max(open[i], close[i])
             // Store origin candle High and Low for highlight
             $bearOriginHigh[z] = high[i]
             $bearOriginLow[z] = low[i]
             BREAK
          ENDIF
       NEXT
       
       FOR k = 0 TO myHighestIndex DO
          vol = vol + volume[k]
       NEXT
       
       // ATR
       IF (myHighest - src) < (atr1 * 0.5) THEN
          src = myHighest - atr1 * 0.5
       ENDIF
       
       // Store block
       $bearIndex[z] = myHighestIndex
       $bearUpper[z] = myHighest
       $bearLower[z] = src
       $bearMid[z] = (src + myHighest) / 2
       $bearVol[z] = vol
       $bearIsActive[z] = 1
       $bearValid[z] = 1
       z = z + 1
       
    ENDIF
    
    //----------------------------------
    // PLOT
    //----------------------------------
    IF islastbarupdate THEN
       
       // --- 1. BULLISH BLOCKS (Invalidation) ---
       IF b > 0 THEN
          FOR i = 0 TO b - 1 DO
             IF $bullIsActive[i] = 1 THEN
                FOR j = barindex - $bullIndex[i] DOWNTO 0 DO
                   // A. Crossunder
                   IF close[j] < $bullLower[i] THEN
                      $bullIsActive[i] = 0
                      $bullIndexEnd[i] = barindex[j]
                      BREAK
                   ENDIF
                   
                   // B. Overlap
                   IF i > 0 AND $bullIsActive[max(0,i-1)] = 1 THEN
                      dist = abs($bullMid[i] - $bullMid[i-1])
                      IF dist < atr[j] THEN
                         $bullIsActive[i-1] = 0
                         $bullValid[i-1] = 0
                      ENDIF
                   ENDIF
                NEXT
             ENDIF
          NEXT
       ENDIF
       
       // --- 2. BEARISH BLOCKS (Invalidation) ---
       IF z > 0 THEN
          FOR i = 0 TO z - 1 DO
             IF $bearIsActive[i] = 1 THEN
                FOR j = barindex - $bearIndex[i] DOWNTO 0 DO
                   // A. Crossover
                   IF close[j] > $bearUpper[i] THEN
                      $bearIsActive[i] = 0
                      $bearIndexEnd[i] = barindex[j]
                      BREAK
                   ENDIF
                   
                   // B. Overlap
                   IF i > 0 AND $bearIsActive[max(0,i-1)] = 1 THEN
                      dist = abs($bearMid[i] - $bearMid[i-1])
                      IF dist < atr[j] THEN
                         $bearIsActive[i-1] = 0
                         $bearValid[i-1] = 0
                      ENDIF
                   ENDIF
                NEXT
             ENDIF
          NEXT
       ENDIF
       
       // --- 3. BULLISH BLOCKS ---
       IF b > 0 THEN
          startIndex = max(0, b - showLastN)
          FOR i = startIndex TO b - 1 DO
             IF $bullIsActive[i] = 1 THEN
                
                IF highlightCandle = 1 THEN
                   DRAWSEGMENT($bullIndex[i], $bullOriginHigh[i], $bullIndex[i], $bullOriginLow[i]) COLOURED(hlColorR, hlColorG, hlColorB, 255) STYLE(LINE, 5)
                ENDIF
                
                DRAWRECTANGLE($bullIndex[i], $bullLower[i], barindex, $bullUpper[i]) COLOURED(bullColorR, bullColorG, bullColorB) FILLCOLOR(bullColorR, bullColorG, bullColorB, 80)
                
                IF midL THEN
                   DRAWSEGMENT($bullIndex[i], $bullMid[i], barindex, $bullMid[i]) COLOURED(bullColorR, bullColorG, bullColorB) STYLE(dottedline)
                ENDIF
                
                bullvol = $bullVol[i]
                DRAWTEXT("#bullvol#", barindex + 5, $bullMid[i])
                
             ELSIF $bullValid[i] = 1 AND showbroken THEN
                IF highlightCandle = 1 THEN
                   DRAWSEGMENT($bullIndex[i], $bullOriginHigh[i], $bullIndex[i], $bullOriginLow[i]) COLOURED(hlColorR, hlColorG, hlColorB, 255) STYLE(LINE, 5)
                ENDIF
                DRAWRECTANGLE($bullIndex[i], $bullLower[i], $bullIndexEnd[i], $bullUpper[i]) COLOURED(bullColorR, bullColorG, bullColorB, 80) FILLCOLOR(bullColorR, bullColorG, bullColorB, 40)
                
             ENDIF
          NEXT
       ENDIF
       
       // --- 4. BEARISH BLOCKS ---
       IF z > 0 THEN
          startIndex = max(0, z - showLastN)
          FOR i = startIndex TO z - 1 DO
             IF $bearIsActive[i] = 1 THEN
                
                IF highlightCandle = 1 THEN
                   DRAWSEGMENT($bearIndex[i], $bearOriginHigh[i], $bearIndex[i], $bearOriginLow[i]) COLOURED(hlColorR, hlColorG, hlColorB, 255) STYLE(LINE, 5)
                ENDIF
                
                DRAWRECTANGLE($bearIndex[i], $bearLower[i], barindex, $bearUpper[i]) COLOURED(bearColorR, bearColorG, bearColorB) FILLCOLOR(bearColorR, bearColorG, bearColorB, 80)
                
                IF midL THEN
                   DRAWSEGMENT($bearIndex[i], $bearMid[i], barindex, $bearMid[i]) COLOURED(bearColorR, bearColorG, bearColorB) STYLE(dottedline)
                ENDIF
                
                bearvol = $bearVol[i]
                DRAWTEXT("#bearvol#", barindex + 5, $bearMid[i])
                
             ELSIF $bearValid[i] = 1 AND showbroken THEN
                IF highlightCandle = 1 THEN
                   DRAWSEGMENT($bearIndex[i], $bearOriginHigh[i], $bearIndex[i], $bearOriginLow[i]) COLOURED(hlColorR, hlColorG, hlColorB, 255) STYLE(LINE, 5)
                ENDIF
                DRAWRECTANGLE($bearIndex[i], $bearLower[i], $bearIndexEnd[i], $bearUpper[i]) COLOURED(bearColorR, bearColorG, bearColorB, 80) FILLCOLOR(bearColorR, bearColorG, bearColorB, 40)
             ENDIF
          NEXT
       ENDIF
       
    ENDIF
    
    //----------------------------------
    RETURN ema1 AS "EMA fast", ema2 AS "EMA slow"
    


    Msport71 and robertogozzi thanked this post
    #258495 quote
    Msport71
    Participant
    Junior

    Perfetto, grazie.


    Una domanda, guardando lo script non mi è chiaro quali sono i periodi delle due EMA ( fast e slow) , che se non ho capito male sono correlate a lenght1 e lenght2.

    Trovo scritto :

    • lenght 1 valore 5
    • lenght 2 : Ema 1+13 quindi dovrebbe essere 14.


    Ho provato a mettere due Ema sul grafico e non mi sembra combacino.


    Grazie




    #258499 quote
    robertogozzi
    Moderator
    Master


    Msport71 wrote: length2 = length1 + 13

    5 + 13 = 18, la somma di length1 + 13.



    #258503 quote
    Msport71
    Participant
    Junior

    E’ vero, grazie ho interpretato male


    robertogozzi thanked this post
Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.

Indicatore VOB volume order block: evidenziare candela origine rettangoli


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
Msport71 @carlo-pasca Participant
Summary

This topic contains 4 replies,
has 3 voices, and was last updated by Msport71
1 day, 21 hours ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 02/25/2026
Status: Active
Attachments: No files
Logo Logo
Loading...