Volume profile a numero di barre fisso o a larghezza di barra fissa

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #257493 quote
    effegi
    Participant
    Average

    Salve, per chi può essere interessato, ho scritto questo codice per il Volume Profile con qualche opzione supplementare rispetto a quello standard di Prorealtime (che non fornisce le variabili che calcola internamente):

     

    1) possibilità di configurare ora di inizio del VP in HHMMSS

    2) possibilità di utilizzarlo con numero di barre fisso (come quello di PRT) oppure con larghezza di barra fissa (mettendo il parametro AutoBars=1 e regolando la larghezza di barra con AutoBarsStep in pips), in modo da avere ogni giorno barre di misura costante (e magari più attinenti alla volatilità media giornaliera dello strumento)

     

    La differenza rispetto al VP di PRT è che tutti i valori di volume e posizione media della barra vengono memorizzati nei due array $volCD e $posCD, e quindi sono disponibili per ogni ulteriore elaborazione successiva:

    – ricerca punti minimi e massimi

    – statistiche

    – interpolazione fra punti (in fondo al codice c’è un esempio di una semplice interpolazione fra i valori di ogni barra per tracciare una curva media, tarabile con IntFact)

     

    Il VP di PRT è più preciso perché nella modalità tick usa il massimo dettaglio d’informazione per ogni singolo tick di volume e livello di prezzo, mentre questo attribuisce il volume di ogni singola candela ad un solo punto (selezionabile nella casella “applica a”)


    NOTA: Consiglio di usare timeframes molto bassi, M1,M2 per avere un minimo di dettaglio e minore approssimazione, e “applica a” settato su Totalprice – ( H+L+O+C)/4 o MedianPrice – (H+L)/2)


    //PRC Volume Profile VO - Simple volume profile with Array
    //03/02/2026 - By EffeGi
     
    defparam drawonlastbaronly=true
    //defparam calculateonlastbars=2000
    
    //PARAMETERS//
    //Hstart=10000 //starting hour in HHMMSS
    //NBars=50 //Fixed Number of bars with AutoBars=0
    //ScaleFactor=50 //Scale factor to plot the bars in the chart
    //AutoBars=0 //=fixed number o bars; 1=fixed width of each bar
    //AutoBarsStep=5 //width of each bar with AutoBars=1
    //Grafica=0 //0=none ;1=volume of each bar
    IntFact=2 //interpolation factor of the curve with graphics=2
    
    If time=Hstart then
    BS=barindex
    ENDIF
    If Day<>Day[1] then
    unset($volCD)
    unset($posCD)
    endif
    
    Priceval=customclose //suggested totalprice, (H+L+O+C)/4
    
    //CYCLE FILLING ARRAY VOLUMES AND STORING MAX BAR AND MIN BAR
    if IsLastBarUpdate then
    LookBack=barindex-BS
    HH=highest[max(lookback,1)](high)
    LL=lowest[max(lookback,1)](low)
    drawrectangle(BS,LL,barindex,HH) coloured ("gold")
    if AutoBars=1 then
    NBars=round((HH-LL)/AutoBarsStep/pipsize)
    endif
    WB=(HH-LL)/NBars //width of each bar
    aa=round((HH-LL)/pipsize,1) //only for graphic
    bb=round(WB/pipsize,1) //only for graphic
    drawtext ("Wtot=#aa#/ Wbar=#bb#/ N.Bars=#NBars#",(BS+barindex)/2,HH+WB) coloured("steelblue")
    BarraMax=0
    BarraMIn=1000000
    for b=1 to NBars do
    Lrange=LL+WB*(b-1)
    Hrange=Lrange+WB
    volbar=0
    for j = 1 to lookback do
    if Priceval[j]>=Lrange and Priceval[j]<Hrange then
    volbar=volbar+volume[j]
    endif
    next
    $volCD[b]=volbar
    $posCD[b]=(Lrange+Hrange)/2
    if volbar>BarraMax then
    BarraMax=Volbar
    PosPoc=(Lrange+Hrange)/2
    endif
    if volbar<BarraMIn then
    BarraMIn=Volbar
    endif
    next
    
    //GRAPHIC
    for x=1 to LastSet($volCD) DO
    Kscala=lookback/BarraMax*scalefactor/100 //Volume adjustment to the chart
    LunghBarra=round($volCD[x]*Kscala)
    DRAWRECTANGLE(BS,$posCD[x]-WB/2,BS+LunghBarra,$posCD[x]+WB/2) fillcolor("steelblue",50) coloured("black")
    xx=$volCD[x]
    IF GRAFICA>=1 THEN
    Drawtext("#xx#",BS+LunghBarra*1.2,$PosCD[x])
    ENDIF
    next
    drawpoint(BS+barramax*lookback/Barramax*scalefactor/100,pospoc,2) coloured("blue")  //Barramax = POC
    
    //Example of mean interpolation curve
    if grafica=2 then
    for x=1+IntFact to LastSet($volCD)-IntFact DO
    Vals=0
    for m=-IntFact to IntFact do
    Vals=Vals+$volCD[x+m]
    next
    Valm1=valm
    Valm=Vals/(IntFact*2+1)
    drawpoint(BS+ValM*Kscala,$posCD[x],1) coloured ("darkgreen")
    if x>=2+IntFact then
    drawsegment(BS+ValM*Kscala,$posCD[x],BS+ValM1*Kscala,$posCD[x-1])
    endif
    next
    endif
    endif
     
    return
    
    
    

     

    robertogozzi thanked this post
    #257494 quote
    Iván González
    Moderator
    Master

    Grazie mille per il tuo contributo!

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

Volume profile a numero di barre fisso o a larghezza di barra fissa


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
effegi @effegi Participant
Summary

This topic contains 1 reply,
has 2 voices, and was last updated by Iván González
1 hour, 28 minutes ago.

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