Como desenvolver sistemas baseados em médias móveis
Introdução
Acho que, independentemente da experiência, muitos de nós provavelmente já ouvimos a frase "a tendência é nossa amiga". Se ainda não, eu explico. Os preços ou tendências podem tomar diferentes direções dentro do mercado, isto é:
- Durante a tendência de alta, o preço faz mínimos e máximos mais altos.
- Durante a tendência de baixa, o preço faz mínimos e máximos mais baixos, quer dizer, é o oposto da tendência de alta.
- Durante o movimento lateral, o preço faz qualquer movimento que não pode ser atribuído nem a uma tendência de alta nem a uma tendência de baixa.
As figuras abaixo mostram gráficos de uma tendência de alta e de uma tendência de baixa:
Agora que analisamos o que é uma tendência, resta responder à pergunta: «por que essa tendência é amiga?».
A seguir, falaremos apenas sobre a tendência de alta e a de baixa, pois elas têm um movimento claramente identificável para cima ou para baixo, e, portanto, nos permitem ver quem atualmente domina o mercado e movimenta os preços. Durante uma tendência de alta, o mercado é dominado por compradores que elevam os preços independentemente da oferta, tal mercado é chamado de touros. Por outro lado, durante uma tendência de baixa, o mercado é dominado por vendedores que empurram os preços para baixo, tal mercado é chamado de mercado de ursos.
Porém, às vezes podemos ver um movimento de dentes de serra com reversões e falsos rompimentos no mercado. Tais falsas rupturas podem fazer muito mal. Abaixo veremos como exatamente elas podem fazer mal, mas primeiro vamos tentar entender o que significa um falso rompimento.
Um falso rompimento é uma situação em que um sinal para uma determinada ação tomada por nós é acionado, mas tal situação sofre um revés. Naturalmente, o resultado de tais ações acaba se revelando negativo. Existem diferentes maneiras de filtrar ditos falsos rompimentos. Uma delas é utilizando as médias móveis. Neste artigo aprenderemos a usar estratégias baseadas em médias móveis e desenvolveremos sistemas automatizados para negociação algorítmica que facilitem o trabalho com as mesmas.
Neste artigo, abordaremos os seguintes tópicos:
- Definição de média móvel
- Tipos de médias móveis
- Estratégia 1: cruzamento de uma média móvel
- Estratégia 2: cruzamento de duas médias móveis
- Estratégia 3: cruzamento de três médias móveis
Observação: todo o conteúdo deste artigo é destinado apenas para fins de treinamento e não é destinado a qualquer outro propósito. Qualquer coisa que você coloque em prática com base neste artigo será por sua própria conta e risco, o autor não garante nenhum resultado. Em qualquer caso, quaisquer estratégias devem ser testadas e otimizadas minuciosamente. Mais uma vez, o artigo e os exemplos nele contidos são apenas para fins meramente informativos.
Vamos escrever todos os códigos em MQL5 e testá-los na plataforma MetaTrader 5.
Existem muitas maneiras diferentes de filtrar os sinais gerados por qualquer estratégia. Provavelmente, a mais simples delas consiste no uso de uma média móvel. Vamos falar sobre isso neste artigo. Veremos estratégias baseadas em médias móveis e aprenderemos a programar uma estratégia de negociação algorítmica. O objetivo do artigo é ensinar aos leitores como criar seus próprios sistemas de negociação automatizados.
Definição de média móvel
O indicador de média móvel é muito comum na análise técnica. É calculado como o valor médio do preço durante um determinado período de tempo. O indicador suaviza os dados de preços e reduz o impacto de movimentos e flutuações aleatórios de curto prazo no gráfico.
Existem diferentes tipos de médias móveis. A principal diferença está no método de cálculo, mas falaremos sobre isso na próxima seção. Por enquanto, basta entender que existem muitos tipos diferentes e que podemos usar variadas opções de cálculo para obter os melhores resultados em situações específicas.
A média móvel é um indicador de tendência baseado na análise de preços. Quer dizer, se o preço se mover em uma determinada direção, a média móvel seguirá o preço na mesma direção.
É um indicador que tarda a reagir porque vai atrás do preço, ou seja, o preço aparece primeiro e depois a média é calculada com base em seu valor. Sem o valor do preço, não haverá nada para calcular.
Pela natureza da média móvel, pode-se determinar que este indicador:
- Mostra o valor médio
- Funciona melhor em um mercado de tendências
- Confirma dada tendência e ajuda a identificá-la
- Remove o ruído do movimento do preço
- Ajuda a identificar falsos rompimentos
- E muito mais…
Eis os tipos de médias móveis:
Existem variadíssimas médias móveis. As mais comuns são:
- média móvel simples;
- média móvel ponderada;
- média móvel exponencial.
A principal diferença entre elas está nos métodos de cálculo.
A seguir, vamos examinar cada um delas e aprender como usá-las em MQL5.
Média móvel simples:
Este é o tipo mais simples de média móvel, muitas vezes referido como SMA (Simple Moving Average).
É calculada como a média aritmética de um determinado conjunto de valores durante o período de tempo selecionado. Ou seja, os valores de um determinado número de preços são somados e, em seguida, o resultado é dividido por esse número.
Por exemplo, vamos tomar cinco dias de negociação. Os preços de fechamento para esses cinco dias foram:
- Dia 1 = 10
- Dia 2 = 15
- Dia 3 = 20
- Dia 4 = 30
- Dia 5 = 35
O valor de SMA para esses cinco dias é calculado da seguinte forma:
Média móvel ponderada
A média móvel ponderada (Weighted Moving Average, WMA) também reflete o valor médio do preço para o período selecionado, contudo mais peso é dado aos dados mais recentes. Ou seja, se calcularmos o WMA para 10 dias, todos esses dados de preços terão pesos diferentes e os dados posteriores terão mais peso.
A média móvel ponderada é calculada usando a seguinte fórmula:
Exemplo:
Vamos pegar os mesmos 5 dias de negociação com os mesmos preços de fechamento:
- Dia 1 = 10
- Dia 2 = 15
- Dia 3 = 20
- Dia 4 = 30
- Dia 5 = 35
A média móvel ponderada para esses cinco dias pode ser calculada usando a fórmula:
Média móvel exponencial
A média móvel exponencial (Exponential Moving Average, EMA) é caracterizada por um cálculo que leva em consideração o período anterior ao período de cálculo. Ou seja, ao calcular o valor médio de 10 dias, também será levado em consideração o período anterior.
O WMA é calculado usando a seguinte fórmula:
Primeiro, calculamos K (o expoente para calcular o peso do intervalo) e n (o número de intervalos):
Logo,
Exemplo:
Vamos pegar os mesmos 5 dias de negociação com os mesmos preços de fechamento:
- Dia 1 = 10
- Dia 2 = 15
- Dia 3 = 20
- Dia 4 = 30
- Dia 5 = 35
- Dia 6 = 40
O EMA médio de cinco dias é calculado da seguinte forma:
Observe que o primeiro dia do cálculo da média móvel exponencial é o dia 6 e, nos cinco dias anteriores, era calculada a média simples (22).
Já sabemos a definição de média móvel e seus tipos. Agora vamos para a parte mais interessante. Falaremos sobre estratégias baseadas em médias móveis e aprenderemos a criar sistemas de negociação algorítmicos baseados nelas.
Estratégia 1: Cruzamento de uma média móvel
Para os propósitos deste artigo, vamos trabalhar com exemplos que usam a média móvel simples (SMA). No entanto, podemos escolher qualquer tipo de média móvel que se adeque ao nosso código.
Para esta estratégia, verificaremos a interseção entre o preço e o SMA a cada tick:
- Preço > SMA: sinal de compra, mostraremos este sinal como um comentário no gráfico.
- Preço < SMA: sinal de venda, mostraremos este sinal como um comentário no gráfico.
- Em todos os outros casos, não fazemos nada.
A figura abaixo mostra como funciona estratégia baseada na interseção de média móvel:
O código da estratégia ficará assim:
//+------------------------------------------------------------------+
//| 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 several prices
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");
}
//Checking for a sell entry signal
if (
(Bid 0])
)
{
Comment("SELL");
}
}
//+------------------------------------------------------------------+
Uma vez iniciada a estratégia, os seguintes sinais serão gerados no gráfico:
Estratégia 2: Cruzamento de duas médias móveis
Para esta estratégia, usaremos duas médias móveis. O período da média móvel curta será 24 e o da longa, 50.
Neste caso, verificaremos a posição de duas médias móveis a cada tick:
- SMA com período de 24 > SMA com período de 50: sinal de compra, mostraremos este sinal como um comentário no gráfico.
- SMA com período de 24 < SMA com período de 50: sinal de venda, mostraremos este sinal como um comentário no gráfico.
- Em todos os outros casos, não fazemos nada.
A figura abaixo mostra como essa estratégia baseada em duas médias móveis simples funciona:
O código da estratégia ficará assim:
//+------------------------------------------------------------------+
//| 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 several prices
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] 1])
)
{
Comment("BUY");
}
//Checking for a sell entry signal
if (
(myMovingAverageArray1[0] 0])
&& (myMovingAverageArray1[1]>myMovingAverageArray2[1])
)
{
Comment("SELL");
}
}
//+------------------------------------------------------------------+
Uma vez iniciada a estratégia, os seguintes sinais serão gerados no gráfico:
Estratégia 3: Cruzamento de três médias móveis
Nesta estratégia, usaremos três médias móveis, isto é: uma curta com período de 10, uma média com período de 24 e outra longa com período de 48.
Em dado caso, verificaremos a posição de três médias móveis a cada tick:
- Se 10 SMA > 24 SMA, 10 SMA > 48 SMA e 24 SMA > 48 SMA: sinal de compra, mostraremos este sinal como um comentário no gráfico.
- Se 10 SMA < 24 SMA, 10 SMA < 48 SMA e 24 SMA < 48 SMA: sinal de venda, mostraremos este sinal como um comentário no gráfico.
- Em todos os outros casos, não fazemos nada.
A figura abaixo mostra como essa estratégia baseada em três médias móveis simples funciona:
O código da estratégia ficará assim:
//+------------------------------------------------------------------+
//| 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 several prices
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] 1])
&& (myMovingAverageArray1[0]>myMovingAverageArray3[0])
&& (myMovingAverageArray1[1] 1])
&& (myMovingAverageArray2[0]>myMovingAverageArray3[0])
&& (myMovingAverageArray2[1] 1])
)
{
Comment("BUY");
}
//Checking for a sell entry signal
if (
(myMovingAverageArray1[0] 0])
&& (myMovingAverageArray1[1]>myMovingAverageArray2[1])
&& (myMovingAverageArray1[0] 0])
&& (myMovingAverageArray1[1]>myMovingAverageArray3[1])
&& (myMovingAverageArray2[0] 0])
&& (myMovingAverageArray2[1]>myMovingAverageArray3[1])
)
{
Comment("SELL");
}
}
//+------------------------------------------------------------------+
Epílogo
Neste artigo, analisamos um dos indicadores mais populares e úteis, a média móvel, e conhecemos os diferentes tipos de médias. Também vimos como utilizar este indicador e como escrever três estratégias diferentes com base nele. Se você quiser usar estas estratégias, certifique-se de testá-las e otimizá-las cuidadosamente.
Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/3040
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso