English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
Qué podemos hacer con la ayuda de medias móviles

Qué podemos hacer con la ayuda de medias móviles

MetaTrader 5Ejemplos | 12 mayo 2022, 17:09
1 097 0
Oleh Fedorov
Oleh Fedorov

Introducción

Tengo varios sistemas comerciales de trabajo. Básicamente, no uso indicadores calculados en cada tick, solo líneas rectas. Sin embargo, a veces hay ideas que, como mínimo, mejoran la percepción del gráfico y, como máximo, cambian por completo nuestra idea sobre el trading, aunque al mismo tiempo requieran algunos cálculos.

En este artículo, he decidido recopilar algunas de estas ideas relacionadas con el indicador más común y fácil de entender: la media móvil (también conocido como promedio móvil o MA).

En el caso más simple, el valor del indicador se calcula usando la conocida fórmula de la media:

MA[i] = (Price[i]+Price[i+1]+...+Price[i+MAPeriod])/MAPeriod

Aquí MA[i] es el siguiente elemento de la secuencia, un punto en la curva. Price[i] es el precio en un momento dado, MAPeriod es el número de elementos para la media.

Está claro que el precio puede ser cualquiera: apertura, cierre, máximo, mínimo, promedio ponderado, etc. Un indicador estándar nos permite elegir tanto el precio al que debe calcularse como los métodos de cálculo, incluidos aquellos más complejos que la media simple... Al escribir los ejemplos, hemos dejado la posibilidad de seleccionar el método de cálculo, pero esto no resulta imprescindible para comprender la esencia de los métodos analizados. Todos los ejemplos funcionarán tanto al usar una media "simple" (SMA), como al utilizar una media exponencial (EMA), así como al usar otros métodos de cálculo. Por ello, en todas las figuras y en los ajustes por defecto, los indicadores tendrán SMA, y todos los indicadores usarán los precios de cierre, a menos que se indique lo contrario. Dejaremos los experimentos de mejora de estos parámetros al lector.

Si hablamos de una sola curva, generalmente usaremos el valor "predeterminado" del periodo: 10 barras. Si usamos varias curvas con diferentes periodos en un indicador, la mayoría de las veces serán 5 y 8. En este artículo, no usaremos más de dos curvas de diferentes periodos.

Los colores, respectivamente, serán los siguientes: rojo - rápida, naranja - lenta ... Si necesitamos usar algo más, se describirá claramente en el texto.


Indicador de plantilla

Para poder visualizar las señales obtenidas desde uno u otro punto de vista sobre las medias, hemos desarrollado varios indicadores. Estos se han hecho según una plantilla similar a MACD estándar, cuyo código se encuentra en los ejemplos estándar. Mostrar el código completo de la plantilla no parece adecuado.

En cada indicador, usaremos una o más medias móviles y, a veces, ATR para establecer la distancia hasta las flechas o dibujar las líneas de canal.

Algunas ideas son más fáciles de ilustrar si el indicador está en una ventana de gráfico, otras son más fáciles de ilustrar si el indicador está en una ventana aparte. Esto se logra utilizando una de las propiedades. Entonces, para el indicador en la ventana del gráfico, usaremos la propiedad

#property indicator_chart_window

Si el indicador se encuentra en una venta aparte, aplicaremos la propiedad

#property indicator_separate_window

En este caso, a veces estableceremos la altura de la ventana usando la propiedad

#property indicator_height 100

Está claro que la cifra puede cambiar.

Los nombres de los búferes deben terminar con el sufijo "Buffer". Entonces, por ejemplo, llamaremos a los búferes de flecha estándar ArrowDownBuffer y ArrowUpBuffer. Si el indicador dibuja líneas, el búfer se nombrará según el propósito de esta línea.

Cualquier variable global que definamos, si no es un búfer, tendrá un prefijo "ext", por ejemplo, extATRData es una variable global que contiene los datos sin procesar del indicador ATR.

Usaremos búferes sin cambiar al modo "serie".

Al inicializar, establecemos todos los valores vacíos en 0:

  PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);

Así, resultará que necesitamos mostrar solo las condiciones para la muestra de flechas o líneas, es decir, solo lo que queda en el ciclo principal.

Al mismo tiempo, sería preferible que el indicador no se redibuje de ser posible, por lo que dibujaremos en una vela cero, sin embargo, utilizaremos para los cálculos los datos de las velas que ya han cerrado.


Cruce de la línea por parte del precio (dirección de la tendencia)

En el caso más simple, las líneas de MA se usan solas, en su forma "natural". Creo que todos los lectores han visto una imagen similar en sus monitores:

MA "pura"

Figura 1. Media móvil simple.

La mayoría de las veces, la propiedad MA se usa para seguir la tendencia. En particular, una tendencia se puede definir como un conjunto de velas japonesas que se encuentran en el mismo lado de la curva. Por ejemplo, si más de dos velas han cerrado por debajo de la línea, la tendencia será bajista y, en consecuencia, solo se deberán considerar transacciones de venta. Si los precios de cierre están por encima de la curva, la tendencia será alcista, por lo que, en consecuencia, solo compraremos... Está claro que si el precio rompe la curva, la tendencia se invertirá.

Las condiciones que permiten monitorear la ruptura de la media pueden ser, por ejemplo, las siguientes:

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      ((close[i-1]<extMAData[i-1]
        && open[i-1]>extMAData[i-1]
       )
       ||(close[i-2]>extMAData[i-2]
          && open[i-2]>extMAData[i-2]
          && close[i-1]<extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
      )

    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        ((close[i-1]>extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
         ||(close[i-2]<extMAData[i-2]
            && open[i-2]<extMAData[i-2]
            && close[i-1]>extMAData[i-1]
            && open[i-1]>extMAData[i-1]
           )
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // main cycle

Notemos que podemos no comprobar los precios de apertura, considerando solo los precios de cierre de la barra actual y la anterior. Si se encuentran en lados opuestos de la curva, registraremos la ruptura.

El archivo del indicador se llama MA-Breaking.mq5. Y su ejecución en el gráfico ofrecerá la siguiente imagen (para un periodo de curva estándar de 10 barras):

MA — ruptura

Figura 2. Ruptura de la media

En nuestra opinión, sin filtrado adicional, este método no resulta muy útil. En la imagen, parece que el número de flechas hacia arriba es casi el mismo que el número de flechas hacia abajo, incluso en el área de tendencia clara. Si aumentamos el periodo de MA, el número de flechas disminuirá, pero la utilidad de ello no será mucho mayor, ya que una ruptura brusca con una tendencia sin retroceso no es algo que suceda muy a menudo; con mucha mayor frecuencia, antes de un movimiento brusco, aparece un movimiento lateral. Por eso, vamos a buscar filtros...


MA como línea de apoyo/resistencia

La segunda forma obvia en que podemos usar una curva es asignarle un nivel de apoyo/resistencia. Si el precio ha tocado la línea, pero no la ha cruzado (ha cerrado en el mismo lado), tendremos una señal comercial. Por ejemplo, si usamos esta regla, para el 17 de febrero podemos ver 3 puntos de entrada hacia abajo y, posiblemente, si no hay filtros adicionales, un punto hacia arriba (al principio).

Está claro que esta regla se puede usar tanto para entrar en la primera transacción como para añadir a una existente.

El archivo de indicador que demuestra este principio de funcionamiento se llama MA-Support.mq5.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      (high[i-1]>=extMAData[i-1]
       && close[i-1]<extMAData[i-1]
       && open[i-1]<extMAData[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }

    else
      if(
        (low[i-1]<=extMAData[i-1]
         && close[i-1]>extMAData[i-1]
         && open[i-1]>extMAData[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // Main cycle end

Aquí tenemos el resultado del funcionamiento de este código:

MA como línea de apoyo/resistencia

Figura 3. Uso de la MA como línea de apoyo/resistencia

Se ve mucho mejor que la opción anterior, y si usamos niveles de take profit o simplemente acumulamos órdenes en las flechas y salimos en la dirección opuesta a la flecha (usando la reversión, probablemente), resultará bastante probable que haya una transacción rentable.

Y una cosa más obvia: cuanto más largo sea el periodo de MA, más plano resultará y más lejos se encontrará del precio, respectivamente. Asimismo, las señales tanto de ruptura como de rebote serán menos frecuentes; sin embargo, digamos, como apoyo/resistencia, tendrá una influencia más fuerte. A modo de comparación, mostraremos otro gráfico, un gráfico de 20 periodos. Podemos ver que los toques (rebote) ocurren con menos frecuencia, sin embargo, quizás estas señales sean más fiables y podamos establecer un stop más corto.

MA como apoyo/resistencia (periodo aumentado)

Figura 4. Media con un periodo largo (20)

Por ejemplo, el 17 de febrero a las 4 en punto, podemos ver que la curva roja dará una señal de compra y sufriremos pérdidas, mientras que la curva naranja dará una señal de venta. Pero por otro lado, en rojo, podemos usar las señales a las 8, a las 10 ya las 15, incrementando la posición.

Está claro que con periodos largos de MA, las señales llegarán más tarde, lo cual puede provocar la pérdida de parte de los beneficios, pero esto a veces también puede salvarnos de transacciones demasiado frecuentes.


Inclinación

Cuanto más pronunciada sea la inclinación de la línea, más rápido subirá el precio y más probable será que la tendencia continúe en la siguiente vela.

Para medir la inclinación, la forma más sencilla es usar la diferencia entre los valores actuales y anteriores. Si esta diferencia es positiva, la curva ascenderá, si es negativa, descenderá.

El código del ciclo principal en el archivo MA-Slope.mq5 tiene este aspecto:

//--- main cycle
  for(i=start+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]);

    //---

    if(
      slopeIndex<0

    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

Aquí SlopeShift indica cuántas barras hay que retirarse respecto al precio actual. El valor por defecto es uno, sin embargo, podemos obtener resultados interesantes aumentando este valor, por ejemplo, tomando la diferencia de los valores de MA después de dos o tres barras.

La curva resultante parece más clara representada como un histograma. El resultado se muestra en la siguiente figura:

МА — histograma de la inclinación

Figura 5. Histograma que muestra la inclinación de la curva

En nuestra opinión, aquí hay una imagen bastante interesante.

Primero, se ve que podemos rastrear fácilmente (y, en consecuencia, filtrar) las fluctuaciones aleatorias en el movimiento. De hecho, si la dirección de la curva cambia en solo una o tres barras, probablemente resulte prematuro hablar de un cambio de tendencia. Aunque, por supuesto, esto nos indica que debemos tener mucho cuidado de no perdernos un eventual cambio de tendencia.

En segundo lugar, los cambios de velocidad se ven de inmediato. Podemos ver que si la altura de la columna del gráfico es inferior a un cierto valor, lo más probable es que hayamos encontrado un movimiento plano y, en consecuencia, no valdrá la pena comerciar en la dirección que muestra la pequeña inclinación de la media móvil, al menos, no más de 2-3 barras.

En tercer lugar, se nota que, a pesar de que la curva en las secciones de tendencia parece crecer o caer casi de forma monótona, la velocidad real de cambio varía mucho de una barra a otra. Esto sugiere algún tipo de valor relativo, que probablemente ayudará a ver algo oculto.

Vamos a probar (МА-Slope-Index-First.mq5)... Código:

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<0
    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

La adición de un valor pequeño (Point()/100) al dividendo y al divisor no cambia mucho el resultado, pero evita el error de división por 0.

La imagen se ve así:

MA — Inclinación relativa

Figura 6. Índice relativo de inclinación de la media

En el cruce de las direcciones han aparecido picos afilados. Además, si movemos el gráfico un par de barras hacia la izquierda, la diferencia será aún más notable.

МА — índice relativo desplazado a la izquierda

Figura 7. Índice relativo de inclinación de la media (desplazado a la izquierda)

La imagen 7 muestra muy claramente cómo los picos marcan los límites de un movimiento bastante grande. Y la diferencia entre los valores de pico y el resto del conjunto de datos es bastante grande. Tanto el hecho de que el tamaño de los "picos" difiera entre sí en tal magnitud, como el hecho de que la diferencia entre los picos y el resto de los datos sea tan grande, nos empuja a realizar el siguiente paso. Como el cambio de dirección es tan claro, no vemos mucho sentido en mirar los histogramas del índice de inclinación relativa como tal. Simplemente podemos hacer la salida más "basta" aún haciéndola binaria. Por ejemplo, así (MA-Slope-Index-Bin.mq5):

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<=-SlopeThreshold
    )
     {
      SlopeDownBuffer[i]=-1;
     }
    else
      if(
        slopeIndex>=SlopeThreshold
      )
       {
        SlopeUpBuffer[i]=1;
       }
   } // Main cycle


Aquí SlopeThreshold es el valor de umbral de la altura de la barra del gráfico anterior en el que se genera la señal. En la imagen, el valor de este parámetro es 5.

Inclinación relativa de МА — variante binaria

Figura 8. Índice relativo de inclinación de la media — variación binaria. SlopeThreshold=5.

Y una imagen más, donde SlopeThreshold=15

Índice de inclinación relativa, SlopeThreshold=15

Figura 9. Índice de inclinación relativa de la media — versión binaria. SlopeThreshold=15.

¡Definitivamente estas franjas merecen un vistazo más cercano!

Parece que la aparición de dichos marcadores indica un cambio en la dirección de la vela actual o de 2-3 o más velas después de la vela marcada. En cualquier caso, existe una clara dependencia de la tendencia respecto a la combinación de colores del marcador, la dirección principal y la vela real. Obviamente, debemos calcular las estadísticas, por ejemplo, como describimos en el artículo sobre recuadros electrónicos, sin embargo, en combinación con el resto de los métodos ya presentados aquí, este indicador ya parece prometedor...

Parece claro que las barras binarias en el histograma se pueden reemplazar fácilmente por flechas, por analogía con los indicadores anteriores.


Canales basados ​​en una única media móvil

Para considerar la volatilidad de los movimientos de precio, además de los métodos descritos anteriormente, podemos crear canales basados ​​en medias móviles. Hay muchas variantes de construcción, pero analizaremos solo dos.

La primera variante es muy sencilla, ya que no requiere nada más que el indicador MA estándar. Debemos agregar los niveles justo al añadir un indicador al gráfico. El único "pero" es que para cada intervalo de tiempo estos niveles deberían ser diferentes. Para no introducir estos niveles cada vez que cambiemos el intervalo, los hemos recopilado en un solo "paquete". Para el yen japonés, el resultado será el siguiente:

Simple channel — MA

Figura 10. Lista de niveles de los canales

La imagen final en el reloj se ve así:

Canal de niveles

Figura 11. Aspecto de los niveles (H1)

En este caso, los niveles están configurados para rebotar. Es decir, si la vela ha tocado el nivel y ha rebotado (o se ha acercado lo suficiente), entraremos en contra de la tendencia. Entonces, este canal mostrará que el 22 de febrero era necesario entrar en ventas. La orden puede colocarse en mitad de la vela de señal o al final de la misma (en este caso, si la entrada es de rebote, la orden podría colocarse en el mínimo de la vela de señal, en el área de 115.100, y el stop podría encontrarse en la zona de 115.265). El objetivo mínimo es el contacto con la media. El objetivo máximo es el contacto con el borde opuesto del mismo canal.

Sin embargo, en este caso, se podría jugar con la ruptura de un canal estrecho. Por ejemplo, el 22 de febrero, la vela de 9 horas cerró por encima del límite del canal estrecho. Al mismo tiempo, las dos velas dirigidas hacia arriba cerraron por encima de la media y la vela negra entre ellas no pasó del borde inferior. Y al mismo tiempo, la inclinación de la MA disminuye claramente (si miramos el gráfico con la MA-Slope configurada, esto se verá bastante claro) Todo esto junto bien puede suponer una señal de compra. Stop — por ejemplo, en el área de 114.570. El punto de salida puede calcularse usando niveles, digamos, colocándolo en el área de 115.230, o bien tendiendo un trailing a través de las velas, o usando cualquier otro método que nos guste.

Tenga en cuenta que solo dos canales son visibles en este periodo: el más interno y el que es un poco más grande. Si cambiamos a un marco superior, digamos, a D1, el canal en +-50 prácticamente desaparecerá, pero los canales en +-300 y +-1500 pueden estar funcionando. Al mismo tiempo, el canal mensual a veces puede ser visible, e incluso puede dar señales a alguien, pero los principales seguirán siendo los que mejor se vean.

Múltiples canales (D1)

Figura 12. Aspecto de los niveles (D1)

Una imagen similar será visible en la escala semanal/mensual. El cuarto canal está construido específicamente para ellos y el tercero puede ser un auxiliar interno.

El canal más interno se ajusta a M1-M15.

El principio del ajuste es obvio: cambiamos al marco deseado y seleccionamos el tamaño de los niveles de tal forma que haya un número mínimo de puntos de contacto, pero al mismo tiempo exista el rango máximo posible entre los puntos. La forma más fácil de hacer esto es medir el rango de una corrección significativa en un intervalo de tiempo dado y luego dividir este rango por 2. La siguiente animación ilustra este proceso.

Medición del tamaño del canal

Figura 13. Midiendo la volatilidad del canal (D1)

Después de realizar una estimación aproximada, es posible que debamos ajustar las dimensiones con mayor precisión, pero esto no es nada difícil...


Canales basados ​​en dos medias (ATR3x5)

Los canales anteriores son buenos, pero tienen un par de inconvenientes.

El primero es que para cada intervalo temporal y para cada símbolo, resulta necesario seleccionar manualmente los tamaños de los canales. Probablemente sea posible automatizar el proceso, pero será difícil.

El segundo inconveniente es que los niveles no se almacenan en búferes, por lo que utilizarlos programáticamente no resultará una tarea trivial.

El canal basado en medias móviles y ATR no tiene estas deficiencias. La esencia es simple: tomamos dos indicadores de medias móviles con un periodo de 3. Aplicamos uno a los máximos (high) y otro a los mínimos (low). Y desplazamos las líneas resultantes a una distancia de 5 periodos de ATR en la dirección correspondiente (inferior — abajo, superior — arriba).

¡Eso es todo, el canal está listo! Se adapta a la perfección a cualquier instrumento, y trabaja principalmente sobre el rebote, ya que las rupturas son extremadamente raras. En nuestra implementación, hemos adjuntado flechas que muestran el contacto con las paredes del canal.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    MAUpBuffer[i]=extMAUpData[i]+extATRData[i]*DistanceCoefficient;
    MADownBuffer[i]=extMADownData[i]-extATRData[i]*DistanceCoefficient;

    if(
      (high[i-1]>=MAUpBuffer[i-1]
       && close[i-1]<MAUpBuffer[i-1])
      ||(
        close[i-2]>MAUpBuffer[i-2]
        && close[i-1]<MAUpBuffer[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        (low[i-1]<=MADownBuffer[i-1]
         && close[i-1]>MADownBuffer[i-1])
        ||(
          close[i-2]<MADownBuffer[i-2]
          &&close[i-1]>MADownBuffer[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   }// main cycle

Aquí DistanceCoefficient es un parámetro de indicador que nos permite cambiar la distancia hasta las paredes del canal, si lo necesitamos, ajustando para ello el indicador a las condiciones específicas. Puede ser cualquier número fraccionario, pero, por regla general, no tiene sentido establecer más de 2, ya que en este caso las flechas desaparecen casi por completo, y, por lo tanto, no hay transacciones.

Canal ART3x5

Figura 14. Canal ATR3x5

Está claro que, de ser necesario, podemos combinar este indicador con cualquier otro presentado en este análisis (también es posible con los que no se han presentado).

Al mirar la imagen, recomendamos prestar atención a la interacción del precio con los picos y valles del indicador. Aunque, obviamente, esto no es necesario en absoluto, tal vez ayude a alguien de alguna manera.


Varios indicadores con diferentes periodos

Ya hemos analizado cómo podemos usar una sola línea de media móvil para generar señales de mercado de compra o venta. Sin embargo, algunas personas creen que añadiendo uno o más indicadores con diferentes periodos pueden aumentar significativamente la precisión de la entrada.

Bien, vamos a crear un gráfico que muestre dos curvas con periodos de 5 y 8 barras. Los periodos se toman de manera bastante arbitraria, en este caso, de la serie de Fibonacci. Es importante que sean diferentes, describiendo una línea "rápida" y otra "lenta".

Dos medias móviles de forma simultánea

Figura 15. Dos medias móviles en un gráfico

A esas posibilidades que ya hemos explorado, se suma la posibilidad de observar la disposición mutua de las curvas, su codirección (o, por el contrario, la divergencia de sus direcciones). También aparece la distancia entre MA.

Cada uno de estos parámetros puede reforzar o debilitar algunas de las señales de movimiento que muestra cada una de las curvas, así como dar señales de entrada independientes.


Disposición mutua. Intersección de medias

Si la media móvil rápida está por encima de la media móvil lenta, lo más probable es que estemos en una tendencia alcista y que la próxima vela sea alta. Se entiende que también deberemos tener en cuenta otros parámetros, por ejemplo, la inclinación de la línea de señal y todos los demás parámetros.

En consecuencia, si la rápida está por debajo de la lenta, lo más probable es que estemos observando una tendencia bajista "global" durante un intervalo de tiempo determinado, y la probabilidad de que cada próxima vela sea descendente aumenta considerablemente hasta que alcancemos el pico...

Está claro que desde este punto de vista, podemos hablar de un cambio de tendencia cuando la media rápida rompe la media lenta.

Vamos a intentar escribir un indicador que reaccione al cruce de medias, teniendo directamente en cuenta los movimientos laterales para que haya menos entradas falsas. Esto se puede hacer, por ejemplo, considerando la magnitud de la inclinación de la media rápida. Luego podemos obtener el siguiente código para buscar señales (MA2-Breaking):

//--- main cycle
  for(i=start+3+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      extMAFastData[i-1]<extMASlowData[i-1]
      && extMAFastData[i-2]>=extMASlowData[i-2]
      && MASlope(extMAFastData,i-1)<-SlopeThreshold
      && MASlope(extMASlowData,i-1)<SlopeThreshold/SlowDelimiter
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/3;
     }
    else
      if(
        extMAFastData[i-1]>extMASlowData[i-1]
        && extMAFastData[i-2]<=extMASlowData[i-2]
        && MASlope(extMAFastData,i-1)>SlopeThreshold
        && MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/3;
       }
   } // main cycle

Aquí, MASlope es una función que calcula la inclinación de la media, similar al ejemplo de la sección "Inclinación". Como parámetros, toma una matriz de datos para la curva deseada y el número de la barra sobre la que se realizan los cálculos.

SlopeTreshold: tamaño del umbral de la barra del gráfico de inclinación de la media rápida. No olvidemos que si la inclinación de la media rápida en el momento del cruce es demasiado pequeña, lo más probable es que estemos ante un movimiento lateral, y en esa situación habrá demasiados falsos positivos (por lo que la transacción será cuanto menos no rentable, o como máximo, dará pérdidas considerables).

SlowDelimiter — divisor del umbral de inclinación de la media lenta. A veces hay una muy buena señal cuando la media rápida ya está inclinada hacia abajo, mientras que la lenta aún no se ha revertido, pero ya está camino de ello. Es decir, la entrada

MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter

significa lo siguiente: la inclación de la media lenta puede ser apenas negativa (hacia abajo, pero no mucho), o cero; o bien positiva, pero en ningún caso muy negativa.

Si este indicador se utiliza en su forma "pura", los parámetros de umbral y el divisor deben seleccionarse para cada instrumento y cada marco temporal por separado. Entonces, para USDJPY, en el intervalo de tiempo H1 con los valores de SlopeTreshold=0.017 y SlowDelimiter=5, ha sucedido lo siguiente:

Señales de cruce de MA con inclinación

Figura 16. Señales de cruce de las medias teniendo en cuenta la inclinación

En esta imagen, se han eliminado las curvas para que resulte más fácil percibir la imagen completa de las flechas. Se puede ver que si seleccionamos el tamaño correcto de take profit (o salimos según los niveles), podemos obtener beneficios de casi todas las flechas al establecer paradas no demasiado ruinosas.

Otra imagen más: el mismo gráfico visto más de cerca (a escala mayor).

Cruce de medias (aproximadamente)

Figura 17. Cruce de medias teniendo en cuenta la inclinación (aproximadamente)

Recordemos que la señal se activa en la vela cero, pero se analiza el intervalo anterior. En consecuencia, para comprender por qué se dibuja la flecha, deberemos observar el intervalo desde la línea verde hasta la barra que la sigue a la izquierda.

¿Por qué no se dibujan dos flechas a la derecha? La inclinación no supera el umbral para una media lenta o rápida, y el indicador ha considerado que esta intervalo era movimiento lateral. Sin embargo, si hubieramos comerciado en esta área con estas señales, lo más probable es que no hubiera quejas al respecto, porque la tendencia realmente subió más y permitió vender a un mejor precio.

Cruce de medias — continuación de la tendencia

Iamgen 18. Señales de cruce: continuación de la tendencia.


Conclusión

Nos detendremos aquí. Todavía tenemos algo que decir al respecto, pero quizás sea en otro artículo.

En este artículo, hemos analizado cosas simples y obvias relacionadas con las medias móviles que nos permiten rastrear la dirección general del movimiento del precio.

Asimismo, hemos adjuntado códigos de indicadores que muestran gráficamente el uso de los principales parámetros de las medias para tomar decisiones comerciales.

También hemos mostrado cómo podemos mejorar una estrategia comercial combinando las propiedades de indicadores conocidos y usándolas de forma conjunta.

Si tenemos tiempo, en el próximo artículo intentaremos contarle al lector cómo puede calcular la posición de cada vela en concreto, usando como base para ello la información de las medias móviles y los indicadores derivados de ellas.

Bueno, y como suele decirse, el artículo se ha escrito con esperanza, pero sin ofrecer garantías. Esperamos que los materiales ofrecidos en el artículo le sean útiles; no obstante, no podemos garantizar que estos funcionen en su caso particular.

Ojalá que los beneficios y la suerte le acompaen.

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

Archivos adjuntos |
jx-Breaking.mq5 (5.56 KB)
h9-Support.mq5 (5.22 KB)
lw-Slope.mq5 (4.66 KB)
ATR3x5.mq5 (7.34 KB)
wr2-Crossing.mq5 (6.5 KB)
Desarrollando un EA comercial desde cero (Parte 07): Adición de el Volume At Price (I) Desarrollando un EA comercial desde cero (Parte 07): Adición de el Volume At Price (I)
Este es uno de los indicadores más poderosos que existen. Para aquellos que operan y tratan de tener un cierto grado de asertividad, no pueden dejar de tener este indicador en su gráfico, aunque es más utilizado por aquellos que operan observando el flujo («tape reading») también puede ser utilizado por aquellos que utilizan sólo la acción del precio.
Múltiples indicadores en un gráfico (Parte 06): Convirtamos el MetaTrader 5 en un sistema RAD (II) Múltiples indicadores en un gráfico (Parte 06): Convirtamos el MetaTrader 5 en un sistema RAD (II)
En el artículo anterior mostré cómo crear un Chart Trade utilizando los objetos de MetaTrader 5, por medio de la conversión de la plataforma en un sistema RAD. El sistema funciona muy bien, y creo que muchos han pensado en crear una librería para tener cada vez más funcionalidades en el sistema propuesto, y así lograr desarrollar un EA que sea más intuitivo a la vez que tenga una interfaz más agradable y sencilla de utilizar.
Desarrollando un EA comercial desde cero (Parte 08): Un salto conceptual (I) Desarrollando un EA comercial desde cero (Parte 08): Un salto conceptual (I)
¿Cómo implementar una nueva funcionalidad de la forma más sencilla posible? Aquí daremos un paso atrás y luego daremos dos pasos adelante.
Consejos de un programador profesional (Parte III): Registro Conexión al sistema de recopilación y análisis de logs Seq Consejos de un programador profesional (Parte III): Registro Conexión al sistema de recopilación y análisis de logs Seq
Implementación de la clase Logger para unificar (estructurar) los mensajes mostrados en el diario del experto. Conexión al sistema de recopilación y análisis de logs Seq. Supervisión de los mensajes en el modo online.