Laboratorio de trading II: Transformar indicadores técnicos

laboratorio de trading

Los indicadores técnicos transforman los datos de precio o volumen para ayudarnos a separar las señales de trading del ruido del mercado.

Dentro de los indicadores técnicos podemos encontrarnos con distintas formas: de rango limitado tipo osciladores, no limitados como las medias móviles, binarios, etc.

Lo que vamos a ver hoy es cómo podemos transformar indicadores técnicos para aumentar la exactitud de sus señales.

Vamos a ello:

Laboratorio de indicadores técnicos (II parte)

Sigo jugando con el Indicador de agotamiento de tendencia, de momento lo he bautizado como Time-Out (algo como cuando el precio pide tomarse un descanso).

Hasta ahora ( ver artículo anterior),  habíamos podido comprobar que este nuevo indicador marcaba los extremos de precios mejor que el DI de Kestner.

En un primer momento pensaba que se podrían utilizar niveles fijos para señalizar los puntos donde el precio se tomaría un descanso.

El problema me lo he encontrado aquí: ¿Qué tan significativo es un nivel significativo?

Mira las siguientes imágenes:

indicador técnico no acotado
Chart de ProRealtime: Los picos marcan los precios extremos. Los niveles van de 0.015 a 0.1
chart ProRealTime indicador extremos precios - SMI
Los picos marcan los precios extremos pero los niveles no son equivalentes al gráfico anterior. Los picos nunca llegan más allá de 0.05

Según el tipo de gráfico los niveles son distintos. En ambos casos el indicador marca picos cuando el precio busca un descanso, pero como el momentum y la volatilidad histórica de cada activo son distintos me encuentro con que estos picos se dan a niveles diferentes.

¿Cómo estandarizar los niveles del indicador para poder comparar distintos períodos y activos? ¿Tienes alguna idea?

Transformar indicadores técnicos

En este caso lo que busco centrar y reducir los extremos para poder comparar más fácilmente las variaciones.

¿Cómo? en este experimento lo voy a probar haciendo un re-escalado. Pero tranquilos que la idea no se me ha ocurrido a mí, me la he copiado de Mean Reversion Trading Systems ( libro cuya reseña puedes leer en esta entrada del blog).

Hacer un «reescalado» es básicamente reducir la extensión del indicador pero manteniendo las proporciones entre los puntos.

Fórmula transformación en oscilador

Buscamos trasformar un indicador en un oscilador que fluctúe dentro de un rango. Podremos entonces comparar más fácilmente las variaciones.

En el libro utilizan esta fórmula:

formula oscilador

Indicador versión acotada

¿Cómo queda la nueva versión transformada en un oscilador?

indicadores versus osciladores
Transformar indicadores técnicos = Comparativa indicador sin acotar / indicador acotado de 0 a 100

El oscilador( en azul debajo)  toca el extremo superior del rango mostrando cuando los precios han alcanzado un punto extremo tanto al alza como a la baja.

El beneficio que veo en esta transformación está en que puedo localizar mejor los extremos de precios. Antes no podría saber qué tan representativo era cada pico y ahora cada vez que el oscilador pasa sobre un nivel ( en este caso 80) sé que debo prestar atención porque el precio está llegando a un punto extremo.

Barras de alerta

Dado que de momento sólo me interesa cuando el oscilador marca picos en la parte superior, quizás sea buena idea eliminar del chart aquellos trazos que no son significativos. Si sólo tengo que vigilar cuándo el indicador Time-Out pasa por encima de cierto nivel, pienso que es mejor configurarlo como barras de alertas.

Al estilo luz roja = prestar atención que el precio ha llegado a un extremo temporal.

En este caso en Amibroker quedaría así:

Transformar indicadores técnicos
Transformar indicadores técnicos = las barras rojas se pintan sólo cuando el indicador Time-Out pasa del nivel 90

Para transformar el indicador he dejado de lado ProRealTime y me he mudado a Amibroker. Si algún alma caritativa quiere traducir la versión para ProRealTime dejo el código AFL en este link: TimeOut.


¿Qué te parece la versión transformada a oscilador?
Yo creo que es mucho más manejable y con más posibilidades que la versión anterior. Si quieres añadir alguna idea para mejorarlo, será estupendo que dejes un comentario.

9 comentarios en «Laboratorio de trading II: Transformar indicadores técnicos»

  1. Sensacional entrada Duk2 una vez más,

    Me he tomado la libertad de escribir el código para ProRealTime, tal y como lo interpreto del tuyo original. Si alguien cree, que no es correcto o tiene otra interpretación, que no dude en corregirme. Estamos para aportar.

    **************************************************************
    // Indicador Time-Out (Duk2) //
    // Idea original para Amibroker: estrategiastrading.com //
    // Traducido a ProRealTime: tradingtendencial.blogspot.com //
    // Añadir variables como parámetros optimizables PC y PL con valores 10 y 40 respectivamente//

    Retorno = Log(close/close[1])
    HV = Std[PL](Retorno) * SQRT(252)

    LogROCC = log(close/close[PC])
    LogROCL = log(close/close[PL])
    DITuning = ((LogROCC * LogROCL) / HV) + 1

    InputMin = lowest[PL](DITuning)
    InputMax = highest[PL](DITuning)

    TimeOut = (DITuning – InputMin) * 100 / (InputMax – InputMin)

    Return TimeOut as «Time-Out (Duk2)»

    ************************************************************

    Un saludo.

    Responder
    • Hola FJO y muchas gracias por tu trabajo con el traspaso a ProRealtime.

      La verdad es que como había dado con la solución del reescalado de Bandy para Amibroker, estaba buscando como hacer la funcion que él utiliza en su código y se me complicaba traspasarlo.

      Un saludo,

      Responder
  2. He descubierto tu blog hace poco y me parece muy interesante, con un enfoque practico muy apropiado.

    En concreto estos dos articulos sobre el indicador de agotamiento de tendencia me ha llamado la atención. Como tambien me gusta probar lo que leo y por suerte has compartido el codigo del indicador me decidí a probarlo en Zorro Trader, plataforma que suelo usar para hacer analisis y probar estrategias.

    Tras algunas pruebas no tengo muy claro la efectividad del indicador, y sobre todo como utilizarlo en una estrategia atomatizada. Estoy probando a cambiar el reescalado que propones, por una normalización mediante una transformación de Fisher, a ver si aporta algo. Seguire dandole algunas vueltas pues me gusta el enfoque que le has dado.

    Por si es de utilidad para alguien mas, ya que está hecho el trabajo, dejo el codigo del indicador en Lite C, lenguaje que usa Zorro Trader.

    Gracias por compartir tu trabajo, y enhorabuena por tu blog. Tienes en mi un entusiasta seguidor.

    // Laboratorio de trading de Duk2 de estrategiastrading.com//
    //Indicador Time-Out//

    //parametros//
    int PeriodoCorto=10;
    int PeriodoLargo=40;
    int Umbral = 80;

    function run()
    {
    vars Cruce = series();
    set(PLOTNOW);
    vars Cierre= series (priceClose());

    // Volatilidad Histórica
    vars Retorno = series(log(Cierre[0]/Cierre[1]));
    vars HV = series(StdDev(Retorno,PeriodoLargo) * sqrt(252));

    // Indicador
    vars LogROCC = series(log(Cierre[0]/Cierre[PeriodoCorto]));
    vars LogROCL = series(log(Cierre[0]/Cierre[PeriodoLargo]));
    vars DITuning = series(((LogROCC[0] * LogROCL[0]) / HV[0]) + 1);

    //re-escalado//
    vars InputMin = series(MinVal(DITuning,PeriodoLargo));
    vars InputMax = series(MaxVal(DITuning,PeriodoLargo));
    vars TimeOut = series((DITuning[0] – InputMin[0]) * 100 / (InputMax[0] – InputMin[0]));

    Cruce[0] = 0;
    if (TimeOut[0]>=Umbral)
    Cruce[0] = 1;

    plot («TimeOut»,DITuning,NEW,RED);
    plot («TimeOut Reescalado»,TimeOut,NEW,BLUE);
    plot («Cruza Umbral»,Cruce,NEW+BARS, BLACK);
    }

    Responder
    • Hola Paduel Gerión,
      Me alegra que te guste el blog y gracias por compartir el código para Zorro.
      Los dos post del indicador son del «laboratorio» es decir que sólo estoy compartiendo mis pruebas y ensayos. A mi también me gusta probar lo que leo y de allí surgieron todas estas pruebas. El original lo había visto en el libro Quantitative Trading Strategies, y de momento estoy examinando si puede ser efectivo para señalizar cuando cerrar los trades. Pero estoy en pruebas, así que no hay nada definitivo o concluyente.
      Si lo tienes, por favor cuéntame qué tal el cambio de reescalado que comentas.
      Un saludo,
      Duk2

      Responder
      • Hola,

        Yo lo he estado probando en un sistema de reversión a la media para el SP500 siguiendo la filosofía de los sistemas de Larry Connors y Cesar Alvarez en el sentido de «cuando el indicador marque un posible agotamiento de un pullback en contra de la tendencia dominante, entrar a favor de la tendencia dominante y salir rápido». La verdad es que tanto el porcentaje de aciertos en los backtests como el PF es bastante bueno. De momento lo tengo en la nevera para ver cómo se desenvuelve en paper trading.

        Responder
        • Hola.

          Me parece un planteamiento muy interesante FJO. ¿Qué indicadores usas para identificar la tendencia dominante y el pullback? ¿Medias en distintos TF quizás? ¿Para que TimeFrames has probado?

          Un saludo.

          Responder

Deja un comentario

ESTRATEGIAS DE TRADING