Descargar MetaTrader 5

Dibujando niveles de ruptura horizontales utilizando fractales

12 noviembre 2015, 08:25
Victor Chebotariov
1
211

Fractales

Los fractales son uno de los cinco indicadores de la estrategia comercial de Bill Williams que permite encontrar un techo o un suelo en el mercado. Un fractal alcista es una serie de, por lo menos, cinco barras consecutivas, con dos barras con máximos inferiores situados directamente antes del máximo superior, y a continuación del mismo. La configuración opuesta (esto es, una serie de cinco barras con dos barras con mínimos superiores situados directamente antes del mínimo inferior, y después del mismo) se corresponde con un fractal bajista. Los fractales tienen los valores Alto y Bajo, y en este gráfico aparecen marcados con flechas.

Si analizamos el gráfico detenidamente, observaremos que cruzar el nivel del fractal normalmente significa continuar con el movimiento en la dirección del fractal. En un mercado alcista, este tipo de cruce sirve para mantener una posición larga; el nivel bajo del fractal es el nivel de soporte, de modo que sobrepasarlo será una señal de cierre de dicha posición larga. En las tendencias bajistas funciona igual, pero a la inversa. En un mercado plano esta estrategia no tiene ningún resultado.



Indicador de niveles fractales

Para determinar más fácilmente el nivel del último fractal alcista o bajista, podemos escribir un indicador sencillo que dibuje estos niveles con líneas horizontales. Crearemos el cuerpo principal del indicador con el "Asistente para MQL4/MQL5". Para ello tenemos que ejecutar la secuencia de comandos "Archivo -> Nuevo" o presionar el botón de la barra de herramientas. La pantalla mostrará el "Asistente para MQL4/MQL5".

  • En el primer paso hay que elegir "Indicador personalizado".
  • En el segundo paso se tiene que especificar el nombre, autor, enlace y parámetros; en esta ocasión, como vamos a utilizar el indicador Fractals, nosotros no utilizaremos ningún parámetro ajustable, de modo que solo especificaremos el nombre, el autor y el enlace.
  • En el tercer paso el asistente nos pide que especifiquemos los parámetros de visualización del indicador personalizado. Nuestro indicador se mostrará en el gráfico principal; así que no marcaremos el campo "Indicador en la ventana separada". Debemos determinar los índices. Necesitaremos dos índices: uno para el nivel del fractal superior y el otro para el nivel del fractal inferior. Ambos índices serán de tipo "Line". Elegimos el color azul para el primer índice y el rojo para el segundo, y a continuación pulsamos el botón "Finalizar".

Entonces la creación del cuerpo del programa habrá terminado, y tiene que ser como sigue:


//+------------------------------------------------------------------+
//|                                                 FractalsLine.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- búferes
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Función de inicialización del indicador personalizado            |
//+------------------------------------------------------------------+
int init()
  {
//---- indicadores
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Función de desinicialización del indicador personalizado         |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizado                 |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----

   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Solo falta añadir una pequeña pieza de código para que nuestro indicador esté listo.

Necesitamos:
1. El siguiente ciclo para calcular el valor del indicador en las barras del gráfico actual:

int i=Bars-counted_bars-1;
 
while(i>=0)
  {
   // Aquí calculamos el valor del indicador en cada barra (i)
   i--;
  }

2. Para obtener los valores de los fractales superiores e inferiores:

double upfrac_val=iFractals(NULL,0,MODE_UPPER,i+1);
double lofrac_val=iFractals(NULL,0,MODE_LOWER,i+1);

3. Lo más importante - debemos recurrir a las variables globales para memorizar el valor del último fractal:

if(upfrac_val>0)
  {
   GlobalVariableSet(Symbol()+Period()+"upfrac",upfrac_val);
  }
else if(lofrac_val>0)
  {
   GlobalVariableSet(Symbol()+Period()+"lofrac",lofrac_val);
  }


4. Leer los datos de las variables globales y pasarlos a nuestros índices:

ExtMapBuffer1[i] = GlobalVariableGet(Symbol()+Period()+"upfrac");
ExtMapBuffer2[i] = GlobalVariableGet(Symbol()+Period()+"lofrac");

El estado preparado de nuestro indicador tiene el aspecto siguiente:

//+------------------------------------------------------------------+
//|                                                 FractalsLine.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- búferes
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Función de inicialización del indicador personalizado            |
//+------------------------------------------------------------------+
int init()
  {
//---- indicadores
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Función de desinicialización del indicador personalizado         |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizado                 |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int i=Bars-counted_bars-1;
 
   while(i>=0)
     {
      double upfrac_val=iFractals(NULL,0,MODE_UPPER,i+1);
      double lofrac_val=iFractals(NULL,0,MODE_LOWER,i+1);
      if(upfrac_val>0)
        {
         GlobalVariableSet(Symbol()+Period()+"upfrac",upfrac_val);
        }
      else if(lofrac_val>0)
        {
         GlobalVariableSet(Symbol()+Period()+"lofrac",lofrac_val);
        }
      ExtMapBuffer1[i] = GlobalVariableGet(Symbol()+Period()+"upfrac");
      ExtMapBuffer2[i] = GlobalVariableGet(Symbol()+Period()+"lofrac");
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Ahora hay que compilarlo, seleccionando "Archivo -> Compilar" o presionando el botón de la barra de herramientas.

El indicador recién creado puede adjuntarse al gráfico.



Aplicación práctica

En primera instancia, los niveles del fractal pueden ser útiles mientras el nivel StopLoss se mueve por debajo de la línea roja en un mercado alcista. El StopLoss debe mantenerse por encima de la línea azul en los mercados bajistas. Esta es una manera inteligente de garantizar la distancia de seguridad entre el StopLoss y el mercado.

Por ejemplo, supongamos que hemos entrado al mercado (véase la marca 1 del gráfico) con el stop de arriba de color azul (marca 2), si se atraviesa la línea roja (marca 3) movemos el StopLoss (marca 4); de igual modo, si ocurre una nueva ruptura (marca 5), movemos el StopLoss (marca 6). Si se cruza la línea azul (marca 7), cerramos la posición.

Para poder utilizar FractalsLine como mecanismo de trailing stop, primero tenemos que añadir dos pequeños fragmentos de código a nuestro Asesor Experto:

Obteniendo los datos del indicador FractalsLine:

double FLU = iCustom(NULL,0,"FractalsLine",0,0); // Línea fractal azul
double FLL = iCustom(NULL,0,"FractalsLine",1,0); // Línea fractal roja

Trailing-stop basado en el indicador FractalsLine:
if(Close[0]>FLU) // Trailing-stop para posiciones largas
  {
   if(OrderStopLoss()<FLL-3*Point || OrderStopLoss()==0)
     {
      OrderModify(OrderTicket(),OrderOpenPrice(),FLL-3*Point,OrderTakeProfit(),0,Green);
      return(0);
     }
  }


if(Close[0]<FLL) // Trailing-stop para posiciones cortas
  {
   if(OrderStopLoss()>FLL+(Ask-Bid+3)*Point || OrderStopLoss()==0)
     {
      OrderModify(OrderTicket(),OrderOpenPrice(),FLL+(Ask-Bid+3)*Point,OrderTakeProfit(),0,Red);
      return(0);
     }
  }


La implementación del trailing-stop basado en el indicador FractalsLine dio resultados positivos en el asesor experto MACD Sample. Esto se puede observar en los tests comparativos.


Pruebas de Standard MACD Sample

Símbolo EURUSD (Euro vs Dólar americano)
Período 1 hora (H1) 2008.01.02 12:00 - 2008.06.30 23:00 (2008.01.01 - 2008.07.01)
Modelo Cada tick (el método más preciso basado en todos los períodos menores disponibles para generar cada tick)
Parámetros TakeProfit=50; Lots=0.1; TrailingStop=30; MACDOpenLevel=3; MACDCloseLevel=2; MATrendPeriod=26;
Barras en la prueba 4059 Ticks modelados 1224016 Calidad del modelado 90.00%
Errores de gráficos mal agrupados 1
Depósito inicial 10000.00
Beneficio neto total 182.00 Beneficio bruto 1339.00 Pérdida bruta -1157.00
Factor de beneficio 1.16 Rentabilidad esperada 3.79
Disminución absoluta 697.00 Disminución máxima 827.00 (8.16%) Disminución relativa 8.16% (827.00)
Total de operaciones 48 Posiciones cortas (ganado %) 28 (82.14%) Posiciones largas (ganado %) 20 (85.00%)
Operaciones de beneficios (% del total) 40 (83.33%) Operaciones de pérdidas (% del total) 8 (16.67%)
Mayor Operaciones de beneficios 50.00 Operaciones de pérdidas -492.00
Media Operaciones de beneficios 33.48 Operaciones de pérdidas -144.63
Máximo ganancias consecutivas (beneficios en dinero) 14 (546.00) pérdidas consecutivas (pérdidas en dinero) 3 (-350.00)
Máximo beneficios consecutivos (número de ganancias) 546.00 (14) pérdidas consecutivas (número de pérdidas) -492.00 (1)
Media ganancias consecutivas 7 pérdidas consecutivas 1



Pruebas de MACD Sample con Trailing-stop basado en el indicador FractalsLine

Símbolo EURUSD (Euro vs Dólar americano)
Período 1 hora (H1) 2008.01.02 12:00 - 2008.06.30 23:00 (2008.01.01 - 2008.07.01)
Modelo Cada tick (el método más preciso basado en todos los períodos menores disponibles para generar cada tick)
Barras en la prueba 4059 Ticks modelados 1224016 Calidad del modelado 90.00%
Errores de gráficos mal agrupados 1
Depósito inicial 10000.00
Beneficio neto total 334.00 Beneficio bruto 1211.00 Pérdida bruta -877.00
Factor de beneficio 1.38 Rentabilidad esperada 5.14
Disminución absoluta 211.00 Disminución máxima 277.00 (2.75%) Disminución relativa 2.75% (277.00)
Total de operaciones 65 Posiciones cortas (ganado %) 41 (41.46%) Posiciones largas (ganado %) 24 (62.50%)
Operaciones de beneficios (% del total) 32 (49.23%) Operaciones de pérdidas (% del total) 33 (50.77%)
Mayor Operaciones de beneficios 50.00 Operaciones de pérdidas -102.00
Media Operaciones de beneficios 37.84 Operaciones de pérdidas -26.58
Máximo ganancias consecutivas (beneficios en dinero) 3 (150.00) pérdidas consecutivas (pérdidas en dinero) 4 (-168.00)
Máximo beneficios consecutivos (número de ganancias) 150.00 (3) pérdidas consecutivas (número de pérdidas) -168.00 (4)
Media ganancias consecutivas 2 pérdidas consecutivas 2



Conclusión

Las pruebas llevadas a cabo muestran que la rentabilidad aumenta y que las pérdidas disminuyen utilizando FractalsLine.

Traducción del ruso hecha por MetaQuotes Software Corp.
Artículo original: https://www.mql5.com/ru/articles/1435

Archivos adjuntos |
FractalsLine.mq4 (2.28 KB)
StrategyTester.zip (33.25 KB)
Todoporlapasta El Del Taco
Todoporlapasta El Del Taco | 12 nov. 2015 en 09:08
Porque piensas que esta manera de ver soportes y resistencias es mejor que mirar maximos y minimos?
MetaTrader 5 - ¡Más de lo que puedas imaginar! MetaTrader 5 - ¡Más de lo que puedas imaginar!

El terminal de cliente de MetaTrader 5 ha sido desarrollado desde cero y mejora con creces a su predecesor. La nueva plataforma ofrece oportunidades ilimitadas para operar en cualquier mercado financiero. Además, se ha ampliado su funcionalidad para ofrecer aún más características y facilidad de uso. Todo ello hace que sea muy difícil la enumeración de todas las ventajas de MetaTrader 5. Hemos intentado describir brevemente todas estas ventajas en un único artículo y nos ha sorprendido ver que el resultado ¡no ha sido nada breve!

Aumente la velocidad de los cálculos con la red en la nube de MQL5 Aumente la velocidad de los cálculos con la red en la nube de MQL5

¿Cuántos procesadores tiene tu ordenador? ¿Cuántos ordenadores puedes usar para optimizar una estrategia de trading? Aquí mostraremos cómo usar la red en la nube de MQL5 para acelerar los cálculos recibiendo la capacidad de procesamiento a través de la red mundial con solo el clic de un ratón. La frase "el tiempo es dinero" se hace más evidente aun con el paso de los años, y no podemos permitirnos esperar para realisar cálculos importantes durante decenas de horas o incluso días.

Trabajando con cestas de parejas de divisas en el mercado fórex Trabajando con cestas de parejas de divisas en el mercado fórex

En el artículo se analizan cuestiones relacionadas con la división en grupos de las parejas de divisas, las cestas; también sobre cómo obtener datos sobre el estado de estas cestas (por ejemplo, sobrecompra o sobreventa); qué indicadores pueden proporcionar estos datos; y al fin, sobre cómo se puede aplicar la información obtenida en el trading práctico.

Red neuronal profunda con Stacked RBM. Auto-aprendizaje, auto-control Red neuronal profunda con Stacked RBM. Auto-aprendizaje, auto-control

El artículo es la continuación de artículos anteriores sobre neuroredes profundas y elección de predictores. En este veremos las particularidades de una neurored iniciada con Stacked RBM, así como su implementación en el paquete "darch".