Descargar MetaTrader 5

Sistema de trading mecánico "Triángulo de Chuvashov"

12 abril 2016, 14:53
Genkov
0
623

Introducción

El artículo trata las posibilidades de cálculo de la ubicación de las barras y el tiempo de intersección de las líneas en prospecto. Los principios de generación de líneas de tendencia están cerrados a los de T. De Mark, relacionados con la construcción de un TD en los últimos intervalos de tiempo.

La aplicación que se ofrece se puede integrar en un sistema de trading más complejo como su parte, aunque es un Asesor Experto total.



Principios básicos de construcción de canales entrecruzados

La esencia del patrón del "Triángulo de Chuvashov" reside en la idea de que siempre se tienen los dos últimos fractales más bajos y los dos últimos más altos en cualquier punto de tiempo. Las líneas de tendencia se dibujan a través de los fractales más altos y los dos más bajos.

Si estas dos líneas se entrecruzan durante la continuación de la generación correcta del triángulo, se produce un patrón llamado el "Triángulo de Chuvashov". El punto de intersección de estas dos líneas de trabajo se llama Apex. Numera los 4 fractales en orden de aparición (de izquierda a derecha).

Dibuja una línea vertical por el segundo fractal de la izquierda. Dibuja también una línea vertical por el Apex. El número de velas entre esas dos líneas verticales, incluidas las velas en las lineas, se divide entre 3, se redondea, se coloca a la izquierda del Apex, y se dibuja una tercera línea.

La distancia entre la línea vertical a través del segundo fractal y la línea del medio formará el área real de avance.

Fig. 1. Dibujar el triángulo

Vamos a pasar a dibujar el triángulo.

Puede haber varias posiciones para los últimos 4 fractales, en las que o es imposible dibujar el triángulo o resulta ser muy corto o muy largo.

Fig. 2. Ejemplos de fractales en una posición poco favorable.

Además, es necesario introducir un número de condiciones que sea suficiente para dibujar el triángulo:

Algunas condiciones de la coincidencia de las líneas del triángulo:

  • Los primeros fractales de las líneas superiores e inferiores deberían estar separadas por más de 20-30 pips de altura.
  • El tamaño entre los primeros fractales superiores y las líneas inferiores debe ser más pequeño que el tamaño entre los segundos fractales de esas líneas.
  • El primer fractal de la línea superior debería ser más bajo que el segundo fractal de la misma línea, mientras que el primer fractal de la primera línea debería estar por encima de la línea más baja del segundo.

Estas condiciones adicionales se han considerado en el bloque del programa de las condiciones de formación del patrón.

Fig. 3. Área real de avance

Parece claro, pero miremos la Img. 3. ¿Cómo se puede definir el número de la barra en la que tiene lugar la intersección de las dos líneas de trabajo?

En el momento del avance de la línea, aún no se sabe si este avance es real, aunque ya sea la hora de entrar al mercado. El bloque de cálculo del área real de avance resuelve este problema utilizando parámetros de tiempo, es decir, define la intersección de las líneas de trabajo en el rango de tiempo.

Se sabe que cada barra aparece en el gráfico después de un tiempo concreto. Por ejemplo, las barras nuevas aparecen en H1 cada hora. Sabiendo la tasa de cambio de precio por unidad de tiempo de cada una de las dos líneas, es posible calcular la hora de la intersección. Sabiendo la cantidad de tiempo de la "base" del Triángulo en el momento de la intersección, es posible calcular el número de barras (unidades de tiempo) antes de la intersección. El área real de avance se define en el mismo bloque.

El Asesor Experto está diseñado en un principio de bloque por bloque.

Los bloques funcionales más repetidos están ubicados generalmente al principio del programa: abriendo y cerrando posiciones, funciones para dibujar señales y líneas. El programa ejecutable principal también tiene bloques separados, como:

  • El bloque para buscar fractales superiores e inferiores;
  • El bloque de las condiciones de formación del patrón;
  • El bloque para calcular el área real de avance;
  • El bloque de condiciones de apertura de posiciones.

A continuación se muestra el fragmento de los bloques funcionales.

// --------------------------------------------------------------------+
void Op_Sell_Ch()
  { 
  if(!OrderSend(Symbol(),OP_SELL,Lots,Bid,2,Ask+SL_S*Point,
      Bid-TP_S*Point," ",Magic,0,Red)) 
      { Print("  SELL order open error  # ",GetLastError()); }
      return(0);
     }
// --------------------------------------------------------------------+
void Op_Buy_Ch()
  {
  if(!OrderSend(Symbol(),OP_BUY,Lots,Ask,2,Bid-SL_B*Point,
      Ask+TP_B*Point," ",Magic,0,Blue))
      { Print("  SELL order open error  # ",GetLastError()); }
      return(0);
     }
//+--------------------------------------------------------------------+
void Close_S_Ch()
  {
  if(!OrderClose(OrderTicket(),OrderLots(),Ask,2,Aqua))  
      {Print(" Cl.ord.# ",OrderTicket()," Error # ",GetLastError());}
      return(0);
     }
//+--------------------------------------------------------------------+

La búsqueda de los puntos de referencia superiores e inferiores para construir las líneas de trabajo del triángulo se proporciona en el circuito de clasificación según las reglas de la creación de fractales.

El número de puntos de referencia se realiza considerando que la "indización de elementos de series de tiempo se realiza desde atrás, desde el último hasta el primero. La barra actual, que es la última de la gama, tiene un índice de 0".

// ====================================================================+
// (upper and lower fractals searching block) ---------------------------+
   for (i=M;i<=N;i++) // reference points (fractals) searching loop
    {//loop b
   // searching for upper fractals -----------------------------------------+
   if(High[i]>High[i+1] && High[i]>High[i+2] && 
      High[i]>High[i-1] && High[i]>High[i-2])
     {// frac_b
      Tfnb++;   // counter 
   // ----------------------------  
     if(Tfnb==1)     
           {             // for the 1 st fractal: price, index, time.
           TF1B=High[i]; Tf1b=i; timf1b=iTime(Symbol(),Period(),i); 
      }//-counter_1
   // ----------------------------
          if(Tfnb==2)    
           {//counter_2                       // price, index, time.
            TF2B=High[i]; Tf2b=i; timf2b=iTime(Symbol(),Period(),i); break;
           }//-counter_2
        // ----------------------------   
     }//-frac_b
    }//-b loop
// --------------------------------------------------------------------+
   for (i=M;i<=N;i++) // reference points (fractals) searching loop
    {//s loop
   // searching for lower fractals ------------------------------------------+
   if(Low[i]<Low[i+1] && Low[i]<Low[i+2] && 
      Low[i]<Low[i-1] && Low[i]<Low[i-2])
     {// frac_s
      Tfns++; 
     if(Tfns==1)     
           {//counter_1                    // price, index, time.
           TF1S=Low[i]; Tf1s=i; timf1s=iTime(Symbol(),Period(),i); 
           }//-counter_1
           if(Tfns==2)      
            {//counter_2                    // price, index, time.
            TF2S=Low[i]; Tf2s=i; timf2s=iTime(Symbol(),Period(),i); break;
           }//-counter_2
     }//-frac_s
    }//- loop s 
// ---------------------------(upper and lower fractals searching block)-+

Las siguientes condiciones se han incluido en el bloque de convergencia de las líneas de trabajo del triángulo:

  1. Los primeros fractales deberían espaciarse más de 20-30 pips;
  2. Los primeros fractales de una línea en funcionamiento deberían ser menores que el segundo fractal de otra;
  3. Los 4 puntos de referencia son diferentes a "0", es decir, tienen valores reales;
  4. Los parámetros de tiempo de los puntos de referencia deberían ser diferentes a "0";
  5. El primer punto de referencia superior está por debajo del segundo superior y el primer punto más bajo es más alto que el segundo punto más bajo;
  6. La diferencia entre los segundos fractales de la línea no debería exceder los 150 pips.
// ---------------------------------------------------------------------------+
   if((TF1B-TF1S)>25*Point && 
      Tf1b<=Tf2s && Tf1s<=Tf2b && 
      TF1B>0 && TF1S>0 && TF2B>0 && TF2S>0 && 
      timf1b!=0 && timf2b!=0 && timf1s!=0 && timf2s!=0 &&
      TF1B<TF2B && TF1S>TF2S && 
      (TF2B-TF2S)/Point<150)   
    {// triangle drawing conditions
//===========================================================================+

Después de rellenar las condiciones preliminares, calcule las tasas de los cambios de precio para las líneas superiores e inferiores en funcionamiento:

// -----------------------------------------------------------------------------+
   // -   (block Price change rate calculation)(upper and lower pips per one bar)
   if(TF1B!=TF2B) {RatePriceH=MathAbs((TF2B-TF1B)/(Tf2b-Tf1b));} // for the upper
   if(TF1S!=TF2S) {RatePriceS=MathAbs((TF1S-TF2S)/(Tf2s-Tf1s));} // for the lower 
   // Print(" RatePriceS= ",RatePriceS); Print(" RatePriceH= ",RatePriceH);
// -------------------------------------(block Price change rate calculation)---+
-->

En este punto, los 4 últimos fractales se colocan de acuerdo al triángulo que forma las condiciones, por lo que no está claro aún cómo de lejos estará el Apex y cuando se ubicará el área real de avance. El cálculo del Apex depende de la ubicación del segundo de los cuatro últimos fractales durante su generación (de izquierda a derecha en el gráfico).

El punto de inicio de la línea en funcionamiento larga debería definirse como un punto de intersección vertical dibujado a través del segundo fractal de la línea en funcionamiento más corta. Con respecto a esto, el siguiente algoritmo del programa se bifurca en dos direcciones del cálculo del área real de avance: línea de trabajo "larga" superior y "larga" inferior.

A continuación se muestran los fragmentos de código básico relativos a las direcciones. La segunda dirección se calcula utilizando el mismo algoritmo.

// жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 1. upper working line is longer than the lower one  жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+ 
// - (block of searching for the working line's intersection point) ----------------------------------------------------------+
// If the upper working line is longer than the lower one - find the intersection point on 50 bars
   if(Tf2b>Tf2s && TF2B>TF1B && TF2S<TF1S)
    {// The upper working line is longer
     // the starting price for calculation of values at each bar of the upper working line 
     Starting_Price_H=TF2B-RatePriceH*(Tf2b-Tf2s); 
     // the starting price for calculation of values at each bar of the upper working line 
     Starting_Price_S=TF2S;
     //the time of drawing the vertical line at the triangle's base
     time_starting=timf2s; 
     // ------------------------------------
    for(int k=1;k<=50;k++)
    {//50b loop
     PricB[k]=Starting_Price_H-RatePriceH*k;      // minus fall rate
     PricS[k]=Starting_Price_S+RatePriceS*k;      // plus rising rate
                            //       if prices of the upper and lower lines' projections coincide or the price of the upper one 
    if(PricB[k]<=PricS[k])  // has become less than that of the lower one, then there is the intersection with the working line 
     {//there is the intersection
     P_Tria=PricB[k-1];                                        // working line intersection price (-1) - should be one bar less
     cut_left=k;  break;                                       //     number of bars from the base up to the intersection point
     }//-there is an intersection
    }//-50b loop
// -------------------------------------- (block of searching for working line's intersection point)--------------------------+

Ahora se pueden empezar a calcular los parámetros de tiempo del área real de avance.

// ---------------------------------------------------------------------------+
// - (block of calculating time intervals for the actual breakthrough area)-----------+
// Introduce two additional limitations:
// 1. The Apex should not be located more than 50 bars far from the triangle's base
// 2. The Apex should not be located closer than 15 bars to the triangle's base.
   if(cut_left<50 && cut_left>12)
    {//triangle with all limitations
     time_Apex=timf2s+cut_left*T_period;                        // Apex generation time
     //  divide the number of bars by three, take 2/3 and round them off to the integer
     // value: MathRound(cut_left/3*2) -number of bars for the actual breakthrough area
     time_bar_zona=time_starting+MathRound(cut_left/3*2)*T_period;          //area time
     //      pattern creation conditions fulfilled, actual breakthrough area calculated  
     PatternTch=true;                          // "Chuvashov's Triangle" pattern formed
     }//-triangle with all limitations
// ------------(block of calculating time intervals for the actual breakthrough area)-+

Después de crear el patrón, el bloque de dibujo del triángulo empieza a funcionar:

// - (block of drawing the triangle after the pattern has been formed) ---+
   if(PatternTch==true)
    {//there is a pattern
    Del_Frb(); Del_Frs();       // delete previous upper and lower fractals
    CreateArrow_Frb(); CreateArrow_Frs();  // draw upper and lower fractals
    Create_Tr_H(); Create_Tr_S();       // draw upper and lower trend lines
    CreateLzona(); CreateLbasis(); CreateLApex();    // draw vertical lines
    CreateTriangleH();               // draw the triangle by the upper line
    ObjectDelete("TRS");   // delete the triangle drawing by the lower line
// -----(block of drawing the triangle after the pattern has been formed)-+ 
La siguiente captura muestra el funcionamiento del bloque de dibujo del patrón del "Triángulo de Chuvashov".-->

El bloque de apertura de posiciones entra en acción en ese momento.

Si se completan las condiciones para la apertura de posiciones, se calcula el dibujo del canal con la línea de trabajo superada. Se ha creado el canal.

StopLoss y TakeProfit se calcularán considerando los requisitos del sistema de gestión monetaria y se abrirá una posición (en este caso, la de BUY - vea la captura de pantalla).

Sin embargo, se pueden abrir posiciones en las dos direcciones si se completan las condiciones de apertura en ambas (vea la captura de pantalla).

En ese momento, el programa rastrear la durabilidad del patrón.

Si el tiempo actual excede el tiempo del área real de avance, el programa prohíbe la apertura de posiciones. Si el tiempo actual excede el del Apex, el programa elimina todos los dibujos de patrones, limpiando el gráfico de las ya innecesarias señales y líneas.

La durabilidad del código del bloque se muestra a continuación.

// - (block defining the pattern's life time) -------------------------------+
// if the current time exceeds the actual breakthrough area boundary's time, the pattern loses its power
   if((TimeCurrent()-time_bar_zona)>=T_period)
    {
     PatternTch=false; // the pattern is outdated - introduce the ban on opening positions
    }
    // after the current time exceeds the Apex one
    if((TimeCurrent()-time_Apex)>=T_period) 
     {
      // delete pattern signs and lines from the chart 
      Del_Frs(); Del_Frb(); Del_TrLin();
      // delete the lines of channel profit size by the upper working line 
      ObjectDelete("Tr_B1h"); ObjectDelete("Tr_B1hh"); ObjectDelete("Tr_B1hs");ObjectDelete("Tr_B1s");
      // delete the lines of channel profit size by the lower working line 
      ObjectDelete("Tr_S1s"); ObjectDelete("Tr_S1sh"); ObjectDelete("Tr_S1ss");ObjectDelete("Tr_S1h");
      // delete the vertical lines of the actual breakthrough area
      ObjectDelete("L1");ObjectDelete("zona");ObjectDelete("Ap");
      ObjectDelete("TRH"); ObjectDelete("TRS");
     }
// --------------------(block defining the pattern's life time)-+

Los resultados del funcionamiento de este bloque se muestran en el lado derecho de la captura de pantalla anterior.

El Asesor Experto que se muestra aquí mostró resultados positivos como sistema de trading mecánico durante la prueba automática:

  • Tasa de la totalidad de beneficios y de la totalidad de pérdidas P/F = 38869/16480 = 2,36 (más de 1);
  • Número de negocios = 101 (no menos de 100);
  • Porcentaje de retroceso = 25,18% (vea el archivo adjunto).

La pequeña conclusión es la siguiente:

Los traders pueden utilizar la técnica de trading descrita como un componente del sistema de trading, pero los filtros de apertura de posición se deben añadir como una mejora.

El autor puede mejorar los filtros propuestos anteriormente con la técnica de Stanislav Chucashov.

Notas sobre los documentos adjuntos:

  • Triangle_H1_v46.mq4 – МТС ofrecido
  • Strategy_Tester_Report_46.zip – resultado del test
  • able_3.zip – para los fans del análisis

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

Archivos adjuntos |
table_3.zip (9.73 KB)
Triangle_H1_v46.mq4 (37.82 KB)
Tres aspectos de la Automatización manual del trading. Primera parte: Trading Tres aspectos de la Automatización manual del trading. Primera parte: Trading

Este artículo es el primero de una serie de artículos sobre trading manual en la plataforma MetaTrader 4. Cada uno de los artículos se destinará a uno de los siguientes aspectos: automatización del trading manual, estado actual de la muestra de trade automatizado, y automatización de los informes de los resultados de trade. En este artículo, presentaré un método interesante para crear un AE controlado manualmente por un trader.

El Asesor Experto MetaTrader 4 intercambia información con el mundo exterior El Asesor Experto MetaTrader 4 intercambia información con el mundo exterior

Una solución de intercambio de información simple, universal y fiable entre el Asesor Experto MetaTrader 4 y el mundo exterior. Los proveedores y los consumidores de la información pueden estar en diferentes ordenadores, la conexión se realiza a través de direcciones IP globales.

LibMatrix: Librería de Álgebra Matrix (Parte uno) LibMatrix: Librería de Álgebra Matrix (Parte uno)

El autor familiariza a los lectores con una librería de álgebra matrix simple y ofrece descripciones y peculiaridades de las funciones principales.

Leer fuentes de noticias RSS a través de MQL4 Leer fuentes de noticias RSS a través de MQL4

Este artículo trata un ejemplo de lectura de márgenes RSS a través de MQL4 utilizando las funciones para el análisis de etiquetas HTML. Intentaremos hacer un trabajo que se pueda transformar en un indicador de noticias o en un lector RSS en lenguaje MQL4.