English Русский 中文 Deutsch 日本語 Português
MQL4 como herramienta para Trading, o el Análisis técnico avanzado.

MQL4 como herramienta para Trading, o el Análisis técnico avanzado.

MetaTrader 4Ejemplos | 12 febrero 2016, 15:40
848 0
Andrey Opeyda
Andrey Opeyda

Introducción

El trading es, ante todo, un cálculo de probabilidades. El refrán que dice que la ociosidad es un motor para el progreso, nos revela la razón por la que se están desarrollando todos estos indicadores y sistemas de trading. Resulta que la mayoría de los principiantes en el estudio del trading, realizan teorías de trading. Pero, afortunadamente, todavía hay algunos secretos de mercado no descubiertos, y se utilizan herramientas para analizar los movimientos de precios, básicamente, como los indicadores técnicos o matemáticas y paquetes stat. Gracias a Bill Williams por su contribución a la teoría de movimientos de mercado. Aunque, quizás, es algo pronto para dormirse en los laureles.


Manteniendo las estadísticas

Podemos preguntarnos: "¿De qué color son las velas que predominan en el gráfico de una hora de EURUSD?" Podemos empezar a contar las negras, teniendo en cuenta cada cien nuevas en el mismo en el bloque, y luego contar las blancas. Pero podemos escribir una docena de líneas de código, que hará esto automáticamente. Básicamente, todo es lógico y no hay nada inusual. Sin embargo, vamos a intentar responder a la pregunta de arriba. Primero, vamos a simplificar la identificación de color de las velas:

bool isBlack(int shift)
  {
    if(Open[shift] > Close[shift])
        return (true);
    return (false);
  }
//+------------------------------------------------------------------+
bool isWhite(int shift)
  {
    if(Open[shift] < Close[shift]) 
        return (true);
    return (false);
  }
//+------------------------------------------------------------------+

Utilizando el código que ya se ha escrito, continuaremos el experimento.

//EXAMPLE 1
      //Calculate black and white candles
      double BlackCandlesCount = 0;
      double WhiteCandlesCount = 0;
      double BProbability = 0;
 
      for(int i = 0; i < Bars - 1; i++)
        {
          if(isBlack(i) == true)
              BlackCandlesCount++;
 
          if(isWhite(i) == true)
              WhiteCandlesCount++;
        }
      
      BProbability = BlackCandlesCount / Bars;

El resultado es interesante y algo predecible: El 52,5426% de 16 000 son blancas. Utilizando el recopilador de MQL4, podemos resolver también el problema de ciclicidad Por ejemplo, ¿si se ha cerrado una vela negra, cuál es la probabilidad de formar una blanca? Esto, por supuesto, depende de una gran variedad de factores, pero vamos a referirnos a las estadísticas.

//EXAMPLE 2
      //Calculate seqences of 1st order
      //BW means after black going white candle     
      double BW = 0;
      double WB = 0;
      double BB = 0;
      double WW = 0;
       
      for(i = Bars; i > 0; i--)
        {
         if(isBlack(i) && isWhite(i-1)) 
             BW++;           
         if(isWhite(i) && isBlack(i-1)) 
             WB++;
         if(isBlack(i) && isBlack(i-1)) 
             BB++;            
         if(isWhite(i) && isWhite(i-1)) 
             WW++;
        }

El resultado obtenido:
- Blanca seguida de negra - 23,64%
- Negra seguida de blanca - 23,67%
- Blanca seguida de blanca - 21,14%
- Negra seguida de negra - 20,85%

Como se puede ver, la probabilidad de que una vela esté seguida de otra del mismo color, es algo menor que de una del color contrario.

Utilizando MQL4 y teniendo un historial de datos, un trader puede hacer investigaciones de mercado más profundas. La terminal permite dibujar histogramas. Utilizaremos esta función para dibujar la distribución de los colores de las velas según los valores de los indicadores WPR y RSI.

//EXAMPLE 3.1
      //Build histogram by RSI
      //RSI min/max - 0/100
      
      double RSIHistogramBlack[100];
      double RSIHistogramWhite[100];
      
      for(i = Bars; i > 0; i--)
        {
          int rsi_val = iRSI(NULL,0,12,PRICE_CLOSE,i);
          if(isWhite(i))
              RSIHistogramWhite[rsi_val]++;
          if(isBlack(i))
              RSIHistogramBlack[rsi_val]++;
        }
      for(i = 0; i < 100; i++)
        {
          ExtMapBuffer1[i] = RSIHistogramBlack[i];
          ExtMapBuffer2[i] = -RSIHistogramWhite[i];
        }
 
//EXAMPLE 3.2
      //Build histogram by %R
      //%R min/max - 0/-100

      double WPRHistogramBlack[100];
      double WPRHistogramWhite[100];
      
      for(i = Bars; i > 0; i--)
        {
          int wpr_val = iWPR(NULL,0,12,i);
          int idx = MathAbs(wpr_val);
          if (isWhite(i))
              WPRHistogramWhite[idx]++;
          if (isBlack(i))
              WPRHistogramBlack[idx]++;
        }




De todos modos, sería más objetivo, en lugar de contar las velas blancas y negras, mantener las estadísticas de los trades beneficiosos y los que tienen pérdidas con diferentes valores de StopLoss y TakeProfit. El siguiente procedimiento será de ayuda para este propósito:

int TestOrder(int shift, int barscount, int spread, int tp, int sl, int operation)
 {
   double open_price = Close[shift];
   
   if (operation == OP_BUY)
      open_price  = open_price + (Point * spread);
      
   if (operation == OP_SELL)
      open_price  = open_price - (Point * spread);
      
   
   for (int i = 0; i<barscount; i++)
    {
      if (operation == OP_BUY)
       {
         //sl
         if (Low[shift-i] <= open_price - (Point * sl) )
            return (MODE_STOPLOSS);
         //tp            
         if (High[shift-i] >= open_price + (Point * tp) )
            return (MODE_TAKEPROFIT);            
       }
      
      if (operation == OP_SELL)
       {
         //sl
         if (High[shift-i] >= open_price + (Point * sl) )
            return (MODE_STOPLOSS);
         //tp            
         if (Low[shift-i] <= open_price - (Point * tp) )
            return (MODE_TAKEPROFIT);            
       }
      
    }  
   return (MODE_EXPIRATION);   
 }

Estoy seguro de que los resultados le sorprenderán. Los mapas de Kohonen, la distribución Gaussian, y el coeficiente Hurst le sorprenderán aún más. Hay muchas cosas asombrosas. Lo principal es no olvidar la esencia y el sentido del trading.

Conclusión

Básicamente, todos los trader utilizan sus propias técnicas de trading. Por supuesto, nada le impedirá representar la efectividad de su sistema de forma gráfica, analizarlo y utilizarlo en el trading. Que no haya resultados, también es un resultado. El conocimiento que tenga el trader simplemente mejorará su productividad en el trading.

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

Archivos adjuntos |
instrument.mq4 (5.02 KB)
Recuento múltiple de barras nulas en algunos indicadores Recuento múltiple de barras nulas en algunos indicadores
El artículo trata sobre el problema de recuento del valor del indicador en la Terminal de Cliente de MetaTrader 4 cuando cambia la barra nula. Resume la idea general de cómo añadir al código del indicador algún elemento de programa extra que permita restablecer el código de programa guardado antes del recuento múltiple.
Algorítmos genéticos vs. Búsqueda simple en el Optimizador MetaTrader 4 Algorítmos genéticos vs. Búsqueda simple en el Optimizador MetaTrader 4
El art&iacute;culo compara el tiempo y los resultados de la optimizaci&oacute;n del Asesor experto utilizando algoritmos gen&eacute;ticos y los que se obtienen con la b&uacute;squeda simple.
Mi primer "Grial" Mi primer "Grial"
Se han examinado los errores más frecuentes que llevan a los programadores primerizos a la creación de un sistema de trading "para hacerse de oro" (cuando se ha probado). Hay expertos ejemplares que muestran resultados fantásticos durante la prueba, pero se pierden resultados durante el trading real.
Sincronización de Asesores expertos, script e indicadores. Sincronización de Asesores expertos, script e indicadores.
El artículo contempla la necesidad y las normas principales para desarrollar un bloque de programas que contenga un Asesor experto, un script y un indicador.