Aquí os dejo el MACD, incluyendo otros dos indicadores: el Elder Impulse System y el Zero Lag (divergencias del MACD publicado en http://www.prorealcode.com/prorealtime-indicators/macd-divergences-from-price/). Es realmente un 3 en 1. Lo único que yo he hecho es unificar los 3 indicadores en uno solo, para tener toda la información a mano.
Si queréis más información sobre estrategias con este indicador, me podéis contactar.
Las salidas elderimpulsebuy, elderimpulsesell y elderimpulsechange hay que ponerlas en histograma. Las 3 primeras ya vienen coloreadas, y las bullishmacddivergence y bearishmacddivergence se ponen en línea para que no se sobrepongan al histograma del MACD. Pueden colorearse con unas nuevas zonas de color.
/////////////////MACD IMPULSE ELDER////
// variables
// pc, fast ma, 12
// pl, slow ma, 26
// ps, signal, 9
// p, exp ma EIS, 18
// set first three as histograms
pc=12
pl=26
ps=9
p=13//periodos EIS
aa=exponentialaverage[p](close)
cc=MACD[pc,pl,ps](close)
if aa > aa[1] and cc>cc[1] Then
dd =cc*2
else
dd=0
endif
if aa<aa[1] and cc < cc[1] then
ee=cc*2
else
ee=0
endif
if ( aa <aa[1] and cc > cc[1]) or (aa>aa[1] and cc<cc[1]) then
ff=cc*2
else
ff=0
endif
REM MACD
hh=exponentialaverage[pc](close) - exponentialaverage[pl](close)
REM Signal
hh1=exponentialaverage[ps](hh)
// DIVERGENCES ZeroLag MACD adapted from HK-LISSE RSI divergences code
EMAshort1 = exponentialaverage[pc](close)
EMAshort2 = exponentialaverage[pc](EMAshort1)
DifferenceShort = EMAshort1 - EMAshort2
ZeroLagShort = EMAshort1 + DifferenceShort
EMAlong1 = exponentialaverage[pl](close)
EMAlong2 = exponentialaverage[pl](EMAlong1)
DifferenceLong = EMAlong1 - EMAlong2
ZeroLagLong = EMAlong1 + DifferenceLong
ZeroLagMACD = ZeroLagShort - ZeroLagLong
signal1=ExponentialAverage[ps](ZEROLAGMACD)
signal2=ExponentialAverage[ps](signal1)
DIFFERENCE2=signal1-signal2
SignalMACD=signal1+DIFFERENCE2
x = ZeroLagMACD
y = SignalMACD
// BEARISH DIVERGENCES MACD
hi=max(hi,x)
hico=max(hico,max(high,high[1]))
if x crosses under y then
sto2b=sto1b
sto1b=hi
hi=0
p3b=p1b
p2b=max(p1b,hico1)
p1b=max(highest[3](high),hico)
if p2b=p1b then
p2b=max(p3b,p4b)
endif
hico=0
hico1=0
endif
if x<y then
p4b=hico1
hico1=max(hico1,high)
endif
if p1b>p2b and sto1b<sto2b and x crosses under y and x<x[1] then
signB= -2
else
signB= 0
endif
// BULLISH MACD DIVERGENCES
lo=min(lo,x)
lowco=min(lowco,min(low,low[1]))
if x CROSSES OVER y then
sto2h=sto1h
sto1h=lo
lo=100
p3h=p1h
p2h=min(p1h,lowco1)
p1h=min(lowest[3](low),lowco)
if p2h=p1h then
p2h=min(p3h,p4h)
endif
lowco=100000
lowco1=100000
endif
if x>y then
p4h=lowco1
lowco1=min(lowco1,low)
endif
if p1h<p2h and sto1h > sto2h and x crosses over y and x>x[1] then
signH= 2
else
signH= 0
endif
return dd COLOURED(0,255,0) as "elder impulsebuy", ee COLOURED(255,0,0) as "elder impulsesell", ff coloured(0,0,255) as "elder impulsechange", hh as "macd", hh1 as "signal macd", signH as "Bullish MACD Divergence", signB as "Bearish MACD Divergence" , 0 as " zero "