Buenas tardes,
Después de varios intentos fallidos, me encuentro totalmente bloqueado y tal vez la solución sea muy fácil.
Siempre intento buscarme la vida y dar con las soluciones, pero en esta ocasión me rindo.
Pretendo realizar un indicador (Trailling Stop basado en el ATR), pero que se represente en puntos (similar a los fractales de Williams) de tal manera que veamos el indicador como escalones ( sin que se produzcan retrocesos) y se tenga en cuenta siempre el último valor alcanzado, de manera que cuando el precio (el indicador ira en el gráfico de precios) toque dicha línea de puntos nos lo indique mediante una flecha.
A modo de ejemplo y para que sea representativo, he realizado el mismo, implementando un simple cruce de medias para que se entienda.
Cuando se cruzan al alza dichas medias, nos lo señalara mediante una flecha (verde) y el indicador aparecerá en el gráfico mediante puntos (azules), en el momento en que el precio sea menor a ese indicador, nos lo señalará mediante una flecha (roja) en sentido opuesto y el indicador ya no aparecerá en el gráfico.
Todo esto lo he conseguido, pero solamente cuando el cruce se produce al alza, sin embargo cuando es a la baja ( media corta cruza hacia abajo a la media larga), nos aparece la flecha(azul) , pero el indicador no aparece y también aparece en la misma vela la flecha(roja) opuesta.
Lo curioso es que ayer, después de estar todo el día intentando dar con este indicador, me funcionaba correctamente y hoy por la mañana el indicador ya no funcionaba.
Adjunto el archivo itf, el código y un gráfico en el cual figuran las explicaciones.
Gracias por anticipado
// A modo de ejemplo un simple Sistema de cruce de dos EMA y ATR como Trailing Stop.
//El ATR se representará como puntos (similar a fractales), cuando el precio cruce el Trailing Stop, se cierra la representación mediante una flecha en sentido opuesto a la inicial del cruce de las medias.
//El ATR y flechas solo se dibujan cuando el cruce se ha producido y el precio aún no ha tocado el Trailing basado en el ATR
Offset = 4 * pipsize
//Indicadores
med6 = exponentialaverage[6](close)
med70 = exponentialaverage[70](close)
atr20 = averagetruerange[20](close)
contador = 0
contador1 = 0
//Condiciones de inicio de señales
c1 = med6 crosses over med70
c2 = med6 crosses under med70
setupinl = c1
setupinc = c2
//El ATR y flechas solo se dibujan mientras se dan las condiciones
if setupinl then
drawarrowup(barindex,LOW - offset) coloured (0,255,0)//flecha verde
dentro = 1//indico que estoy dentro del cruce y por tanto hay que representar el Trailing del ATR mediante puntos(1)
dentro1 = 0
elsif setupinc then
drawarrowdown(barindex,high+ offset) coloured (0,0,253)//flecha azul
dentro1 = 1//igual que(1) pero en sentido opuesto
dentro = 0
endif
if dentro then
contador = 1 + contador[1]//contador nos va contando las velas y acumulando su valor
trailstopl = highest[contador](close-2.5*atr20)//el trailstop asumira el mayor valor de las velas contadas( es decir el último valor)
endif
if dentro1 then
contador1 = 1 + contador1[1]
trailstopc = lowest[contador1](close+2.5*atr20)
endif
//Condiciones de salida
s1 = close < trailstopl[1]// precio toca el trailstop
s2 = close > trailstopc[1]
setupoutl = s1
setupoutc = s2
//El ATR termina de dibujarse con una flecha en sentido opuesto cuando se sale de las condiciones por tocar el trailinstop
if setupoutl and dentro then// se inicializan las variables y se deja de representar el trailstop y se dibuja la flecha en sentido opuesto al cruce
stoploss = 0
trailstopl = 0
dentro = 0
drawarrowdown(barindex,high+offset)coloured(255,0,0)
endif
if setupoutc and dentro1 then
stoploss1 = 0
trailstopc = 0
dentro1 = 0
drawarrowup(barindex,low-offset)coloured(210,0,0)
endif
//////////////////////////////////
//Presentacion
return med6 as "media6", med70 as"media70", trailstopl as"stoplargo",trailstopc as "stopcorto"