AbzParticipant
Veteran
Hello
made a MTF screener based on the price action indicator found here https://www.prorealcode.com/prorealtime-indicators/weighted-price-action/ however it dosent seems to give the correct screener results.
result can be 1 = uptrend on 1h timeframe however if i go to chart i can see it is acutally 2 = downtrend
thanks to @robertogozzi for making this template
// 1 = ↑
// 2 = ↓
// 9 = no signal on that TF
//
// 4 = 4-hour TF
// H = 1-hour TF
// 1 = 15-minute TF
// 5 = 5-minute TF
//
TIMEFRAME(daily)
p=20
closeopen = 1
highhigh = 1
lowlow = 1
closeinrange = 1
Averages = 1
lines = 1
a = (close > open)
b = (high > high[1])
c = (low > low[1])
d = ((close-low)/(high-low) > 0.5)
e = (close < open)
f = (high < high[1])
g = (low < low[1])
i = ((close-low)/(high-low) < 0.5)
up = 0
down = 0
for j = 0 to p-1
if closeopen then
if a[j] then
up = up + (p-j)
endif
if e[j] then
down = down + (p-j)
endif
endif
if highhigh then
if b[j] then
up = up + (p-j)
endif
if f[j] then
down = down + (p-j)
endif
endif
if lowlow then
if c[j] then
up = up + (p-j)
endif
if g[j] then
down = down + (p-j)
endif
endif
if closeinrange then
if d[j] then
up = up + (p-j)
endif
if i[j] then
down = down + (p-j)
endif
endif
next
upres = (up - min(up,down))
downres = (down - min(up,down))
upave = weightedaverage[p/2](upres)
downave = weightedaverage[p/2](downres)
if averages then
upave = upave
downave = downave
else
upave = undefined
downave = undefined
endif
if lines then
upres2 = upres
downres2 = downres
else
upres2 = undefined
downres2 = undefined
endif
//return upres2 coloured(0,128,0) as "long", downres2 coloured(128,0,0) as "short", upave coloured(0,128,0) as "long average", downave coloured(128,0,0) as "short average"
XSignal= 9000
IF upres2 > downres2 and upave > downave THEN
XSignal = 1000
ELSIF upres2 < downres2 and upave < downave THEN
XSignal = 2000
ENDIF
TIMEFRAME(4 hour)
yp=20
ycloseopen = 1
yhighhigh = 1
ylowlow = 1
ycloseinrange = 1
yAverages = 1
ylines = 1
ya = (close > open)
yb = (high > high[1])
yc = (low > low[1])
yd = ((close-low)/(high-low) > 0.5)
ye = (close < open)
yf = (high < high[1])
yg = (low < low[1])
yi = ((close-low)/(high-low) < 0.5)
yup = 0
ydown = 0
for yj = 0 to yp-1
if ycloseopen then
if ya[yj] then
yup = yup + (yp-yj)
endif
if ye[yj] then
ydown = ydown + (yp-j)
endif
endif
if yhighhigh then
if yb[yj] then
yup = yup + (yp-yj)
endif
if yf[yj] then
ydown = ydown + (yp-yj)
endif
endif
if ylowlow then
if yc[yj] then
yup = yup + (yp-yj)
endif
if yg[yj] then
ydown = ydown + (yp-yj)
endif
endif
if ycloseinrange then
if yd[yj] then
yup = yup + (yp-yj)
endif
if yi[yj] then
ydown = ydown + (yp-yj)
endif
endif
next
yupres = (yup - min(yup,ydown))
ydownres = (ydown - min(yup,ydown))
yupave = weightedaverage[yp/2](yupres)
ydownave = weightedaverage[yp/2](ydownres)
if yaverages then
yupave = yupave
ydownave = ydownave
else
yupave = undefined
ydownave = undefined
endif
if ylines then
yupres2 = yupres
ydownres2 = ydownres
else
yupres2 = undefined
ydownres2 = undefined
endif
YSignal= 900
IF yupres2 > ydownres2 and yupave > ydownave THEN
YSignal = 100
ELSIF yupres2 < ydownres2 and yupave < ydownave THEN
YSignal = 200
ENDIF
//
TIMEFRAME(1 hour)
zp=20
zcloseopen = 1
zhighhigh = 1
zlowlow = 1
zcloseinrange = 1
zAverages = 1
zlines = 1
za = (close > open)
zb = (high > high[1])
zc = (low > low[1])
zd = ((close-low)/(high-low) > 0.5)
ze = (close < open)
zf = (high < high[1])
zg = (low < low[1])
zi = ((close-low)/(high-low) < 0.5)
zup = 0
zdown = 0
for zj = 0 to zp-1
if zcloseopen then
if za[zj] then
zup = zup + (zp-zj)
endif
if ze[zj] then
zdown = zdown + (zp-j)
endif
endif
if zhighhigh then
if zb[zj] then
zup = zup + (zp-zj)
endif
if zf[zj] then
zdown = zdown + (zp-zj)
endif
endif
if zlowlow then
if zc[zj] then
zup = zup + (zp-zj)
endif
if zg[zj] then
zdown = zdown + (zp-zj)
endif
endif
if zcloseinrange then
if zd[zj] then
zup = zup + (zp-zj)
endif
if zi[zj] then
zdown = zdown + (zp-zj)
endif
endif
next
zupres = (zup - min(zup,zdown))
zdownres = (zdown - min(zup,zdown))
zupave = weightedaverage[zp/2](zupres)
zdownave = weightedaverage[zp/2](zdownres)
if zaverages then
zupave = zupave
zdownave = zdownave
else
zupave = undefined
zdownave = undefined
endif
if zlines then
zupres2 = zupres
zdownres2 = zdownres
else
zupres2 = undefined
zdownres2 = undefined
endif
ZSignal= 90
IF zupres2 > zdownres2 and zupave > zdownave THEN
ZSignal = 10
ELSIF zupres2 < zdownres2 and zupave < zdownave THEN
ZSignal = 20
ENDIF
//
TIMEFRAME(15 minute)
wp=20
wcloseopen = 1
whighhigh = 1
wlowlow = 1
wcloseinrange = 1
wAverages = 1
wlines = 1
wa = (close > open)
wb = (high > high[1])
wc = (low > low[1])
wd = ((close-low)/(high-low) > 0.5)
we = (close < open)
wf = (high < high[1])
wg = (low < low[1])
wi = ((close-low)/(high-low) < 0.5)
wup = 0
wdown = 0
for wj = 0 to wp-1
if wcloseopen then
if wa[wj] then
wup = wup + (wp-wj)
endif
if we[wj] then
wdown = wdown + (wp-j)
endif
endif
if whighhigh then
if wb[wj] then
wup = wup + (wp-wj)
endif
if wf[wj] then
wdown = wdown + (wp-wj)
endif
endif
if wlowlow then
if wc[wj] then
wup = wup + (wp-wj)
endif
if wg[wj] then
wdown = wdown + (wp-wj)
endif
endif
if wcloseinrange then
if wd[wj] then
wup = wup + (wp-wj)
endif
if wi[wj] then
wdown = wdown + (wp-wj)
endif
endif
next
wupres = (wup - min(wup,wdown))
wdownres = (wdown - min(wup,wdown))
wupave = weightedaverage[wp/2](wupres)
wdownave = weightedaverage[wp/2](wdownres)
if waverages then
wupave = wupave
wdownave = wdownave
else
wupave = undefined
wdownave = undefined
endif
if wlines then
wupres2 = wupres
wdownres2 = wdownres
else
wupres2 = undefined
wdownres2 = undefined
endif
wSignal= 9
IF wupres2 > wdownres2 and wupave > wdownave THEN
wSignal = 1
ELSIF wupres2 < wdownres2 and wupave < wdownave THEN
wSignal = 2
ENDIF
//
TIMEFRAME(default)
Signal = XSignal + YSignal + ZSignal + WSignal
IF Signal = 9999 THEN
Signal = 0
ENDIF
SCREENER[Signal](Signal AS "1=↑,2=↓/D4H5")
Line 129 should read:
ydown = ydown + (yp-yj)
The same for lines 219 and 309 with a different letter prior to j.
AbzParticipant
Veteran
Thanks for observation , i found one in line 129 as well 🙂
AbzParticipant
Veteran
Yes i was a little bit fast there 🙂