
Cómo desarrollar sistemas basados en medias móviles
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:
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:
- Definición de la media móvil
- Tipos de media móvil
- Estrategia 1: cruce con una media móvil
- Estrategia 2: cruce de dos medias móviles
- Estrategia 3: cruce de tres medias móviles
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.
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í:
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:
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:
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):
Después,
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í:
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:
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:
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:
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:
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:
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"); } } //+------------------------------------------------------------------+
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





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso