Here is a screener that allows you to identify positive and negative divergences of the MACD on a weekly or daily basis ;
The “signal” gives you the Time Frame and the nature of the divergence:
You can also tweek the code in order to combine both divergences at will;
Enjoy
// parameters
timeframe (weekly)
MinPrix = close >2.5
MinVolume = summation [10](average[23](volume)> 100000) =10
A=12
B=26
//C=9 //
//MACD
EMAshort1Week = exponentialaverage[A](close)
EMAshort2Week = exponentialaverage[A](EMAshort1Week)
DifferenceShortWeek = EMAshort1Week - EMAshort2Week
ZeroLagShortWeek = EMAshort1Week + DifferenceShortWeek
EMAlong1Week = exponentialaverage[B](close)
EMAlong2Week = exponentialaverage[B](EMAlong1Week)
DifferenceLongWeek = EMAlong1Week - EMAlong2Week
ZeroLagLongWeek = EMAlong1Week + DifferenceLongWeek
ZeroLagMACDWeek = ZeroLagShortWeek - ZeroLagLongWeek
//signal1Week=ExponentialAverage[C](ZEROLAGMACDWeek)
//signal2Week=ExponentialAverage[C](signal1Week)
//DIFFERENCE2Week=signal1Week-signal2Week
//
//SignalMACDWeek=signal1Week+DIFFERENCE2Week
//MyRsiweek = rsi[14](close)>55
/// Divergence MACD Week
V=ZeroLagMACDWeek
once RefCloseDownOldWeek=0
once RefMACDDownOldWeek=0
once RefCloseUpOldWeek=0
once RefMACDUpOldWeek=0
//once BarBullOld=0
//once BarBearOld=0
//Conditions to identify max and min
c1=v[4]>v[2] and v[3]>v[2] and v[1]>v[2] and v>v[2] // down
c2=v[4]<v[2] and v[3]<v[2] and v[1]<v[2] and v<v[2] // top
//finding the double bottom
if c1 then
RefCloseDownNewWeek=close[2]
RefMACDDownNewWeek=v[2]
//BarBullNew=barindex[2]
endif
if RefCloseDownNewWeek<RefCloseDownOldWeek and RefMACDDownNewWeek>RefMACDDownOldWeek then
//double slash next line if you don't needed the mark on a different window
bulldivWeek=1
signal = 2
else
bulldivWeek=0
endif
//Finding the double top
if c2 then
RefCloseUpNewWeek=close[2]
RefMACDUpNewWeek=v[2]
//BarBearNew=barindex[2]
endif
if RefCloseUpNewWeek>RefCloseUpOldWeek and RefMACDUPNewWeek<RefMACDUpOldWeek then
//double slash next line if you don't needed the mark on a different window
beardivWeek=1
signal = -2
else
beardivWeek=0
endif
//grafica
RefCloseDownOldWeek=RefCloseDownNewWeek
RefMACDDownOldWeek=RefMACDDownNewWeek
RefCloseUpOldWeek=RefCloseUpNewWeek
RefMACDUpOldWeek=RefMACDUpNewWeek
//BarBullOldWeek=BarBullNewWeek
//BarBearOldWeek=BarBearNewWeek
//
timeframe (daily)
D=12
E=26
//F=9
//REM MACD
EMAshort1Day = exponentialaverage[D](close)
EMAshort2Day = exponentialaverage[D](EMAshort1Day)
DifferenceShortDay = EMAshort1Day - EMAshort2Day
ZeroLagShortDay = EMAshort1Day + DifferenceShortDay
EMAlong1Day = exponentialaverage[E](close)
EMAlong2Day = exponentialaverage[E](EMAlong1Day)
DifferenceLongDay = EMAlong1Day - EMAlong2Day
ZeroLagLongDay = EMAlong1Day + DifferenceLongDay
ZeroLagMACDDay = ZeroLagShortDay - ZeroLagLongDay
//signal1Day=ExponentialAverage[F](ZEROLAGMACDDay)
//signal2Day=ExponentialAverage[F](signal1Day)
//DIFFERENCE2Day=signal1Day-signal2Day
//
//SignalMACDDay=signal1Day+DIFFERENCE2Day
/// Divergence MACD Day
W=ZeroLagMACDDay
once RefCloseDownOldDay=0
once RefMACDDownOldDay=0
once RefCloseUpOldDay=0
once RefMACDUpOldDay=0
//once BarBullOld=0
//once BarBearOld=0
//Conditions to identify max and min
d1=w[4]>w[2] and w[3]>w[2] and w[1]>w[2] and w>w[2] // down
d2=w[4]<w[2] and w[3]<w[2] and w[1]<w[2] and w<w[2] // top
//finding the double bottom
if d1 then
RefCloseDownNewDay=close[2]
RefMACDDownNewDay=w[2]
//BarBullNewDay=barindex[2]
endif
if RefCloseDownNewDay<RefCloseDownOldDay and RefMACDDownNewDay>RefMACDDownOldDay then
//double slash next line if you don't needed the mark on a different window
bulldivDay=1
signal = 1
else
bulldivDay=0
endif
//Finding the double top
if d2 then
RefCloseUpNewDay=close[2]
RefMACDUpNewDay=w[2]
//BarBearNew=barindex[2]
endif
if RefCloseUpNewDay>RefCloseUpOldDay and RefMACDUPNewDay<RefMACDUpOldDay then
//double slash next line if you don't needed the mark on a different window
beardivDay=1
signal = -1
else
beardivDay=0
endif
//grafica
RefCloseDownOldDay=RefCloseDownNewDay
RefMACDDownOldDay=RefMACDDownNewDay
RefCloseUpOldDay=RefCloseUpNewDay
RefMACDUpOldDay=RefMACDUpNewDay
//BarBullOld=BarBullNew
//BarBearOld=BarBearNew
////////////////////////////////////////////////
SCREENER [((beardivWeek or beardivDay or bulldivWeek or bulldivDay)) and MinPrix and MinVolume ](signal)