Sorry, I’ve been quite busy lately.
There you go (this will plot the last 3 signals in total):
//PRC_QMP Filter | indicator
//29.09.2016
//Nicolas @ www.prorealcode.com
//Sharing ProRealTime knowledge
DEFPARAM DrawOnLastBarOnly = true
//
ONCE MaxSignals = 3
IF BarIndex = 0 THEN
FOR i = 1 TO MaxSignals
$Signal[i] = 0
$myBar[i] = 0
$Price[i] = 0
NEXT
ENDIF
//
//--- parameters
short = 12
long = 26
signal = 9
RSIPeriod = 8
SF = 1
QQE = 3
//---
// --- MACD ZeroLag
EMAshort1 = exponentialaverage[short](close)
EMAshort2 = exponentialaverage[short](EMAshort1)
DifferenceShort = EMAshort1 - EMAshort2
ZeroLagShort = EMAshort1 + DifferenceShort
EMAlong1 = exponentialaverage[long](close)
EMAlong2 = exponentialaverage[long](EMAlong1)
DifferenceLong = EMAlong1 - EMAlong2
ZeroLagLong = EMAlong1 + DifferenceLong
ZeroLagMACD = ZeroLagShort - ZeroLagLong
signal1=ExponentialAverage[signal](ZEROLAGMACD)
signal2=ExponentialAverage[signal](signal1)
DIFFERENCE2=signal1-signal2
SignalMACD=signal1+DIFFERENCE2
// --- QQE
WildersPeriod = RSIPeriod * 2 - 1
if barindex>WildersPeriod then
MyRsi = rsi[RSIPeriod](close)
RsiMa = exponentialaverage[SF](MyRsi)
AtrRsi = abs(RsiMa[1] - RsiMa)
MaAtrRsi = exponentialaverage[WildersPeriod](AtrRsi)
dar = exponentialaverage[WildersPeriod](MaAtrRsi) * QQE
trr=TrLevelSlow[1]
dv = trr
if RsiMA[0]<trr then
trr = RsiMA[0] + dar
if(RsiMA[1]<dv) then
if(trr>dv) then
trr=dv
endif
endif
elsif RsiMA[0]>trr then
trr = RsiMA[0] - dar
if(RsiMA[1]>dv) then
if(trr<dv) then
trr=dv
endif
endif
endif
TrLevelSlow=trr
endif
// --- signals
atr=averagetruerange[100]
if zerolagMACD>=signalMACD and RsiMA>=trr and lasttrend<>1 then
FOR i = MaxSignals DOWNTO 2
j = i - 1
$Signal[i] = $Signal[j]
$myBar[i] = $myBar[j]
$Price[i] = $Price[j]
NEXT
lasttrend=1
r1=0
g1=255
b1=0
lowbar = barindex
lowprice = low-atr/2
ilow = low-atr/2
$Signal[1] = -1
$myBar[1] = lowbar
$Price[1] = lowprice
elsif zerolagMACD<signalMACD and RsiMA<trr and lasttrend<>-1 then
FOR i = MaxSignals DOWNTO 2
j = i - 1
$Signal[i] = $Signal[j]
$myBar[i] = $myBar[j]
$Price[i] = $Price[j]
NEXT
lasttrend=-1
r0=255
g0=0
b0=0
highbar = barindex
highprice = high+atr/2
ihigh = high+atr/2
$Signal[1] = 1
$myBar[1] = highbar
$Price[1] = highprice
endif
FOR i = 1 TO MaxSignals
x = $myBar[i]
y = $Price[i]
IF $Signal[i] = - 1 THEN
drawtext("●",x,y,Dialog,Bold,12) coloured(r1,g1,b1)
ELSIF $Signal[i] = 1 THEN
drawtext("●",x,y,Dialog,Bold,12) coloured(r0,g0,b0)
ENDIF
NEXT
return ilow,ihigh
There you go (this will plot the last 6 signal, 3 each type)):
//PRC_QMP Filter | indicator
//29.09.2016
//Nicolas @ www.prorealcode.com
//Sharing ProRealTime knowledge
DEFPARAM DrawOnLastBarOnly = true
//
ONCE MaxSignals = 3
IF BarIndex = 0 THEN
FOR i = 1 TO MaxSignals
$Lsignal[i] = 0
$LmyBar[i] = 0
$Lprice[i] = 0
//
$Ssignal[i] = 0
$SmyBar[i] = 0
$Sprice[i] = 0
NEXT
ENDIF
//
//--- parameters
short = 12
long = 26
signal = 9
RSIPeriod = 8
SF = 1
QQE = 3
//---
// --- MACD ZeroLag
EMAshort1 = exponentialaverage[short](close)
EMAshort2 = exponentialaverage[short](EMAshort1)
DifferenceShort = EMAshort1 - EMAshort2
ZeroLagShort = EMAshort1 + DifferenceShort
EMAlong1 = exponentialaverage[long](close)
EMAlong2 = exponentialaverage[long](EMAlong1)
DifferenceLong = EMAlong1 - EMAlong2
ZeroLagLong = EMAlong1 + DifferenceLong
ZeroLagMACD = ZeroLagShort - ZeroLagLong
signal1=ExponentialAverage[signal](ZEROLAGMACD)
signal2=ExponentialAverage[signal](signal1)
DIFFERENCE2=signal1-signal2
SignalMACD=signal1+DIFFERENCE2
// --- QQE
WildersPeriod = RSIPeriod * 2 - 1
if barindex>WildersPeriod then
MyRsi = rsi[RSIPeriod](close)
RsiMa = exponentialaverage[SF](MyRsi)
AtrRsi = abs(RsiMa[1] - RsiMa)
MaAtrRsi = exponentialaverage[WildersPeriod](AtrRsi)
dar = exponentialaverage[WildersPeriod](MaAtrRsi) * QQE
trr=TrLevelSlow[1]
dv = trr
if RsiMA[0]<trr then
trr = RsiMA[0] + dar
if(RsiMA[1]<dv) then
if(trr>dv) then
trr=dv
endif
endif
elsif RsiMA[0]>trr then
trr = RsiMA[0] - dar
if(RsiMA[1]>dv) then
if(trr<dv) then
trr=dv
endif
endif
endif
TrLevelSlow=trr
endif
// --- signals
atr=averagetruerange[100]
if zerolagMACD>=signalMACD and RsiMA>=trr and lasttrend<>1 then
FOR i = MaxSignals DOWNTO 2
j = i - 1
$Ssignal[i] = $Ssignal[j]
$SmyBar[i] = $SmyBar[j]
$Sprice[i] = $Sprice[j]
NEXT
lasttrend=1
r1=0
g1=255
b1=0
lowbar = barindex
lowprice = low-atr/2
ilow = low-atr/2
$Ssignal[1] = -1
$SmyBar[1] = lowbar
$Sprice[1] = lowprice
elsif zerolagMACD<signalMACD and RsiMA<trr and lasttrend<>-1 then
FOR i = MaxSignals DOWNTO 2
j = i - 1
$Lsignal[i] = $Lsignal[j]
$LmyBar[i] = $LmyBar[j]
$Lprice[i] = $Lprice[j]
NEXT
lasttrend=-1
r0=255
g0=0
b0=0
highbar = barindex
highprice = high+atr/2
ihigh = high+atr/2
$Lsignal[1] = 1
$LmyBar[1] = highbar
$Lprice[1] = highprice
endif
FOR i = 1 TO MaxSignals
x = $SmyBar[i]
y = $Sprice[i]
IF $Ssignal[i] = - 1 THEN
drawtext("●",x,y,Dialog,Bold,12) coloured(r1,g1,b1)
ENDIF
//
x = $LmyBar[i]
y = $Lprice[i]
IF $Lsignal[i] = 1 THEN
drawtext("●",x,y,Dialog,Bold,12) coloured(r0,g0,b0)
ENDIF
NEXT
return ilow,ihigh
You can increase or decrease MaxSignals to best suit your needs.