Descargar MetaTrader 5

¿Cuánto dura una tendencia?

8 junio 2017, 09:44
Alexander Fedosov
0
2 530

Contenido

Introducción

La definición del estado del mercado en diferentes periodos de tiempo es la base del trading. Por ello, el éxito del tráder depende directamente de la precisión a la hora de pronosticar del movimiento del precio. Sobre este tema ya se ha escrito una serie de artículos: por ejemplo, "Distintas maneras para averiguar la tendencia en MQL5". En ese artículo se describieron los métodos de definición del estado de tendencia del mercado, se escribieron indicadores basados en ellos y también asesores comerciales. También dediqué a la tendencia uno de mis artículos anteriores "Análisis comparativo de 10 estrategias tendenciales", donde se desarrollaron y simularon estrategias de tendencia. En este artículo también vamos a elegir varios métodos de definición de tendencia, pero solo con el objetivo de determinar su duración con respecto al estado plano del mercado. Normalmente, se considera que la tendencia guarda una proporción con respecto al flat de un 30% : 70%. Esto vamos a comprobar.


Planteando la tarea

Para realizar la investigación, vamos primero a definir las tareas y sus condiciones.

  1. Hay que elegir los métodos de definición de la tendencia y el mercado plano de tal manera que se los pueda valorar se forma cuantitativa y expresar en tanto por ciento. Para ello, solo nos convendrán los sistemas que puedan mostrar ambos estados del mercado. Resulta preferible que incorporen también índices cualitativos: la fuerza de la tendencia o una determinación claramente expresada del estado plano del mercado.
  2. También deberemos tener la posibilidad de definir y valorar la proporción en los diferentes periodos temporales, así como en distintos mercados de uno o varios tipos, ya sean divisas, valores o futuros.
  3. Debemos desarrollar un instruemnto que el lector pueda usar en investigaciones propias para el cometido que le interese.
  4. E igualmente, realizar un análisis basado en los datos obtenidos en diferentes condiciones, buscando también una correlación.

Implementación

1 Eligiendo el método de definición de la tendencia.

1.1. Vamos a comenzar la investigación con el indicador clásico de fuerza de tendencia ADX. El nivel TrendLevel se encargará de valorar la presencia de la tendencia o el flat. Consideraremos que hay tendencia si la línea principal se eleva por encima de este nivel. En la fig.1 se muestra un ejemplo de definición de la zona de tendencia y la zona de flat según este método. El cálculo del estado del mercado se realizará según el número de velas en las que el valor ADX sea mayor que el TrendLevel de una muestra dada.

Fig.1 Definición de la zona de tendencia/flat con la ayuda de ADX

1.2. A continuación, analizaremos el Indicador de fuerza y dirección de la tendencia, pero para nuestra tarea solo elegiremos un indicador de Bollinger y disminuiremos a dos el número de colores de representación (rojo y verde). En la fig.2 se ve perfectamente dónde tienen lugar los movimientos fuertes del mercado: las velas adoptan los colores establecidos.

Fig.2 Definición de las zonas de tendencia/flat con la ayuda de las franjas de Bollinger.

1.3. En tercer lugar, se analiza Percentage of Trend, que ya ha sido sometido a una modificación: se le ha quitado el segundo periodo y añadido la indicación a color de la tendencia. El resultado del trabajo con el indicador obtenido se muestra en la fig.3.

 

Fig.3 Definición de las zonas de tendencia/flat con la ayuda de Percentage of Trend.

1.4. Otro método de definición de las zonas de tendencia/flat implica a RSIFilter. Para que el cálculo de RSI resulte más cómodo, se representa como un histograma, donde la salida de los valores del indicador en las zonas de sobreventa/sobrecompra establecidas de antemano se muestra como una columna. Aquí también se han introducido cambios en el indicador original: el estado del flat no se representa, y el búfer que muestra el valor de la altura del histograma en dicho estado del mercado es igual a cero. Se ha hecho de tal forma que resulte cómodo definir la presencia de la tendencia con la cual el valor del búfer es igual a cero. Un ejemplo del funcionamiento del indicador se muestra en la fig.4.

Fig.4  Definición de las zonas de tendencia/flat con la ayuda de RSIFilter.

1.5. Y, por fin, analizaremos el método del artículo "Distintas maneras para averiguar la tendencia en MQL5", y precisamente la definición de los estados de tendencia/flat con la ayuda de ZigZagTrendDetector. En ellos no se ha introducido cambio alguno. Su funcionamiento se presenta en la fig.5.

Fig.5  Definición de las zonas de tendencia/flat con la ayuda de ZigZagTrendDetector.

2. Desarrollo e implementación de un instrumento para calcular los estados del mercado y representar los resultados.

El resultado de cada método de definición de tendencia/flat se presentará en forma de tabla dinámica con varios marcos temporales. Para que todo se represente con mayor claridad, he usado la biblioteca EasyAndFastGUI basada en la serie de artículos Interfaces gráficas. Asimismo, se ha desarrollado una clase especial CTrendCountUI para visualizar los resultados. Para ver con mayor claridad el aspecto que tendrá, en la fig.6 se representa una plantilla inicial en la que se anotarán todos los cálculos.

 

Fig.6 Plantilla de representación del cálculo de los resultados de la simulación.

Como se puede ver en la captura de pantalla, en la primera columna se muestran los métodos de cálculo de la tendencia, y en la primera línea el cálculo en la variante con marco temporal múltiple. Para ahorrar espacio y que todo se lea con mayor facilidad, no mostraré la implementación completa de la interfaz; solo representaré la función que configura y visualiza la plantilla presentada más arriba:

//+------------------------------------------------------------------+
//| Muestra y configuración del panel informativo                          |
//+------------------------------------------------------------------+
void SetInfoPanel()
  {
//---

   UI.CreateMainPanel("Trend Counter");
   UI.CreateStatusBar(1,25);
   UI.m_status_bar.ValueToItem(0,"Enabled on "+Symbol());
   UI.CreateCanvasTable();
//---

   UI.m_canvas_table.SetValue(0,0,"Valor");
   UI.m_canvas_table.SetValue(0,1,"ADX");
   UI.m_canvas_table.SetValue(0,2,"BB");
   UI.m_canvas_table.SetValue(0,3,"PoT");
   UI.m_canvas_table.SetValue(0,4,"RSI");
   UI.m_canvas_table.SetValue(0,5,"ZZ");
//---

   UI.m_canvas_table.SetValue(1,0,"M1");
   UI.m_canvas_table.SetValue(2,0,"M5");
   UI.m_canvas_table.SetValue(3,0,"M15");
   UI.m_canvas_table.SetValue(4,0,"M30");
   UI.m_canvas_table.SetValue(5,0,"H1");
   UI.m_canvas_table.SetValue(6,0,"H4");
   UI.m_canvas_table.SetValue(7,0,"H6");
   UI.m_canvas_table.SetValue(8,0,"D1");
   UI.m_canvas_table.SetValue(9,0,"W1");

   UI.m_canvas_table.UpdateTable(true);
   UI.CreateLabel("Working...");
  }

El siguiente paso será la creación de algoritmos de cálculo para los métodos de cálculo elegidos más arriba. En la mayoría, sus métodos de implementación son muy semejantes, por eso solo analizaremos uno. Prestaremos especial atención a los momentos en los que se implementa el cálculo.

Vamos a analizar el primer método descrito: ADX, función GetADXCount().

//+------------------------------------------------------------------+
//| Función de cálculo de los estados del mercado con la ayuda de ADX                   |
//+------------------------------------------------------------------+
bool GetADXCount()
  {
//--- Bloque 1
   double adx[],result[],count;
   int to_copy,bars;
   int tf_size=ArraySize(Ind_Timeframe);
   ArrayResize(Ind_Handle,tf_size);
   ArrayResize(result,tf_size);
   ArrayInitialize(adx,0.0);
   ArrayInitialize(result,0.0);
   ArraySetAsSeries(adx,true);
//---

   for(int i=0;i<tf_size;i++)
     {
      count=0;
      Ind_Handle[i]=iADX(Symbol(),Ind_Timeframe[i],InpInd_ADXPeriod);
      if(Ind_Handle[i]==INVALID_HANDLE)
        {
         Print(" Failed to get the indicator handle");
         return(false);
        }
      //--- Bloque 2

      bars=Bars(Symbol(),Ind_Timeframe[i]);
      to_copy=(bars<NumCandles)?bars:NumCandles;
      //---

      if(CopyBuffer(Ind_Handle[i],0,0,to_copy,adx)<=0)
         return(false);
      //--- Bloque 3

      for(int j=0;j<to_copy;j++)
        {
         if(adx[j]>TrendLevel)
            count++;
        }
      result[i]=(count/to_copy)*100;
      IndicatorRelease(Ind_Handle[i]);
     }
//--- Bloque 4

   for(int i=1;i<=tf_size;i++)
      UI.m_canvas_table.SetValue(i,1,DoubleToString(result[i-1],2));
   UI.m_canvas_table.UpdateTable(true);
   return(true);
  }

Vamos a ver los bloques de código designados en la lista de arriba.

  • Bloque 1. Inicialización de las variables y matrices, muestra de sus tamaños con respecto a la cantidad de marcos temporales en los que se realizarán las pruebas.
  • Bloque 2. Para realizar una simulación y obtener un resultado en tanto por ciento, necesitamos una muestra con un número determinado de velas. Hay que tener en cuenta que en los marcos temporales mayores o en los instrumentos con una historia pequeña las barras para la muestra establecida podrían ser insuficientes, por eso hay que definir la profundidad la historia y, en caso necesario, corregir el volumen de los datos solicitados.
  • Bloque 3. Para el indicador ADX, aumentaremos el contador cuando su valor para la barra actual esté por encima de TrendLevel. 
  • Bloque 4. Introduciremos los resultados de la simulación en un recuadro preparado de antemano en la función SetInfoPanel().

A continuación, solo cambiará el bloque 3, es decir, las condiciones del cálculo.

Función GetColorBBCount().

for(int j=0;j<to_copy;j++)
        {
         if(bb[j])
            count++;
        }
result[i]=(count/to_copy)*100;

Un valor del búfer de indicador elegido que sea distinto a cero nos indica que la vela actual en la muestra pertenece a la tendencia. De no ser así, nos encontraremos ante un flat.

Función GetPoTCount().

Los parámetros del indicador Percentage of Trend tienen el siguiente aspecto:

//--- Parámetros de Percentage of Trend

input int                  InpPeriodPoT=20;
input double               UpTrendLevel=0.8;
input double               DnTrendLevel=0.2;

Por eso, el signo distintivo de la presencia de una tendencia, será la salida del valor del indicador fuera de UpTrendLevel y DnTrendLevel. Por consiguiente, el cálculo tendrá este aspecto:

 for(int j=0;j<to_copy;j++)
        {
         if(pot[j]>=UpTrendLevel || pot[j]<=DnTrendLevel)
            count++;
        }
 result[i]=(count/to_copy)*100;

Función GetRSICount().

Puesto que se presenta como un histograma en el que la presencia de tendencia se designa como 1, y la ausencia como 0, la condición será idéntica a GetColorBBCount():

 for(int j=0;j<to_copy;j++)
        {
         if(rsi[j])
            count++;
        }
 result[i]=(count/to_copy)*100;

Función GetZZCount().

Es análoga a la anterior: la misma forma de histograma para el indicador.

 for(int j=0;j<to_copy;j++)
        {
         if(zz[j])
            count++;
        }
 result[i]=(count/to_copy)*100;

Función GetAverage().

Calcula el resultado total según todos los métodos y marcos temporales.

//+------------------------------------------------------------------+
//| Función de cálculo del valor medio conforme a todos los datos                |
//+------------------------------------------------------------------+
string GetAverage(double &arr[])
  {
   double sum=0.0;
   int size=ArraySize(arr);
   for(int i=0;i<size;i++)
      sum+=arr[i];
   sum/=size;
   return(DoubleToString(sum,2));
  }
//+------------------------------------------------------------------+

En definitiva, el cálculo completo y la muestra de la información tendrán el aspecto compacto que vemos a continuación:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetInfoPanel();
   if(GetADXCount() && 
      GetColorBBCount() && 
      GetPoTCount() && 
      GetRSICount() && 
      GetZZCount()
      )
      UI.m_label1.LabelText("Done. Result for "+IntegerToString(NumCandles)+" bars. Average Trend Time - "+GetAverage(avr_result)+"%");
   else
     {
      UI.m_label1.LabelText("Error");
     }
//---
   return(INIT_SUCCEEDED);
  }

Simulación

Para la simulación hemos decido usar varios instrumentos de diferentes tipos, para ampliar al máximo las condiciones de la investigación:

  • Parejas de divisas — EURUSD,USDCHF,USDJPY,GBPUSD;
  • Futuros — GOLD-6.17;
  • Mercado de valores — #MCD;

La simulación en todos los marcos temporales tendrá lugar usando una muestra de 2000 barras. Más abajo se muestran los ajustes, son iguales para todos los instrumentos.

//+------------------------------------------------------------------+
//| Parámetros de entrada del experto                                       |
//+------------------------------------------------------------------+

input int                  NumCandles=2000;              //Number of analyzed candles
//---- Parámetros de ADX
input string               com1="";                      //---- Parámetros de ADX
input int                  InpInd_ADXPeriod=14;          //ADX Period
input double               TrendLevel=20.0;
//--- Parámetros de ColorBBCandles
input string               com2="";                      //---- Parámetros de ColorBBCandles
input int                  BandsPeriod=20;               // Periodo de promediación de las Franjas de Boollinger
input double               BandsDeviation=1.0;           // Desviación
input ENUM_MA_METHOD       MA_Method_=MODE_SMA;          //método de promediación del indicador
input Applied_price_       IPC=PRICE_CLOSE_;             //constante de precio
//--- Parámetros de Percentage of Trend
input string               com3="";                      //---- Parámetros de Percentage of Trend
input int                  InpPeriodPoT=20;
input double               UpTrendLevel=0.7;
input double               DnTrendLevel=0.3;
//--- Parámetros de RSIFilter
input string               com4="";                      //---- Parámetros de RSIFilter
input uint                 RSIPeriod=10;                 // Indicator period
input ENUM_APPLIED_PRICE   RSIPrice=PRICE_CLOSE;         // Price
input uint                 HighLevel=60;                 // Overbought level
input uint                 LowLevel=40;                  // Oversold level
//--- Parámetros de ZigZagTrendDetector 
input string               com5="";                      //---- Parámetros de ZigZagTrendDetector
input int                  ExtDepth=5;
input int                  ExtDeviation= 5;
input int                  ExtBackstep = 3;


1 Simulación de las parejas de divisas.

Según los resultados de la simulación de las cuatro parejas de divisas, se ha detectado una tendencia general con un valor medio del 60% del tiempo en el estado de tendencia. Además, no se ha observado ninguna diferencia sustancial según los diferentes modos y marcos temporales.

Fig.7 Resultados de la simulación con las cuatro parejas de divisas.

2. Simulación de futuros.

La simulación de futuros ha mostrado valores que se salen de la tendencia general en los marcos temporales mayores. Esto sucede porque desde un principio se dio una muestra de 2000 barras, pero en D1 y W1 no hay historia suficiente, por eso el cálculo se realiza según la historia máxima disponible. 

Fig.7 Resultados de la simulación del futuro GOLD-6.17.

3. Simulación de acciones.

Aquí también se observa la tendencia general detectada en los instrumentos de más arriba.

 

Fig.8 Resultados de la simulación de la acción #MCD.

Durante el proceso de simulación me pregunté: ¿es justo elegir un rango de 2000 barras? ¿Se mantiene el valor medio de la tendencia para las muestras de otras dimensiones? Y aquí llega otro momento interesante a comprobar: ¿cómo cambia la proporción tendencia/flat en un segmento de historia? Porque tras investigar la dinámica de cambio de esta proporción, se pueden extraer conclusiones sobre el cambio del carácter de los movimientos de la tendencia, la duración, la frecuencia, etcétera. Por eso, decidimos investigar la dependencia entre el valor de la muestra y el valor medio de la tendencia para cada uno de los métodos de definición de la tendencia. Esto dará respuesta a las preguntas planteadas más arriba. Buscaremos las dependencias con la ayuda del cálculo del coeficiente de correlación de rango de Spearman. 

Nos interesa la correlación de dos magnitudes: el número de barras del test (X) y el tiempo medio de la tendencia en tanto por ciento (Y). A cada X e Y se les asigan rangos. Basándonos en los rangos obtenidos se calcula su diferencia d y se calcula el coeficiente con la fórmula:

donde n — es el número de parejas medidas X e Y. El valor del coeficiente puede variar de -1 a 1. Un valor positivo indica la dependencia directa de las magnitudes investigadas, uno negativo, lo contrario. Un valor cero indica la ausencia de cualquier dependencia.

Como ejemplo, analizaremos con detalle uno de los métodos de definición de la tendencia de ADX en la pareja de divisas EURUSD. El resto se calcularán de forma análoga, y sus resultados se reunirán en un recuadro para mostrar todo de forma más visual. En nuestro caso, n=7 será la medida de los valores medios de tiempo de la tendencia. Se ha elegido de antemano el número de barras para la simulación: a saber, 100, 200, 300, 500, 1000, 1500, 2000. En el siguiente recuadro se muestran los resultados de la medición de los valores, su alcance, la diferencia de rango y su cuadrado para el cálculo del coeficiente:

Rx X Y Ry D(Rx-Ry) D2
1  100 75.78 1 0 0
2  200 77.72 2 0 0
3  300 79.04 3 0 0
4  500 79.77 5 -1 1
5  1000 79.49 4 -1 1
6  1500 81.32 6 0 0
 2000 81.44 7 0 0

Colocando en la fórmula los valores obtenidos, obtenemos el coeficiente ρ=1-(6*2)/(7*(49-1)=0,96. 

A continuación, comprobamos el valor obtenido usando el recuadro de valores críticos de los coeficientes, que se muestra en la fig.8, para n=7 y sacamos la conclusión de que en el marco de esta simulación existe una dependencia proporcional directa y muy intensa del valor medio del tiempo de la tendencia con respecto al valor de la muestra establecida en la simulación en barras.

Fig.8 Valores críticos del coeficiente de correlación de rangos de Spearman.

Ahora calculamos el coeficiente de Spearman para todos los métodos de definición de tendencia para la pareja de divisas elegida EURUSD y mostramos estos valores en un recuedro.

Método de definición de la tendencia Valor del coeficiente de Spearman
 ADX 0.96
 ColorBBCount 0.89
 Percentage of Trend 0.68
 RSI Filter -0.68
 ZigZagTrendDetector -0.07 

¿Qué nos indican los resultados obtenidos? Los tres primeros métodos de definicón de la tendencia han mostrado una dependencia directa del valor medio de la tendencia respecto a la profundidad de la historia, RSI Filter, al contrario, ha demostrado una dependencia inversa, y la definición con la ayuda del indicador ZigZag ha demostrado que el resultado final no depende del tamaño de la muestra. Calculamos los coeficientes para otros instrumentos que participan en la simulación, y reunimos igualmente los resultados en un recuadro. 

Método de definición de la tendencia EURUSD USDCHF USDJPY GBPUSD GOLD-6.17 #MCD
 ADX 0.96 -0.61 -0.75 0.96 -0.86 0.93
 ColorBBCount 0.89 0.46 -0.11 -0.14 -0.64 0.79
 Percentage of Trend 0.68 0.93 0.11 0.29 0.89 1
 RSI Filter -0.68 1 0.04 0.79 -1 0.89
 ZigZagTrendDetector -0.07 0 0.96 0.96 0.36 0.32

Basándonos en los resultados obtenidos podemos sacar las siguientes conclusiones sobre cada uno de los instrumentos comerciales.

  • EURUSD. En tres de los cinco métodos de definición de la tendencia se ha detectado una fuerte correlación: cuanto más profunda es la historia, mayor es en ella la parte del estado de tendencia del mercado.
  • USDCHF. Como sucede con el anterior instrumento, la parte del estado de tendencia del mercado ha sido mayor en el pasado que ahora.
  • USDJPY. Aquí no existe dependencia entre el cambio de magnitud de la muestra y el valor obtenido. El carácter del movimiento y la dinámica de este mercado no ha cambiado especialmente.
  • GPBUSD. En cuatro de los cincos métodos existe una dependencia directamente proporcional de la parte de la tendencia con respecto la magnitud de la muestra. De esta forma, sacamos la conclusión de que en esta pareja la parte del estado de tendencia del mercado en el pasado era más alta que la actual.
  • GOLD-6.17. No se han detectado dependencias del cambio de la magnitud de la muestra.
  • #MCD. En los cinco casos existe dependencia, además, en cuatro de ellos se trata de una dependencia muy obvia. Esto también indica que en el pasado ha habido tendencias largas y fuertes. Cuanto más se aproxima la historia al día actual, menos frecuentes son las transiciones del mercado elegido al estado de tendencias fuertes.

Para comprobar la fiabilidad de los resultados obtenidos, analizaremos los gráficos de los instrumentos investigados en un marco temporal mayor y en un gran periodo de historia. Esto nos dará una idea de si el carácter de los movimientos de tendencia cambia. Para el análisis tomaremos el marco temporal de una semana y descubriremos los segmentos característicos para el estado de tendencia o de flat en el mercado.

1 EURUSD

Echemos un vistazo a la imagen presentada más abajo. En esta se muestra la pareja de divisas EURUSD desde el año 1995 hasta la actualidad. 

Fig.9 Gráfico de semanas de EURUSD 1995-2017

En la imagen se han marcado con tres zonas las características particulares del mercado:

  • La primera zona muestra una larga tendencia descendente con algunos retrocesos. Preste atención a la duración y la fuerza de la tendencia.
  • La segunda zona, según su movimiento, representa lo opuesto a la primera, además, la fuerza y la duración no son inferiores a la primera. Como podemos ver, ambos movimientos tuvieron lugar en el periodo desde 1995 hasta mediados de 2007.
  • Como se ve en la tercera y cuarta zona marcadas, la fuerza y la duración de los movimientos de tendencia desciende considerablemente. Teniendo en cuenta las dimensiones de las tendencias anteriores, las actuales paracen más bien movimientos laterales.

Según estas observaciones podemos sacar la conclusión de que el cálculo de los coeficientes de correlación de Spearman para los métodos elegidos de definición de la tendencia muestra de forma fiable el carácter actual del cambio de la proporción tendencia/flat.


2. USDJPY

Recordemos que al calcular los coeficientes de correlación para estos instrumentos no se ha detectado ninguna dependencia del carácter del cambio o la proporción de la tendencia con el paso del tiempo. En la fig.10 se puede ver bien que desde el comienzo de 1995 se manifiesta de forma clara una fuerte tendencia ascendente, después de la cual la amplitud y la duración de las tendencias disminuye significativamente. En la segunda parte de la imagen, donde se representa primero una tendencia descendente y luego una ascendente, se notan movimientos laterales frecuentes durante varios meses. 


Fig.10 Gráfico semanal de USDJPY 1995-2017.

Por eso, en este caso, el cálculo del coeficiente de correlación de Spearman también caracteriza de forma fiable la ausencia de cualquier dependencia entre el tiempo y la proporción tendencia/flat.


3. #MCD.

Lo último que se ha decidido ha sido analizar el caso de las acciones, donde, recordemos, la correlación se ha percibido en cada uno de los cinco métodos de definición de la tendencia. En la fig.11 vemos que en el pasado, las acciones se movían hacia arriba sin retrocesos significativos o estados de flat prolongados. También se ve claramente qué movimiento y proporción tendencia/flat se ha observado en el pasado cercano y hasta el momento actual.

Fig.11 Acciones #MCD 2003-2017.

Por eso aquí también el cálculo de los coeficientes de correlación de Spearman es totalmente justo y nos presenta una imagen que caracteriza un fuerte cambio de la proporción tendencia/flat, inclinándose más hacia este último. La tendencia general de los mercados analizados se reduce finalmente al hecho de que los mercados cambian, tanto en lo que respecta al movimiento, como en lo que respecta al carácter del propio movimiento. Se vuelven más dinámicos, menos predecibles y cambian a mayor velocidad. Los resultados obtenidos lo confirman: la proporción tendencia/flat se ha inclinado hacia el lado de los movimientos laterales, mientras que antes la tendencia era más notoria y obvia que a día de hoy.


Conclusiones

Los valores generales de todos los instrumentos simulados se han reunido en un recuadro para poder realizar comparaciones con mayor claridad.

Instrumento simulado Valor temporal medio de la tendencia, %
 EURUSD  62.54
 USDCHF  62.27
 USDJPY  63.05
 GBPUSD  60.68
 GOLD-6.17  59.55
 #MCD  59.71

Como se puede ver por la tabla dinámica: para las condiciones de simulación establecidas, el valor medio del mercado en el estado de tendencia alcanza cerca del 60%, además, en el segmento de la historia que discurre del pasado hacia el presente, la proporción tendencia/flat aumenta hacia el flat, aproximándose paulatinamente a la presuposición inicial de la proporción 30:70.

¿Qué indican nuestros resultados?

  • Los mercados se han vuelto más dinámicos, el cambio de fase entre tendencia y flat sucede con mayor frecuencia.
  • Las tendencias prolongadas han comenzado a disminuir su duración, y su movimiento tiene ahora un carácter menos marcado que antes.
  • Por consiguiente, la dinámica, los movimientos y las fases del mercado se han vuelto ahora un fenómeno más complejo.

Conclusión

Al final del artículo se adjuntan todos los archivos enumerados, clasificados por carpetas. Por eso, para que todo funcione correctamente, basta con colocar la carpeta MQL5 en la carpeta raíz del terminal. 

Programas usados en el artículo:

#
 Nombre
Tipo
Descripción
1
TrendCount.mq5 Experto
 Instrumento para realizar la simulación 
2
TrendCountUI.mqh Biblioteca  Clase de la interfaz de usuario
3 ColorBBCandles.mq5 Indicador  Indicador de fuerza y dirección de la tendencia basado en las franjas de Bollinger
4 percentageoftrend.mq5 Indicador  Indicador de cálculo del estado de tendencia/flat.
5 rsifilter.mq5 Indicador  Indicador RSI en forma de histograma con niveles establecidos de sobrecompra/sobreventa.
6 ZigZagTrendDetector.mq5  Indicador   Indicador para definir el estado del mercado con la ayuda del ZigZag estándar.


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

Archivos adjuntos |
MQL5.zip (1780.46 KB)
Pronóstico de los movimientos de mercado con la ayuda de la clasificación bayesiana e indicadores basados en el análisis espectral singular Pronóstico de los movimientos de mercado con la ayuda de la clasificación bayesiana e indicadores basados en el análisis espectral singular

En el artículo se analiza la ideología y la metodología de construcción de un sistema recomendatorio para el comercio operativo usando como base la combinación de las posibilidades de pronosticación con la ayuda del análisis espectral singular (AES) y un método importante de aprendizaje de máquinas basado en el teorema de Bayes.

Sistema comercial de DiNapoli Sistema comercial de DiNapoli

En el artículo se analiza un sistema comercial que usa los niveles de Fibonacci, desarrollado y descrito por Joe DiNapoli. También se explican los conceptos básicos y la esencia del sistema, ilustrado con el ejemplo de un sencillo indicador.

Interfaces gráficas X: Selección del texto en el campo de edición multilínea (build 13) Interfaces gráficas X: Selección del texto en el campo de edición multilínea (build 13)

En este artículo vamos a implementar la posibilidad de seleccionar el texto usando diferentes combinaciones de teclas y eliminar el texto seleccionado, de la misma manera como se hace en cualquier otro editor de texto. Además de eso, seguiremos optimizando el código y prepararemos las clases para el traspaso al proceso final de la segunda fase del desarrollo de la librería, cuando todos los controles estarán dibujados en las imágenes separadas (lienzos para el dibujado).

Clasificador bayesiano ingenuo para las señales de un conjunto de indicadores Clasificador bayesiano ingenuo para las señales de un conjunto de indicadores

En el artículo se analiza la aplicación de la fórmula bayesiana para aumentar la fiabilidad de los sistemas comerciales usando las señales de varios indicadores independientes. Los cálculos teóricos se comprueban con la ayuda de un sencillo experto universal, adaptable para trabajar con indicadores aleatorios.