Indicadores consensuales.
 
 

Indicadores consensuales.

 
TradingSys (AndG) - 15 Abr 2012
1 comentario
 

tradingsysExisten decenas de medias e indicadores basados en medias que pueden utilizarse para desarrollar sistemas seguidores de tendencia. Sin embargo, desde una media simple hasta los sofisticados constructos  dotados de técnicas para filtrar el ruido y disminuir el retardo, siempre encontraremos el mismo inconveniente; será necesario optimizar un número variable de parámetros hasta encontrar los valores idóneos para un determinado time frame y mercado.

 

Los indicadores consensuales tratan de solventar este inconveniente evaluando de manera iterativa si una población "z" de medias con distinto número de barras satisfacen un criterio diana específico. Normalmente, un indicador de consenso oscila entre los valores de 0 (ninguna media satisface el criterio) y 100 (todas lo cumplen). 

En un constructo de este tipo,  los elementos clave son:

 

- Tipo de media: Podemos utilizar cualquier media (SMA, EMA, ZeroLag, TEMA, DEMA, S3, VIDYA...). Incluso determinados indicadores de momento y volatilidad basados en medias.

- Criterio diana: Desde lo más básico; contar el número de medias que están por encima del cierre de la última barra, hasta alternativas más complejas como comparar con otro tipo de media o con medias de distinto valor y time frame.

- Iteraciones: Número de medias del espacio muestral. Nos interesará saber el porcentaje de estas medias que satisfacen el criterio diana elegido.

- Valor de consenso: Umbral crítico para entrar al mercado o cerrar una posición.


En las siguientes líneas analizaremos algunos indicadores de consenso para construir lógicas de posicionamiento y filtros de volatilidad.


A)  
Indicador de confluencia de las medias móviles. MACS  (Lars Kestner).


Este indicador, descrito en el libro Estrategias de Trading Cuantitativo (Hispafinanzas, 2009, pág. 248) analiza los cruces de medias móviles de 1 a 20 barras y las compara con otro juego de medias correlativas cuatro veces mayor. Su fórmula, en Ninja Script, es:

                  

Ma = 0;

for (int x = 1+InitialPeriod; x < 21+InitialPeriod; x++)

{

if (EMA(x)[0]>EMA(4*x)[0])    

Ma = Ma+5;           

}

MAC.Set(Ma);

 

Donde:

"Ma" es el valor de consenso que oscila entre 0 y 100) y "x" el número de iteraciones.

Dado que el indicador de Kestner está diseñado para barras diarias,  me he permitido añadir el parámetro "InitialPeriod", para establecer el valor de la primera media. De otro modo, en gráficos intradiarios, el resultado sería bastante pobre.

La imagen inferior muestra el MACS aplicado al 6E en time frame de 10 min.

tradingsys


  

B)  TrendStrengthA. MTEA (José Cruset)

El indicador fue publicado en la revista Active Trader Magazine (agosto, 2005). La versión para NinjaTrader que aquí analizamos apareció en el foro de NT en marzo de 2008. El indicador evalúa si una secuencia variable de medias (pueden ser de varios tipos) con distinto periodo se sitúan por encima o por debajo del cierre de la última barra. Su valor oscila entre 100 y -100. Por encima de 0 tenemos una confluencia alcista y por debajo bajista. Siendo  los valores críticos de confirmación de tendencia  ±60.

Este indicador incorpora tres parámetros:

- "PeriodStart": Número de barras de la media más pequeña de la serie.

- "PeriodEnd": Número de barras de la media mayor.

- "Step": Intervalo entre medias consecutivas.

De este modo si los valores del indicador son 20, 200, 10. El número de medias a evaluar sería: (200-20) /10 = 18. Por tanto, el valor 0 se rebasa cuando más de 9 medias están por debajo del cierre de la última barra.

La fórmula del indicador es:

 

int aboveMaCount = 0;

int maCount = 0;

      for (int i = PeriodStart; i < PeriodEnd+1; i+=Step)

{

      maCount += 1;                     

             if (Input[0] > MA(MaType, i, 0))

      aboveMaCount += 1;

      else if (Input[0] < MA(MaType, i, 0))

      aboveMaCount -= 1;

}

TrendStrength.Set(((double)aboveMaCount / maCount) * 100);

 

En la imagen inferior mostramos el indicador junto con la situación de confluencia sobre el gráfico de precios:

 

tradingsys

 

C)     Indicador Consensual de Tendencia. MACT.

Una variante de los dos anteriores indicadores que me gusta por su sencillez y capacidad de filtrado en algunos mercados es el MACT. Nuestro indicador utiliza como determinador de confluencia una serie de 20 medias exponenciales secuenciadas entre un valor mínimo de 10 barras y un máximo determinado por el usuario. Como elemento de comparación y filtro empleamos otra EMA ajustable entre 1 y 10 barras. En definitiva, tenemos dos parámetros:

- "FinalPeriod" : EMA de mayor longitud a evaluar.

- "Filter": Valor (1-10 barras) de la EMA empleada como comparador.

La fórmula resultante es:

 

Ma = 0;

int step = finalPeriod/20;

     for (int x = 10; x < finalPeriod+1; x+=step)     

      {

      if (EMA(x)[0]<EMA(filter)[0])                      

      {

      Ma = Ma+5;

} }

MAC.Set(Ma);

 

Al igual que el MACS de Kestner, nuestro indicador oscila entre 0 y 100, siendo los valores de referencia para la consolidación de tendencias alcistas 80, y para las bajistas 20.

Este es el aspecto del indicador:

tradingsys

 

Los indicadores consensuales no tienen por qué limitarse a comparar medias y niveles de precios. De hecho, podemos construir filtros de consenso partiendo de indicadores como el ADX, Estocástico, MACD, QTick o sus variantes normalizadas. En estos casos el elemento comparador puede ser un valor fijo, el valor de la pendiente, el valor del mismo indicador "n" barras atrás, etc. Las posibilidades son virtualmente infinitas.

Seguidamente analizaremos la estructura y ámbito de aplicación de un filtro de volatilidad basado en el popular indicador ADX.

 

D)   Confluencia de la pendiente del ADX . CPADX.

El objetivo de este indicador es comprobar la presencia de zonas de baja volatilidad tomando como base la fórmula:

 

Slope(ADX(Period),Nbarras,0)<0

 

El comando Slope de NT7 calcula la pendiente de una curva en un número específico de barras.  Por tanto, con el método de confluencia buscaremos en un conjunto de 20 estimaciones del ADX con distinto período el consenso de la pendiente negativa.

El código para NT es:

 

nA = 0;

Ma = 0;

int step = finalPeriod/20;

for (int x = 10; x < finalPeriod+1; x+=step)            

      {

       if (Slope(ADX(x),filter,0)<0)

            {

                  Ma = Ma+1;

            }

                  nA = nA+1;  

            }             

 CSaxd = (((double)Ma/nA)*100);

MCADX.Set(CSaxd);           

      if (CSaxd<80)

            {

                  BackColor=Color.Salmon;

            }

      else

            {

                  BackColor=Color.Aquamarine;

            }

 

En este caso los dos parámetros a considerar son:

- "FinalPeriod": Número de barras del ADX mayor.

- "Filter": Cálculo de la pendiente "n" barras atrás.

En el indicador de la imagen inferior aparecen coloreadas en rojo las zonas en las que no se permiten compras por exceso de volatilidad (lectura del indicador inferior a 80):

 

tradingsys

 

Probamos la eficacia del filtro en un sistema simple, de tipo intradiario, con cierre en fin de sesión, basado en un cruce de medias. El código del sistema es:

 

if (CPADX(filter,FinalPeriod)[0]>80)                 

{    

      if (CrossAbove(SMA(Fast), SMA(Slow), 1))                

                   EnterLong();

      else if (CrossBelow(SMA(Fast), SMA(Slow), 1))

                  EnterShort();

}

 

Como nuestro propósito no es hacer un estudio en profundidad sobre el sistema sino analizar el potencial de un filtro, procedemos a realizar una evaluación informal del constructo siguiendo estos pasos:

1.- Elegimos 6 activos muy diferentes: Petroleo (CL), Oro (YG), renta fija (FGBL), índices (FDAX y EMD) y divisas (6E).

2.- Seleccionamos un time frame de 10 min y un histórico largo (2001-2011).

3.- Realizamos una optimización gruesa del sistema de medias en cada activo sin aplicar filtros y tomando como ratio diana el SQN (System Quality Number).

4.- Anotamos las combinaciones paramétricas de máximo rendimiento y las estadísticas correspondientes.

5.- Conservando los valores de las medias, aplicamos el filtro y realizamos igualmente una optimización gruesa de sus dos parámetros.

6.- Comparamos los resultados.

 

tradingsys

 

tradingsys

 

Como podemos apreciar en esta tabla, la aplicación del filtro consensual consigue una mejora apreciable de casi todos los ratios en los seis activos analizados:

 

tradingsys

 

El filtro cumple claramente su cometido con el SQN, profit factor y Sharpe Ratio. En algunos mercados reduce considerablemente el número de operaciones. Pero, en general, y a tenor de los resultados obtenidos, podemos decir que pasa la prueba.

Así mismo, observamos que los indicadores de consenso son menos sensibles a los cambios de marcoépoca, al no depender las medias de unos valores específicos calculados por optimización, sino de un rango muy amplio de valores que fluctúa entre un máximo y un mínimo, y del que solo se optimizan los extremos.  

Por último, queremos constatar que tenemos algunas dudas sobre la utilización de los métodos de confluencia de medias, a palo seco, como mecanismo de entrada. Al comparar su rendimiento con otras lógicas habituales del trading intradiario no obtenemos resultados concluyentes. Sin embargo, como elemento de filtrado, consideramos que tienen mayor potencial.

 

Andrés A. García.

TradingSys.org, 2012.

 

 

 

 

Comentarios

 

eab - Espectacular trabajo

Hola Andrés. 
Te cuento que sigo tu página hace un tiempo - de hecho gracias a tí contacté a Hispafinanzas y adquirí "nuevos sistemas y métodos de trading" de Kaufman - un libro muy bueno.  
 
Te cuento que si bien, cuento con conocimiento de Trading, nunca lo pude plasmar y juntar en un sistema.  
Es lo que pretendo hacer actualmente, por lo cual tu página resulta de extremada utilidad.  
 
Te mando un cordial saludo desde Argentina y seguiré investigando los artículos !!

Añadir comentario

 
Modificado por TradingSys (AndG) - 16 Abr 2012
 
 

* Campos obligatorios

 
 

 
 

Secciones

 
 
 

Entradas recientes

 
 

Enlaces