miércoles, 6 de abril de 2016

ALGUNAS PEQUEÑAS JOYAS DE MI ARSENAL

De vez en cuando publico algunos códigos de los indicadores que desarrollo de apoyo a mis sistemas. Hoy dejo aquí un indicador que no es otra cosa que un stop dinámico basado en las velas heiken-ashi.

La idea es simple, si estoy en una tendencia alcista, cuando aparezca una vela heiken negra o bajista subir el stop a una distancia del precio en función del ATR. Si estoy en una tendencia bajista, cuando aparezca una vela heiken blanca o alcista, bajar el stop a una distancia del precio en función del ATR.

Si en cualquiera de los dos casos la tendencia vuelve a retomarse después de unas velas contrarias, se vuelve a basar el stop en la primera vela a favor de tendencia en función del ATR.

De esta forma conseguimos acompañar al precio con un stop dinámico.

Esto suena muy sencillo, pero para conseguirlo hay dos cosas que no lo son:

1. Como detecto los cambios en las velas heiken.
2. Como se en que tendencia estoy.

Para eso necesito desarrollar otros dos indicadores.

El primero es el de detección de las velas heiken "Cal_Heiken". Es uno de los que mas me gusta de los que he desarrollado. Pinta una barra verde si la vela heiken es alcista y una barra roja si es bajista. Además da unos avisos amarillos si las sombras de las velas heiken son mas grandes de lo normal y por tanto pueden estar avisando de que el impulso se acaba...es decir ni mas ni menos que un semáforo.

Este indicador tiene dos variables n y p, que si las dejamos con valor 1 nos dibuja las heiken clásicas, pero con valores superiores se pueden obtener velas heiken suavizadas que eliminen falsos cambios de tendencia...no suelo usarlo, pero ahí queda la posibilidad.

Para el segundo punto necesitamos un indicador de tendencia. Usad el que queráis. Yo uso varios, como curiosidad os dejo un indicador que mide las pendientes de subida y de bajada de los precios y las compara "Cal_Indicador_pendiente"...suele marca bien las tendencias...mas o menos.

Una vez cargados estos dos indicadores en vuestra base de datos, podemos utilizar el de stop, ya que "llama" a sus resultados.

El indicador "Cal_Stop_Heiken" dibuja dos stop indiscriminadamente uno para posiciones largas y otro para posiciones cortas, pero esa presentación no me gustaba y por eso decidí introducir un indicador de tendencia, para que en función de él me pintara uno u otro. El gráfico queda mas limpio. También tiene una variable m que hace que el stop no suba y baje perdiendo eficacia.

El resultado es este:

Las flechas rojas y verdes indican cambio de color de velas y como se mueve el stop.



Los códigos de PRT son:


//Cal_Heiken
//Marca las velas heiken segun su color. Tambien puedde suavizarse con la variable n y p. n=1 p=1 heiken clásico.
//@Calatravo_indicators
 

if barindex<=n then
AH=(open[1]+close[1])/2
CH=(open+High+low+close)/4
MaxH=MAX(MAX(high,AH),CH)
MinH=MIN(MIN(low,AH),CH)
AHsuav=AH
CHsuav=CH
Maxhsuav=MaxH
MinHsuav=MinH
else
AH=(average[n](AH[1])+average[n](CH[1]))/2
CH=(average[n](open)+average[n](High)+average[n](low)+average[n](close))/4
MaxH=MAX(average[n](MAX(average[n](high),average[n](AH))),average[n](CH))
MinH=MIN(average[20](MIN(average[20](low),average[n](AH))),average[n](CH))
AHsuav=average[p](AH)
CHsuav=average[p](CH)
Maxhsuav=average[p](MaxH)
MinHsuav=average[p](MinH)
endif

If AHsuav>CHsuav then
Ssup=MaxHsuav-AHsuav
Sinf=0
else
SSup=0
Sinf=MinHsuav-AHsuav
endif

if abs(Ssup)>abs(AHsuav-CHsuav) then
SS=12
else
SS=0
endif

if abs(Sinf)>abs(AHsuav-CHsuav) then
SI=-2
else
SI=0
endif
 
if CHsuav-AHsuav>0 then
Ind1=10
Ind2=0
elsif CHsuav-AHsuav<0 then
Ind1=0
Ind2=10
else
Ind1=0
Ind2=0
endif

 return SS as "Sombra_sup", SI as "Sombra_inf", Ind1 as "Largos", Ind2 as "Cortos", 0





//Cal_indicador _pendiente
//Compara los de las pendientes subida y bajada del precio
//@Calatravo_indicators


// pendiente de subida
PS= totalprice - lowest[n](totalprice)
 
// pendiente de bajada
PB = highest[n](totalprice)-totalprice

return average[m](PS-PB) as "Dif_pendiente", 0 as "cero"
 
 
 


//Cal_stop_heiken
//Stop dinámico en función de velas Heiken
ignored, ignored, myLargos, myCortos, ignored = CALL "Cal_Heiken"[n ,1]
If barindex<2 then
stopl=0
else
if myLargos[1]>0 and myLargos=0 then
stopl=totalprice-AverageTrueRange[14](close)*p
else
stopl=stopl[1]
endif
if myLargos[1]=0 and myLargos>0 then
stopl=totalprice-AverageTrueRange[14](close)*p
endif
endif
If barindex<2 then
stopc=0
else
if myCortos[1]>0 and myCortos=0 then
stopc=totalprice+AverageTrueRange[14](close)*p
else
stopc=stopc[1]
endif
if myCortos[1]=0 and myCortos>0 then
stopl=totalprice-AverageTrueRange[14](close)*p
endif
endif
indicator1, indicator3 = CALL "Cal_indicador_pendiente"[20 ,4]
if indicator1>indicator3 then
col=1
STP=highest[m](stopl)
else
col=-1
STP=lowest[m](stopc)
endif
return STP COLOURED BY col as "Stop"

 
 
Saludos,
 
Espero que os sean útiles.

10 comentarios:

  1. Muchas Gracias Carlos por compartir estas maravillas, y además agradecerte tu trabajo desinteresado, un saludo

    ResponderEliminar
  2. igualmente Carlos muchas gracias es un detalle compartir tus indicadores.

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. En primer lugar, darte las gracias por compartir tu trabajo con todos. En segundo lugar, quisiera que me aclarases por qué me da este error en el Cal stop heiken:
    Error en indicador: Cal stop heiken (1 1 5) Error de sintaxis: La función "Cal_indicador_pendiente" llamada desde "Cal stop heiken" no existe.
    Lo dicho, muchísimas gracias

    ResponderEliminar
  5. Creo que ya vi el problema. Es un problema del nombre. Desde Cal_stop_heiken se llama a "Cal_indicador_pendiente" y el titulo que le di al indicador en el blog es "Cal_Indicador _pendiente" (con I mayúscula), y claro el indicador que lo llama no lo encuentra. Ya lo he corregido en el blog para que funcione, pero si le cambias la I mayúscula por minúscula al nombre del indicador funcionara.
    Saludos.

    ResponderEliminar
    Respuestas
    1. Carlos, lo he modificado pero me sigue dando error:
      Error en indicador: Cal stop heiken (1 1 5)
      Error de sintaxis: La función "Cal_indicador_pendiente" llamada desde "Cal stop heiken" no existe.
      Te rogaría me indicases qué crees que está pasando.
      Saludos

      Eliminar
  6. Hola Buenas tardes,

    Primero de todo agradecerte el trabajo realizado.
    Tengo unas dudas con los parámetros, con el indicador_pendiente los parámetros de n=20 y m =4 son correctos?
    En el indicador Cal_stop_heiken, los parámetros son n01, P=1 y m=5?
    Muchas gracias de antemano

    ResponderEliminar
  7. Qué crack!!

    Muchas gracias por estos ingenios, ayuda para sentirnos un poco menos perdidillos...
    Me los agencio, y sigo a la espera de ese mapa de colores, que 'pinta' de maravilla

    ResponderEliminar