English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Cómo desarrollar sistemas basados ​​en medias móviles

Cómo desarrollar sistemas basados ​​en medias móviles

MetaTrader 5Trading | 18 marzo 2022, 14:02
2 583 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Creo que, independientemente de la experiencia, muchos lectores probablemente hayan escuchado la frase "Trend is your friend" (la tendencia es tu amiga). Si aún no lo ha hecho, le explico. En el mercado pueden formarse diferentes direcciones de movimiento de precios o tendencias.

  • Tendencia alcista: durante este movimiento, el precio forma mínimos y máximos más altos.
  • Tendencia bajista: es la tendencia opuesta a la alcista, en ella, el precio forma mínimos y máximos más bajos.
  • Movimiento lateral: cualquier movimiento que no se pueda atribuir ni a una tendencia alcista ni a una bajista.

Las siguientes figuras muestran los gráficos de una tendencia alcista y una tendencia bajista:

Tendencia alcista

Tendencia bajista

Ya hemos descubierto qué es una tendencia, pero ¿por qué las tendencias son nuestras amigas?

A continuación, hablaremos solo de tendencias alcistas y bajistas, puesto que estas muestran un movimiento alcista o bajista claramente definido. Podemos ver quién domina el mercado y mueve los precios ahora. Durante una tendencia alcista, el mercado está dominado por compradores que elevan los precios independientemente de la oferta; dicho mercado se denomina mercado alcista. Por el contrario, en una tendencia bajista, el mercado se ve más influenciado por los vendedores que empujan los precios a la baja. Este mercado se llama bajista.

No obstante, en el mercado podemos ver a veces un movimiento de diente de sierra con reversiones y rupturas falsas. Estas rupturas falsas pueden causar mucho daño. A continuación, veremos exactamente cómo pueden resultar dañinas, pero primero, vamos a averiguar qué significa una ruptura falsa.

Entendemos por ruptura falsa la situación en la que se activa una señal para una determinada acción, realizamos esta acción y luego la situación se desarrolla en la dirección opuesta. Y, claro está, el resultado de tales acciones es negativo. Hay diferentes formas de filtrar estas rupturas falsas. Una de ellas es utilizar medias móviles. Precisamente de esto vamos a hablar en el presente artículo: aprenderemos a utilizar estrategias basadas en medias móviles y desarrollaremos sistemas automáticos de trading algorítmico en los que trabajar con medias móviles será más cómodo, sencillo y preciso.

En este artículo, abarcaremos los siguientes temas:

Nota. Todo el contenido de este artículo tiene fines exclusivamente ilustrativos, y no está destinado a otros cometidos. Cualquier acción que el lector emprenda usando como base este artículo, la realizará bajo su propia responsabilidad: el autor no garantiza ningún resultado. En cualquier caso, cualquier estrategia debe probarse y optimizarse cuidadosamente. Una vez más, el artículo y los ejemplos que contiene se ofrecen únicamente con fines informativos e ilustrativos.

Escribiremos todos los códigos en MQL5 y los probaremos en la plataforma MetaTrader 5.

Hay muchas formas diferentes de filtrar las señales generadas por cualquier estrategia. Probablemente la más simple de ellas sea el uso de una media móvil. Precisamente de ella hablaremos en este artículo. Vamos a analizar estrategias basadas en medias móviles y aprender a escribir una estrategia comercial algorítmica. El propósito del artículo es enseñar a los lectores cómo crear sus propios sistemas de comercio automático.


Definición de la media móvil


El indicador de media móvil es muy común en el análisis técnico. Se calcula como el valor medio del precio durante un cierto periodo temporal. El indicador suaviza los datos de precios y reduce la influencia de los movimientos y fluctuaciones aleatorios a corto plazo sobre el gráfico.

Hay diferentes tipos de medias móviles. La principal diferencia radica en el método de cálculo, pero hablaremos de ello en el siguiente apartado. Por ahora, bastará con comprender que hay muchos tipos diferentes, y que podemos usar distintas opciones de cálculo para obtener los mejores resultados en situaciones específicas.

La media móvil es un indicador de tendencia basado en el análisis de precios. Es decir, si el precio se mueve en cierta dirección, la media móvil seguirá al precio en esa misma dirección.

Se trata de un indicador rezagado, ya que sigue el precio, es decir, primero aparece el precio, y usando como base el valor de este, se calcula la media. Sin el valor del precio, no habrá nada que calcular.

Según la naturaleza de la media móvil, podemos determinar que este indicador:

  • Muestra el valor promedio
  • Funciona mejor en un mercado de tendencia
  • Confirma una tendencia y ayuda a identificarla
  • Elimina el ruido del movimiento de precios.
  • Ayuda a identificar las rupturas falsas
  • Y mucho más…

Tipos de media móvil


Hay muchos tipos diferentes de medias móviles. Los más comunes son:

  • Media móvil simple
  • Media móvil ponderada
  • Media móvil exponencial

La principal diferencia entre ellas radica en los métodos de cálculo.

A continuación, veremos cada uno de estos tipos y aprendaremos a usarlos en MQL5.

Media móvil simple:

Este es el tipo más simple de media móvil, y con frecuencia se lo conoce como SMA (Simple Moving Average).

Se calcula como la media aritmética de un determinado conjunto de valores durante el periodo temporal seleccionado. Es decir, se suman los valores de un cierto número de precios, y luego el resultado se divide por este número.

SMA

Como ejemplo, tomaremos cinco días comerciales. Los precios de cierre de estos días eran los siguientes:

  • Día 1 = 10
  • Día 2 = 15
  • Día 3 = 20
  • Día 4 = 30
  • Día 5 = 35

El valor de SMA para estos cinco días se calcula así:


SMA example

Media móvil ponderada

La media móvil ponderada (Weighted Moving Average, WMA) también muestra el valor del precio promedio para el periodo seleccionado, pero se le otorga mayor peso a los datos más recientes. Es decir, si calculamos la WMA para 10 días, todos estos datos de precios tendrán diferentes pesos, y los datos posteriores tendrán mayor peso.

La media móvil ponderada se calcula usando la fórmula siguiente:

WMA


Ejemplo:

Vamos a tomar los mismos 5 días comerciales con los mismos precios de cierre:

  • Día 1 = 10
  • Día 2 = 15
  • Día 3 = 20
  • Día 4 = 30
  • Día 5 = 35

La media móvil ponderada para estos cinco días se puede calcular usando la fórmula:

Ejemplo WMA


Ejemplo WMA


Media móvil exponencial

La media móvil exponencial, se conoce por Exponential Moving Average o EMA. Una característica de este tipo de media móvil es que el cálculo también considera el periodo anterior al periodo calculado. Es decir, al calcular el valor promedio de 10 días, también se tendrá en cuenta el periodo anterior.

La WMA se calcula usando la fórmula siguiente:

Primero, calculamos K (el exponente para calcular el peso del intervalo) y n (el número de intervalos):

EMA

Después,

EMA

Ejemplo:

Vamos a tomar los mismos 5 días comerciales con los mismos precios de cierre:

  • Día 1 = 10
  • Día 2 = 15
  • Día 3 = 20
  • Día 4 = 30
  • Día 5 = 35
  • Día 6 = 40

La media EMA de los cinco días se calcula así:

Ejemplo de EMA


Ejemplo de EMA

Tenga en cuenta que el primer día de cálculo de la media móvil exponencial es el día 6, mientras que los cinco días anteriores se han calculado en la media simple (22).


Ya nos hemos familiariazado con la definición de la media móvil y sus tipos. Ahora, vamos a pasar a la parte más interesante: hablaremos de las estrategias basadas en medias móviles y aprenderemos a crear sistemas comerciales algorítmicos basados ​​en ellas.


Estrategia 1: cruce con una media móvil

En los ejemplos de este artículo, trabajaremos con una media móvil simple (SMA), no obstante, podremos elegir cualquier tipo de media que convenga a nuestro código.

En esta estrategia, comprobaremos en cada tick el cruce del precio y la SMA:

  • Precio > SMA: señal de compra, mostraremos esta señal como comentario en el gráfico.
  • Precio < SMA: señal de venta, mostraremos esta señal como comentario en el gráfico.
  • En todos los demás casos, no haremos nada.

La siguiente imagen muestra cómo funciona esta estrategia basada en el cruce de una media móvil:

1MA Blueprint


El código de la estrategia tendrá el aspecto que sigue:

//+------------------------------------------------------------------+
//|                                            One SMA crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //create an array for price
   double myMovingAverageArray1[];
   
   //define Ask, Bid
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   //define the properties of  MAs - simple MA 24
   int movingAverage1 = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   
   //sort the price arrays current candle
   ArraySetAsSeries(myMovingAverageArray1,true);
   
   //Defined MA - one line - currentcandle, 3 candles - store result
   CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1);
   
   //Check if we have a buy entry signal
   if (
      (Ask>myMovingAverageArray1[0])
      )
         {
         Comment("BUY");
         }
    
   //check if we have a sell entry signal      
   if (
      (Bid<myMovingAverageArray1[0])
      )
         {
         Comment("SELL");
         }          
  }
//+------------------------------------------------------------------+


Después de iniciar la estrategia, se generarán las siguientes señales en el gráfico:

1MA - señal de compra

1MA - señal de venta

Estrategia 2: cruce de dos medias móviles

En esta estrategia, usaremos dos medias móviles. El periodo de la media móvil corta será 24, y el de la media móvil larga, 50.

De acuerdo con esta estrategia, comprobaremos en cada tick la posición de las dos medias móviles:

  • La SMA con un periodo de 24 > la SMA con un periodo de 50: señal de compra, mostraremos esta señal como un comentario en el gráfico.
  • La SMA con un periodo de 24 < la SMA con un periodo de 50: señal de venta, mostraremos esta señal como un comentario en el gráfico.
  • En todos los demás casos, no haremos nada.

La siguiente imagen muestra cómo funciona esta estrategia basada en dos medias móviles simples:

2MA Blueprint


El código de la estrategia tendrá el aspecto que sigue:

//+------------------------------------------------------------------+
//|                                            Two SMA crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //create an array for price
   double myMovingAverageArray1[], myMovingAverageArray2[];
   
   //define the properties of  MAs - simple MA, 1st 24 / 2nd 50
   int movingAverage1 = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int movingAverage2 = iMA(_Symbol,_Period,50,0,MODE_SMA,PRICE_CLOSE);
   
   //sort the price arrays 1, 2 from current candle
   ArraySetAsSeries(myMovingAverageArray1,true);
   ArraySetAsSeries(myMovingAverageArray2,true);
   
   //Defined MA1, MA2 - one line - currentcandle, 3 candles - store result
   CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1);
   CopyBuffer(movingAverage2,0,0,3,myMovingAverageArray2);
   
   //Check if we have a buy entry signal
   if (
      (myMovingAverageArray1[0]>myMovingAverageArray2[0])
   && (myMovingAverageArray1[1]<myMovingAverageArray2[1])
      )
         {
         Comment("BUY");
         }
    
   //check if we have a sell entry signal      
   if (
      (myMovingAverageArray1[0]<myMovingAverageArray2[0])
   && (myMovingAverageArray1[1]>myMovingAverageArray2[1])
      )
         {
         Comment("SELL");
         }          
  }
//+------------------------------------------------------------------+


Después de iniciar la estrategia, se generarán las siguientes señales en el gráfico:

2MA - señal de compra


2MA - señal de venta


Estrategia 3: cruce de tres medias móviles

En esta estrategia, usaremos tres medias móviles: una corta con un periodo de 10, una mediana con un periodo de 24, y una larga con un periodo de 48.

De acuerdo con esta estrategia, comprobaremos en cada tick la posición de las tres medias móviles:

  • Si la SMA 10 > la SMA 24, la SMA 10 > la SMA 48 y la SMA 24 > la SMA 48, esto supondrá una señal de compra, y mostraremos el comentario correspondiente en el gráfico.
  • Si la SMA 10 < la SMA 24, la SMA 10 < la SMA 48 y la SMA 24 < la SMA 48, esto supondrá una señal de venta, y mostraremos el comentario correspondiente en el gráfico.
  • En todos los demás casos, no haremos nada.

La siguiente imagen muestra cómo funciona esta estrategia basada en tres medias móviles simples:

3MA Blueprint


El código de la estrategia tendrá el aspecto que sigue:

//+------------------------------------------------------------------+
//|                                          Three SMA crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //create an array for price
   double myMovingAverageArray1[], myMovingAverageArray2[],myMovingAverageArray3[];
   
   //define the properties of  MAs - simple MA, 1st 10 / 2nd 24, 3rd 48
   int movingAverage1 = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int movingAverage2 = iMA(_Symbol,_Period,24,0,MODE_SMA,PRICE_CLOSE);
   int movingAverage3 = iMA(_Symbol,_Period,48,0,MODE_SMA,PRICE_CLOSE);
   
   //sort the price arrays 1, 2, 3 from current candle
   ArraySetAsSeries(myMovingAverageArray1,true);
   ArraySetAsSeries(myMovingAverageArray2,true);
   ArraySetAsSeries(myMovingAverageArray3,true);
   
   //Defined MA1, MA2, MA3 - one line - currentcandle, 3 candles - store result
   CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1);
   CopyBuffer(movingAverage2,0,0,3,myMovingAverageArray2);
   CopyBuffer(movingAverage3,0,0,3,myMovingAverageArray3);
   
   //Check if we have a buy entry signal
   if (
      (myMovingAverageArray1[0]>myMovingAverageArray2[0])
   && (myMovingAverageArray1[1]<myMovingAverageArray2[1])
   && (myMovingAverageArray1[0]>myMovingAverageArray3[0])
   && (myMovingAverageArray1[1]<myMovingAverageArray3[1])
   && (myMovingAverageArray2[0]>myMovingAverageArray3[0])
   && (myMovingAverageArray2[1]<myMovingAverageArray3[1])
      )
         {
         Comment("BUY");
         }
    
   //check if we have a sell entry signal      
   if (
      (myMovingAverageArray1[0]<myMovingAverageArray2[0])
   && (myMovingAverageArray1[1]>myMovingAverageArray2[1])
   && (myMovingAverageArray1[0]<myMovingAverageArray3[0])
   && (myMovingAverageArray1[1]>myMovingAverageArray3[1])
   && (myMovingAverageArray2[0]<myMovingAverageArray3[0])
   && (myMovingAverageArray2[1]>myMovingAverageArray3[1])
      )
         {
         Comment("SELL");
         }          
  }
//+------------------------------------------------------------------+


Después de iniciar la estrategia, se generarán las siguientes señales en el gráfico:

3MA - señal de compra


3MA - señal de venta


Conclusión

En este artículo, hemos analizado uno de los indicadores más populares y útiles: la media móvil, y también nos hemos familiarizado con las variedades de medias. También hemos visto cómo usar este indicador y cómo escribir tres estrategias diferentes basadas en él. Si el lector desea utilizar estas estrategias, deberá asegurarse antes de realizar pruebas y optimizaciones exhaustivas.



Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/3040

Matemáticas en el trading: Ratios de Sharpe y Sortino Matemáticas en el trading: Ratios de Sharpe y Sortino
El rendimiento es la métrica más obvia usada por los inversores y los tráders principiantes a la hora de analizar la efectividad del comercio. Los tráders profesionales utilizan herramientas más fiables para el análisis de estrategias, como los ratios de Sharpe y Sortino.
Gráficos en la biblioteca DoEasy (Parte 94): Objetos gráficos compuestos, desplazamiento y eliminación Gráficos en la biblioteca DoEasy (Parte 94): Objetos gráficos compuestos, desplazamiento y eliminación
En este artículo, comenzaremos a desarrollar varios eventos de los objetos gráficos compuestos. Vamos a analizar parcialmente el desplazamiento y la eliminación de los objetos gráficos compuestos. En general, hoy vamos a mejorar lo que ya creamos en el último artículo.
Gráficos en la biblioteca DoEasy (Parte 95): Elementos de control de los objetos gráficos compuestos Gráficos en la biblioteca DoEasy (Parte 95): Elementos de control de los objetos gráficos compuestos
En este artículo, analizaremos el instrumental usado para gestionar los objetos gráficos compuestos, a saber, los elementos de gestión del objeto gráfico estándar extendido. Hoy nos desviaremos un poco del tema del desplazamiento de objetos gráficos compuestos y crearemos un manejador de eventos de cambio del gráfico en el que se encuentra el objeto gráfico compuesto; también trabajaremos con los objetos de gestión de objetos gráficos compuestos.
Aprenda por qué y cómo diseñar su sistema de trading algorítmico Aprenda por qué y cómo diseñar su sistema de trading algorítmico
En este artículo, mostraremos los fundamentos de MQL que permitirán a los tráders principiantes diseñar su propio sistema de trading algorítmico (Asesor Experto) mediante el diseño de un sistema de trading algorítmico simple después de mencionar algunas ideas básicas de MQL5