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