MarketProfile indicator

Category: Indicators By: philippe59139 Created: March 11, 2024, 10:44 AM
March 11, 2024, 10:44 AM
Indicators
13 Comments

Marketprofile: This is a complex script with various functions, including volume profile calculation, market session detection (such as the Asian session), opening range breakout management, and much more.

It uses a combination of technical analysis methods such as ATR (Average True Range), VPOC (Volume Point of Control), VAH (Value Area High), VAL (Value Area Low) and draws various graphical elements on the chart for visualization such as rectangles, lines and arrows to highlight price levels or important events.

The code is structured with several control flow instructions (if-else, while loops) to analyze price and volume data at different times of the day, with the aim of identifying potential trading opportunities. It adjusts dynamically according to market activity and makes extensive use of variables and arrays to store and manipulate data throughout the trading session.

 

//defparam drawonlastbaronly=true
//HourStart=1
//HourStop=23
starttimeUS = 151500
endtimeUS = 153000
IB=061000
atr=AverageTrueRange[14](close)
dataOggi=date
debutL = 143000
finL = 153000

//ScaleFactor=20
//NbrBars=200

dataTemp=dataOggi
Conteggio=0
ValMinMaxFactor=1
Conteggio=0
valvolperc=0.7
once SelEnd=0
once SelStart=0
once CountDays=0
once PrezzoChiusura=0
once PrezzoApertura=0
once PrezzoLow=0
once PrezzoHigh=0
once ColoreSfondo=0
once LastStartBarIndex=0
once LastStopBarIndex=0
once LastPrezzoChiusura=0

//while CountDays=Maxdays do
Conteggio=Conteggio+1

if date[Conteggio]<> dataTemp then
CountDays=CountDays+1
SelEnd=0
SelStart=0
//PrezzoChiusura=0
endif

OraBarra=hour[Conteggio]
MinMaxFactor=ValMinMaxFactor*pipsize
DiffHigh=abs(high[1]-high[2])
DiffMin=abs(low[1]-low[2])

//MinutiBarra=minute[Conteggio]

if OraBarra=HourStart and SelStart=0 then

DRAWVLINE(Barindex[Conteggio])Coloured(0,100,0)

if Close[conteggio]>PrezzoChiusura then
//Green
R=127
G=255
B=0

else
R=255
G=0
B=0

endif

//DRAWRECTANGLE(Barindex[Conteggio],Close[conteggio],Barindex,PrezzoChiusura) Coloured(R,G,B)
//DRAWTEXT("GAP", barindex, (Close[conteggio]+PrezzoChiusura)/2)

DayStart=day
MonthStart=month
if DayStart and MonthStart then

endif

PrezzoApertura=open[Conteggio]
SelStart=1
ColoreSfondo=0

LastStartBarIndex=barindex
//DisegnaLariga
endif

if OraBarra=HourStop and SelEnd=0 then
PrezzoChiusura=close[Conteggio]

DayStop=day
MonthStop=month
//Calcolo POC

StopLookback=barindex-LastStartBarIndex
hh=highest[StopLookback](high)
ll=lowest[StopLookback](low)
op=open
div = (hh-ll)/NbrBars
i=0
volsum=summation[StopLookback](volume)
startbar = barindex[StopLookback]
maxbar = 0
checkprice = ll
MaxTouch1 = 0
//step = 10
while i<NbrBars do
lrange=ll+div*i
hrange=lrange+div
volbull=0
volbear=0
ij=1
ind=0 //reset index of array
//for ij = 1 to StopLookback do
while ij<=StopLookback do
j=ij
if close[j]>=lrange and close[j]<=hrange then
if close[j]>open[j] then
volbull=volbull+volume[j]
else
volbear=volbear+volume[j]
endif
endif
ij=ij+1
wend
//next

bullbar = round((volbull*StopLookback)/volsum)*scalefactor
bearbar = round((volbear*StopLookback)/volsum)*scalefactor
if marketEtHeamap=1 then

drawrectangle(startbar,lrange,startbar+bullbar,hrange) coloured(46,139,87,alpha)bordercolor(46,139,87,1)
drawrectangle(startbar,lrange,startbar+bearbar,hrange) coloured(255,0,0,alpha)bordercolor(250,0,0,1)
endif

if bullbar>bearbar then
RPoc=46
GPoc=139
BPoc=87
else
RPoc=255
GPoc=0
BPoc=0
endif

if(bullbar>maxbar) then
vpoclevel = (lrange+hrange)/2
maxbar=bullbar
endif
if(bearbar>maxbar) then
vpoclevel = (lrange+hrange)/2
maxbar=bearbar
endif

i=i+1
wend

while checkprice<=hh do
touch=0 //reset price touch for this price level
for i = 0 to StopLookback-1 do
if high[i]>=checkprice and low[i]<=checkprice then
touch=touch+1
$hm[ind] = touch
endif
next
if $hm[ind] > MaxTouch1 then
MaxTouch1 = $hm[ind]
MaxTouch2 = checkprice
endif
//define color
CL=(hh+ll)/2
StdDev = (hh- ll) / 2
VX=0.7
VAH=CL + StdDev *vx
VAL=CL - StdDev * vx
g=rvg
b=210

r = min($hm[ind]*12,g)
//plot the result
//drawtext("█",startbar,checkprice) coloured(r,0,0)

if marketEtHeamap=1 then

//drawtext("#touch#",startbar-step*3,checkprice) coloured(110,110,110)
if sens=1 then
drawrectangle(startbar-touch*coef/(1),(checkprice-step/2),startbar,checkprice+step/2)coloured(0,r,50,alpha)bordercolor(210,r,210,50)
else
drawrectangle(startbar-touch*coef/(-1),(checkprice-step/2),startbar,checkprice+step/2)coloured(0,r,50,alpha)bordercolor(210,r,210,50)
endif
endif
if singlePrint=1 then
if touch<=1 then
drawrectangle(startbar,checkprice-step/2,Barindex[Conteggio]+box,checkprice+step/2)coloured(110,110,110,alpha)bordercolor(200,r,0,10)
endif
endif
checkprice=checkprice+step //increase price check for next round
ind=ind+1 //increase array index

wend
// Affichage de VAH et VAL

//DRAWsegment(startbar, MaxTouch2[1], Barindex[Conteggio]+box, MaxTouch2[1]) coloured(r,0,150,250)style(dottedline,2)
DRAWsegment(startbar, vpoclevel, Barindex[Conteggio]+box, vpoclevel) coloured(250,50,0,100)style(line,3)
DRAWsegment(startbar, vpoclevel[1], Barindex[Conteggio]+box, vpoclevel[1]) coloured(250,50,0,100)style(dottedline,2)

if Poc=1 then
bar=startbar-(startbar-Barindex[Conteggio])/2
DRAWsegment(startbar, MaxTouch2, Barindex[Conteggio]+box, MaxTouch2) coloured(250,2500,150,250)style(line,3)
DRAWsegment(startbar, VAH, Barindex[Conteggio]+box, VAH) coloured(r,0,150,250)style(line,3)
DRAWsegment(startbar, VAL, Barindex[Conteggio]+box, VAL) coloured(r,0,150,250)style(line,3)
drawtext("VAH #VAH#",bar,VAH+atr) coloured(110,110,110)
drawtext("VAL #VAL#",bar,VAL-atr) coloured(110,110,110)
drawrectangle(startbar,hh,Barindex[Conteggio],ll) coloured(0,0,0,1)bordercolor(46,139,87,150)style(DOTTEDLINE ,1)

endif

if niveaux=1 then
yesterdayVPOC=vpoclevel[1]
DRAWsegment(startbar, MaxTouch2, Barindex[Conteggio]+box, MaxTouch2) coloured(250,2500,150,250)style(line,3)
drawtext(" #DayStop#/#MonthStop# VPOC [#yesterdayVPOC#]",BarIndex,vpoclevel[2],dialog,bold,10) coloured(0,0,0)
DRAWTEXT(" #DayStart#/ #MonthStart# Close", barindex+box, PrezzoChiusura+(2*pipsize))
DRAWTEXT(" #DayStart#/ #MonthStart# Open", barindex+box, PrezzoApertura+(2*pipsize))

DRAWTEXT(" #DayStart#/ #MonthStart# High", barindex+box, hh)Coloured(255,0,255)
DRAWTEXT(" #DayStart#/ #MonthStart# Low", barindex+box, ll)Coloured(255,0,255)

drawrectangle(startbar-1, PrezzoApertura,startbar+1, PrezzoChiusura) coloured(255,55,150,250) bordercolor(210,210,210,50)

DRAWARROW (startbar-2, PrezzoApertura) COLOURED (255, 0, 0)
DRAWSEGMENT(startbar,PrezzoChiusura,Barindex[Conteggio]+box,PrezzoChiusura) Coloured(255,0,0)
DRAWSEGMENT(startbar,PrezzoApertura,Barindex[Conteggio]+box,PrezzoApertura) Coloured(100,75,22)

DRAWSEGMENT(startbar,hh,Barindex[Conteggio]+box,hh) Coloured(255,0,255)
DRAWSEGMENT(startbar,ll,Barindex[Conteggio]+box,ll) Coloured(255,0,255)
//endif
endif

SelEnd=1

DRAWVLINE(Barindex[Conteggio]) Coloured(255,0,0)
ColoreSfondo=1
LastStopBarIndex=barindex

//DisegnaLariga
endif

debutN = 153000
finN = 154500

// TRACE DU RECTANGLE DE L'OPR US

IF time = debutN THEN
hautN = 0
basN = 0
barredebutN = barindex
ENDIF

IF time = finN THEN
barrefinN = barindex
ENDIF

IF time >= debutN AND time <= finN THEN
IF high > hautN THEN
hautN = high

ENDIF
IF low < basN OR time = debutN THEN
basN = low
ENDIF
difN = round(abs(hautN-basN))
ENDIF
if opr=1 then
IF time >= finN THEN
DrawText(" OPR H #difn#pts",barredebutN,hautN+4*pointsize,Dialog,Bold,10) coloured(0,0,0,250)
DrawText(" OPR B",barredebutN,basN+4*pointsize,Dialog,Bold,10) coloured(0,0,0,250)
drawsegment(barredebutN,hautN,Barindex[Conteggio],hautN) coloured(0,0,0,50) STYLE (dottedline,2)
DRAWRECTANGLE(barredebutN,hautN,barrefinN,basN) coloured(0,0,255,Alpha)bordercolor(0,0,255,Alpha)
drawsegment(barredebutN,basN,Barindex[Conteggio],basN) coloured(0,0,0,50) STYLE (dottedline,2)
ENDIF
endif
// heures de session
debut = 010000
fin = 090000

// TRACE DU RECTANGLE DE SESSION ASIATIQUE

IF time = debut THEN
haut = 0
bas = 0
barredebut = barindex
ENDIF

IF time = fin THEN
barrefin = barindex
ENDIF

IF time >= debut AND time <= fin THEN
IF high > haut THEN
haut = high

ENDIF
IF low < bas OR time = debut THEN
bas = low
ENDIF
dif = round(abs(haut-bas))
ENDIF
if Asiatic=1 then
IF time >= fin THEN
DrawText(" Haut asiatique #dif#pts",barredebut,haut+4*pointsize,Dialog,Bold,10) coloured(0,0,0,250)
DrawText(" Bas asiatique",barredebut,bas+4*pointsize,Dialog,Bold,10) coloured(0,0,0,250)
drawsegment(barredebut,haut,Barindex[Conteggio],haut) coloured(0,0,0,50) STYLE (dottedline,2)
DRAWRECTANGLE(barredebut,haut,barrefin,bas) coloured(255,255,0,50)bordercolor(255,255,0,1)
drawsegment(barredebut,bas,Barindex[Conteggio],bas) coloured(0,0,0,50) STYLE (dottedline,2)
ENDIF
endif

if IsLastBarUpdate then

For j = 1 To nb do

for i = 1 To StopLookback-1 do

IF High[StopLookback*(j-1)+i]=hh[(j-1)*StopLookback] Then

//hh=High[StopLookback*(j-1)+i]
HighestI = BarIndex[StopLookback*(j-1)+i]
DRAWTEXT(hh[(j-1)*StopLookback], HighestI, hh[(j-1)*StopLookback]+15, Dialog, Standard, 12) COLOURED(0,255,0)
DRAWARROWDOWN(HighestI,hh[(j-1)*StopLookback]+2) COLOURED(0,255,00)

endif
IF Low[StopLookback*(j-1)+i]=ll[(j-1)*StopLookback] Then
//ll=Low[StopLookback*(j-1)+i]
LowestI = BarIndex[StopLookback*(j-1)+i]
DRAWTEXT(ll[(j-1)*StopLookback], LowestI, ll[(j-1)*StopLookback]-15, Dialog, Standard, 12) COLOURED(200,0,0)
DRAWARROWUP(LowestI,ll[(j-1)*StopLookback]-2) COLOURED(255,0,00)

endif

next
next

endif
// TRACE DU RECTANGLE IB

IF time = debutL THEN
hautL = 0
basL = 0
barredebutL = barindex
ENDIF

IF time = finL THEN
barrefinL = barindex
ENDIF

IF time >= debutL AND time <= finL THEN
IF high > hautL THEN
hautL = high

ENDIF
IF low < basL OR time = debutL THEN
basL = low
ENDIF
difL = round(abs(hautL-basL))
ENDIF
if imbalance=1 then
if time=IB then
barIB=barindex
endif
IF time >= finL THEN
DrawText("Haut Imbalance #difL#pts",barIB+40,hautL+0.4,Dialog,Bold,10) coloured(0,0,0,250)
DrawText("Bas Imbalance",barIB+40,basL+0.4,Dialog,Bold,10) coloured(0,0,0,250)
drawsegment(barIB,hautL,Barindex[Conteggio],hautL) coloured(0,255,0,Alpha) STYLE (dottedline,1)
DRAWRECTANGLE(barIB-1,hautL,barIB+1,basL) coloured(250,255,0,Alpha)bordercolor(0,255,0,1)
drawsegment(barIB,basL,Barindex[Conteggio],basL) coloured(0,255,0,Alpha) STYLE (dottedline,1)
drawrectangle(barredebutL, hautL,barrefinL, basL) coloured(255,255,150,60) bordercolor(210,210,210,50)
ENDIF
endif

RETURN MaxTouch2,VAH,VAL

 

Download
Filename: MarketProfile.itf
Downloads: 299
philippe59139 Senior
This author is like an anonymous function, present but not directly identifiable. More details on this code architect as soon as they exit 'incognito' mode.
Author’s Profile

Comments

Logo Logo
Loading...