Recursos do Assistente MQL5 que você precisa conhecer (Parte 65): uso de padrões com FrAMA e Índice de Força
Introdução
Dando continuidade à nossa série, no artigo anterior analisamos os canais de DeMark e Envelopes. Agora, vamos tratar da combinação entre a média móvel adaptativa fractal (FrAMA) e o Índice de Força. Por ser uma média móvel, a FrAMA atua como um indicador de tendência, enquanto o Índice de Força permite acompanhar o volume e avaliar se a tendência tem sustentação. Assim como nos artigos anteriores, analisaremos 10 padrões típicos que podem ser obtidos pela combinação desses dois indicadores. Realizamos o treinamento ou a otimização no EURUSD H4 com dados de 2023. O teste forward no mesmo símbolo é realizado com dados de 2024.
Divergência entre a FrAMA e o Índice de Força
O primeiro padrão é a divergência entre a FrAMA e o Índice de Força. Um sinal de alta surge quando a FrAMA indica uma tendência de baixa, com o preço formando mínimas cada vez mais baixas ou permanecendo abaixo da FrAMA, enquanto o Índice de Força forma mínimas mais altas, indicando enfraquecimento da pressão vendedora. Apesar de relativamente simples, esse padrão pode ser implementado de diferentes maneiras. Optamos por implementá-lo acompanhando a queda do preço enquanto ele permanece abaixo da FrAMA, ao mesmo tempo que o Índice de Força sobe acima de sua mínima anterior, mas continua abaixo de zero.
Um sinal de baixa surge quando a tendência de alta indicada pela FrAMA é confirmada pela formação de máximas cada vez mais altas no preço, enquanto o Índice de Força forma máximas mais baixas, sinalizando enfraquecimento da pressão compradora. A implementação dos padrões de alta e de baixa em MQL5 é a seguinte:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) < FRM(X()) && Close(X() + 1) > FRM(X() + 1) && 0.0 > FRC(X()) && FRC(X()) > FRC(X() + 1)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) > FRM(X()) && Close(X() + 1) < FRM(X() + 1) && 0.0 < FRC(X()) && FRC(X()) < FRC(X() + 1)) { return(true); } return(false); }
Esse padrão permite identificar possíveis reversões de tendência comparando a direção indicada pela FrAMA com o momentum do Índice de Força. Uma divergência acentuada, tanto de alta quanto de baixa, costuma sinalizar enfraquecimento da tendência, podendo assim indicar um ponto importante de entrada. Dessa forma, o padrão combina adaptabilidade com momentum ponderado pelo volume.
A FrAMA ajusta seu período de suavização com base na geometria fractal, o que a torna bastante sensível às variações de preço e, ao mesmo tempo, permite filtrar ruídos. Já o Índice de Força mede a intensidade do movimento do preço multiplicando sua variação pelo volume, que funciona como indicador da pressão compradora ou vendedora. Em uma divergência de alta, a FrAMA aponta uma tendência de baixa, enquanto o Índice de Força forma mínimas mais altas, indicando enfraquecimento da tendência de longo prazo em curso. A divergência de baixa apresenta a configuração inversa. O objetivo do padrão é capturar pontos de oscilação ou de inflexão do mercado. Os resultados dos testes após o treinamento ou a otimização são apresentados abaixo. O padrão não passou no teste forward de um ano, referente a 2024;

Cruzamento da FrAMA com confirmação pelo Índice de Força
Nosso padrão 1 se baseia no cruzamento da FrAMA com confirmação pelo Índice de Força. Um sinal de alta ocorre quando o preço cruza a FrAMA de baixo para cima ou quando uma FrAMA rápida cruza uma FrAMA lenta de baixo para cima. Nesse caso, o Índice de Força também cruza o nível zero. Por sua vez, um sinal de baixa ocorre quando o preço cruza a FrAMA de cima para baixo e, ao mesmo tempo, o Índice de Força passa para território negativo ao cruzar a linha zero de cima para baixo. Em MQL5, o padrão é implementado da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && Close(X() + 1) < FRM(X() + 1) && 0.0 > FRC(X() + 1) && FRC(X()) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && Close(X() + 1) > FRM(X() + 1) && 0.0 < FRC(X() + 1) && FRC(X()) < 0.0) { return(true); } return(false); }
O padrão se baseia em dois cruzamentos: um para identificar mudanças na tendência, por meio da FrAMA, e outro para avaliar o momentum sustentado pelo volume, por meio do Índice de Força. Isso ajuda a reduzir a quantidade de sinais falsos em mercados instáveis. O cruzamento da FrAMA também pode ser implementado com uma FrAMA rápida e outra lenta, tomando-se os sinais a partir do cruzamento da FrAMA rápida com a lenta, em vez do cruzamento do preço com a FrAMA. Por exemplo, podem ser considerados períodos de 14 e 50. Nesse caso, o Índice de Força desempenha um papel secundário, confirmando que a mudança de tendência conta com sustentação do volume.
O padrão é eficaz em mercados direcionais, pois a capacidade adaptativa da FrAMA permite detectar tendências com rapidez, enquanto o Índice de Força filtra rompimentos com baixo volume. Na implementação dessa estratégia, pode ser conveniente utilizar períodos da FrAMA entre 12 e 50 para capturar tendências de médio prazo. A exigência de que o Índice de Força cruze o nível zero também pode ser substituída pela exigência de que ele cruze uma média móvel, caso esse buffer de indicador esteja disponível. O padrão não deve ser usado em fases de consolidação do mercado, pois os cruzamentos da FrAMA podem gerar sinais instáveis e alternados. Um dos fatores decisivos para obter resultados satisfatórios pode ser testar, com dados históricos, períodos adequados para a FrAMA e o Índice de Força. Não realizamos esse teste, pois utilizamos o período 14 para ambos os indicadores. A seguir, apresentamos os resultados dos períodos de treinamento e teste. Este padrão também não passou no teste forward:

Direção da tendência pela FrAMA com níveis de sobrecompra/sobrevenda do Índice de Força
O padrão 2 combina a direção da tendência indicada pela FrAMA com as leituras do Índice de Força para identificar condições de sobrecompra ou sobrevenda. Um sinal de alta ocorre quando o preço está acima da FrAMA, indicando uma tendência de longo prazo, e o Índice de Força atinge um nível de sobrevenda, seguido por uma correção. Essa correção do Índice de Força é interpretada como uma oportunidade de compra. De forma inversa, um sinal de baixa ocorre quando o preço está abaixo da FrAMA e o Índice de Força atinge um nível de sobrecompra e, em seguida, começa a cair, sinalizando uma correção. Em MQL5, implementamos da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && 0.0 >= FRC(X()) && FRC(X()) > FRC(X() + 1)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && 0.0 <= FRC(X()) && FRC(X()) < FRC(X() + 1)) { return(true); } return(false); }
Esse padrão de sinal combina a confirmação da tendência pela FrAMA com níveis extremos do Índice de Força para identificar correções e reversões. É especialmente adequado para estratégias de retorno à média dentro de tendências. Picos de volume em zonas de sobrecompra ou sobrevenda aumentam a confiabilidade do sinal. O padrão combina a clareza do sinal de tendência da FrAMA com os extremos do Índice de Força ponderados pelo volume. Os limiares do Índice de Força podem ser ajustados de acordo com a volatilidade do ativo. Para nossos fins, não utilizamos valores absolutos como limiares de sobrecompra e sobrevenda, pois esses níveis tendem a estar relacionados às unidades de preço de cada ativo. Em vez disso, analisamos o comportamento do Índice de Força para determinar quando esses níveis extremos foram atingidos. Assim, uma confirmação adicional, como correções do preço a partir de níveis importantes de suporte ou padrões de candlestick, pode aumentar significativamente a precisão desse sinal.
Esse padrão pode ser utilizado em timeframes mais curtos, como H1, para operações intradiárias, e também se aplica a timeframes mais longos. Não deve ser empregado para operar contra tendências fortes, a menos que o Índice de Força indique uma divergência extrema. O padrão também não passou no teste forward. O relatório é apresentado abaixo:

Inclinação da FrAMA com suavização do Índice de Força
O padrão 3 utiliza a inclinação da FrAMA em conjunto com a suavização do Índice de Força. Um sinal de alta ocorre quando a FrAMA apresenta uma inclinação positiva acentuada e o Índice de Força também sobe rapidamente em território positivo. Um sinal de baixa ocorre quando a FrAMA apresenta uma inclinação negativa acentuada, enquanto o Índice de Força suavizado permanece negativo e continua caindo. Em MQL5, implementamos da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && FRM(X()) - FRM(X() + 1) > FRM(X() + 1) - FRM(X() + 2) && FRM(X() + 1) - FRM(X() + 2) > 0.0 && FRC(X()) - FRC(X() + 1) > FRC(X() + 1) - FRC(X() + 2) && FRC(X() + 1) - FRC(X() + 2) > 0.0) { return(true); } else if(T == POSITION_TYPE_BUY && FRM(X()) - FRM(X() + 1) < FRM(X() + 1) - FRM(X() + 2) && FRM(X() + 1) - FRM(X() + 2) < 0.0 && FRC(X()) - FRC(X() + 1) < FRC(X() + 1) - FRC(X() + 2) && FRC(X() + 1) - FRC(X() + 2) < 0.0) { return(true); } return(false); }
Não lemos os dados de um buffer secundário já suavizado. Em vez disso, analisamos as variações do próprio Índice de Força. Ao acompanhar a magnitude dessas variações e observar seu aumento, reproduzimos o comportamento de um Índice de Força suavizado. O padrão foi projetado para medir a inclinação da FrAMA como forma de avaliar a força da tendência em conjunto com o Índice de Força suavizado e tende a funcionar melhor em mercados direcionais com volume consistente.
Em implementações alternativas que analisam o ângulo da FrAMA, a inclinação pode ser calculada pela taxa de variação. Uma taxa de variação mais elevada corresponde a uma inclinação mais acentuada, enquanto uma taxa menor indica uma inclinação mais suave. Por isso, também utilizamos a taxa de variação da FrAMA como indicador de quão acentuada é sua inclinação. O Índice de Força suavizado, por sua vez, ajuda a filtrar ruídos de curto prazo e destaca movimentos de preço sustentados por momentum consistente. Assim, a combinação de uma inclinação positiva acentuada da FrAMA com um Índice de Força suavizado em trajetória ascendente deve confirmar uma forte tendência de alta, enquanto uma inclinação descendente acompanhada por um Índice de Força em queda deve indicar um momentum de baixa significativo. Nesse padrão, essa combinação de indicadores é adequada para swing trading, pois busca identificar tendências sustentadas. O padrão também não passou no teste forward. O relatório é apresentado abaixo:

Na implementação, o método de cálculo da inclinação da FrAMA pode ser alterado caso a taxa de variação não seja considerada suficientemente sensível. Ao utilizar uma abordagem baseada na taxa de variação, um período entre 13 e 21 pode proporcionar um equilíbrio melhor entre a capacidade de resposta às mudanças e a redução do ruído. A entrada deve ocorrer quando os dois indicadores estiverem alinhados, ou seja, quando ambos apresentarem inclinação positiva ou negativa. A saída da tendência pode ser definida pelo momento em que a inclinação da curva da FrAMA começa a se estabilizar ou quando o Índice de Força muda de direção, indicando perda de força da tendência.
Rompimento da FrAMA com forte aumento do volume no Índice de Força
O padrão 4 combina um rompimento da FrAMA com um pico do Índice de Força. Um sinal de alta ocorre quando o preço rompe a FrAMA de baixo para cima com força, normalmente por mais de 1%. Ao mesmo tempo, o Índice de Força também apresenta um forte pico positivo, aproximadamente o dobro de sua média, indicando elevado volume de compras. Um sinal de baixa ocorre quando o preço rompe a FrAMA para baixo por uma margem percentual significativa e o Índice de Força apresenta um forte pico negativo, novamente de aproximadamente duas vezes o valor de referência, indicando elevado volume de vendas. Em MQL5, o padrão é implementado da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && Close(X() + 1) < FRM(X() + 1) && Close(X()) - Close(X() + 1) >= High(X() + 1) - Low(X() + 1) && FRC(X()) >= 2.0 * FRC(X() + 1) && FRC(X() + 1) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && Close(X() + 1) > FRM(X() + 1) && Close(X()) - Close(X() + 1) <= High(X() + 1) - Low(X() + 1) && FRC(X()) <= 2.0 * FRC(X() + 1) && FRC(X() + 1) < 0.0) { return(true); } return(false); }
O padrão identifica rompimentos nos quais o preço se move de forma acentuada para cima ou para baixo da FrAMA e o Índice de Força confirma o movimento com um forte aumento de volume. Em condições de mercado voláteis, esse tipo de situação tende a ocorrer com frequência. O rompimento da FrAMA sinaliza o início de uma nova tendência, enquanto o Índice de Força atua como filtro de confirmação. Essa combinação de indicadores é particularmente adequada para ativos voláteis, como criptomoedas ou ações de empresas de pequena capitalização, nos quais picos de volume podem anteceder movimentos sustentados. A capacidade adaptativa da FrAMA permite detectar rompimentos rapidamente, enquanto o Índice de Força ajuda a filtrar falsos rompimentos.
O padrão exige que a magnitude do Índice de Força atinja pelo menos o dobro da média ou do valor anterior. Formações gráficas como triângulos ou bandeiras também podem servir como confirmação adicional do rompimento. O uso de Stop Loss abaixo ou acima da FrAMA também pode ajudar a reduzir o risco. Além disso, é necessário acompanhar a dinâmica do volume para evitar operar rompimentos que estejam perdendo força em mercados de baixa liquidez. Infelizmente, assim como a maioria dos padrões baseados nessa combinação de indicadores com período 14, este também não passou no teste forward:

Suporte/resistência da FrAMA com reversão do Índice de Força
O padrão 5 utiliza a FrAMA como suporte ou resistência, em conjunto com uma reversão do Índice de Força. Um sinal de alta ocorre quando o preço reage à FrAMA, que atua como nível dinâmico de suporte. Nesse caso, o preço se aproxima da FrAMA vindo de cima ou chega a tocá-la e, em seguida, volta a subir. Nessas situações, o Índice de Força cruza sua linha zero ou, alternativamente, sua média móvel exponencial de período 5/13. Isso indica aumento do volume de compras.
Um sinal de baixa ocorre quando o preço é rejeitado pela FrAMA, que atua como resistência dinâmica, ou seja, quando o preço toca ou se aproxima da FrAMA durante uma tendência de baixa. O Índice de Força cruza a linha zero ou a média móvel exponencial (EMA), indicando aumento do volume de vendas. Em MQL5, implementamos da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) >= FRM(X()) && Close(X() + 1) <= FRM(X() + 1) && Close(X() + 2) >= FRM(X() + 2) && FRC(X()) > 0.0 && FRC(X() + 1) < 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) <= FRM(X()) && Close(X() + 1) >= FRM(X() + 1) && Close(X() + 2) <= FRM(X() + 2) && FRC(X()) < 0.0 && FRC(X() + 1) > 0.0) { return(true); } return(false); }
O padrão combina o contexto da tendência com mudanças de momentum e funciona bem tanto em mercados laterais quanto em mercados direcionais. A FrAMA atua como um nível dinâmico de suporte e resistência, a partir do qual o preço pode reagir, enquanto o Índice de Força sinaliza possíveis reversões. Essa combinação pode ser bastante versátil, pois a FrAMA se adapta às condições do mercado e o Índice de Força ajuda a definir com maior precisão o momento de entrada.
É necessário testar o padrão com dados históricos para avaliar a confiabilidade da FrAMA como suporte e resistência. Caso sejam necessárias confirmações mais rápidas pelo Índice de Força, pode-se considerar uma implementação que utilize uma média móvel exponencial do Índice de Força (Force EMA). O padrão também pode ser combinado com zonas estáticas de suporte e resistência em escala mais ampla para obter maior confluência. As operações devem ser realizadas em períodos de baixo volume, pois o Índice de Força pode apresentar atraso. Este padrão também não passa no teste forward quando treinado com dados de 2023 e testado em 2024. O relatório dos testes para ambos os períodos é apresentado abaixo:

Continuação da tendência pela FrAMA com correção do Índice de Força
O padrão 6, o sétimo da sequência, baseia-se na continuação da tendência indicada pela FrAMA em conjunto com correções do Índice de Força. Um sinal de alta ocorre quando o preço permanece acima da FrAMA, confirmando uma tendência de alta, enquanto o Índice de Força recua em direção ao nível zero, podendo inclusive entrar ligeiramente em território negativo, mas depois se recupera e volta a ficar positivo. Esse movimento do Índice de Força reflete a retomada da pressão compradora.
Por outro lado, um sinal de baixa ocorre quando o preço permanece abaixo da FrAMA, confirmando o cenário de baixa. Como confirmação, o Índice de Força sobe em direção a zero a partir de valores negativos, podendo ultrapassá-lo ligeiramente, e depois volta a cair para território negativo. Assim como no cenário de alta, esse comportamento indica a retomada da pressão vendedora. Dessa forma, o padrão 6 identifica oportunidades de continuação da tendência durante correções. A FrAMA define a tendência, enquanto o Índice de Força indica a retomada da força associada ao volume. Em teoria, esse modelo deve apresentar uma relação retorno/risco elevada em tendências fortes. A implementação em MQL5 é a seguinte:
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > FRM(X()) && Close(X() + 1) > FRM(X() + 1) && Close(X() + 2) > FRM(X() + 2) && FRC(X()) > 0.0 && FRC(X() + 1) <= 0.0 && FRC(X() + 2) >= 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < FRM(X()) && Close(X() + 1) < FRM(X() + 1) && Close(X() + 2) < FRM(X() + 2) && FRC(X()) < 0.0 && FRC(X() + 1) >= 0.0 && FRC(X() + 2) <= 0.0) { return(true); } return(false); }
O padrão também é particularmente adequado para entradas a favor da tendência após uma correção, pois a FrAMA confirma a persistência da tendência, enquanto o Índice de Força fornece confirmação pelo volume. Ao utilizá-lo, é importante esperar que o Índice de Força retorne aproximadamente ao nível zero antes de tomar qualquer decisão, pois, em geral, a tendência tende a permanecer estável. Como complemento, podem ser utilizados níveis de Fibonacci quando os recuos coincidem com zonas de correção. Os Stop Loss podem ser posicionados com base nos extremos mais recentes do movimento ou tomando a FrAMA como referência.
O padrão não deve ser utilizado em mercados instáveis, pois, nessas condições, as correções têm maior probabilidade de representar sinais falsos. Este é um dos dois padrões que passaram no teste forward, apesar de o treinamento ter sido realizado com apenas um ano de dados. O relatório é apresentado abaixo:

Tanto o treinamento quanto o teste foram realizados em períodos de apenas um ano, o que, a rigor, não é suficiente para tirar conclusões de longo prazo. Isso se aplica especialmente aos padrões que não passaram no teste forward.
Contração da volatilidade na FrAMA com expansão do Índice de Força
Nosso oitavo padrão combina a contração da volatilidade na FrAMA com movimentos do Índice de Força. Um sinal de alta ocorre quando a FrAMA se estabiliza, o que pode ser identificado por uma inclinação reduzida ou por uma faixa de preços estreita, enquanto o Índice de Força sobe rapidamente de uma região próxima de zero até níveis de sobrecompra. De forma semelhante, um sinal de baixa ocorre quando a FrAMA se estabiliza e o Índice de Força cai acentuadamente da região de zero até níveis de sobrevenda.
O oscilador Índice de Força difere do RSI e do Estocástico porque seus níveis extremos não são definidos por valores absolutos. Esses extremos variam de um ativo para outro. Isso torna a definição programática das regiões de sobrecompra e sobrevenda um pouco mais problemática. Ainda assim, implementamos o padrão em MQL5 da seguinte forma:
//+------------------------------------------------------------------+ //| Check for Pattern 7. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_7(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && fabs(FRM(X()) - FRM(X() + 5)) <= fabs(Close(X()) - Close(X() + 1)) && FRC(X()) > 0.0 && FRC(X() + 1) < 0.0 && FRC(X()) - FRC(X() + 1) >= 2.0 * fabs(FRC(X() + 1))) { return(true); } else if(T == POSITION_TYPE_SELL && fabs(FRM(X()) - FRM(X() + 5)) >= fabs(Close(X()) - Close(X() + 1)) && FRC(X()) < 0.0 && FRC(X() + 1) > 0.0 && FRC(X()) - FRC(X() + 1) <= -2.0 * fabs(FRC(X() + 1))) { return(true); } return(false); }
O padrão 7 utiliza a FrAMA para identificar períodos anteriores de baixa volatilidade, seguidos por movimentos acentuados do Índice de Força. Seu objetivo é capturar movimentos bruscos de preço após uma fase de consolidação. A confirmação proporcionada pelo componente de volume do Índice de Força é essencial para a confiabilidade do sinal. A contração indicada pela FrAMA, seguida por um pico de volume, torna esse padrão especialmente adequado para operações de rompimento de faixa, já que a FrAMA atua como indicador de baixa volatilidade, enquanto o Índice de Força confirma a intensidade do movimento.
A estabilização da FrAMA também pode ser avaliada pela sua inclinação ou pela comparação de suas variações com outro indicador, como o ATR. Nesse caso, os limiares do Índice de Força são particularmente importantes, e é necessário definir um método para determiná-los. Em nossa implementação, isso é feito avaliando a magnitude do movimento em relação à linha zero. A combinação desse padrão com as Bandas de Bollinger ou o Canal de Keltner pode ajudar a confirmar a contração da volatilidade. Os Stop Loss podem ser posicionados dentro da faixa de consolidação. Este padrão também não passou no teste forward. O relatório é apresentado abaixo:

Força da tendência pela FrAMA com filtro de divergência do Índice de Força
O penúltimo padrão leva em conta a intensidade do movimento da FrAMA e a divergência do Índice de Força. Um sinal de alta ocorre quando a FrAMA indica uma forte tendência ascendente, com inclinação acentuada, enquanto o Índice de Força não apresenta divergência de baixa, confirmando assim o cenário de alta. O padrão de baixa é simétrico: a FrAMA indica uma forte tendência descendente, enquanto o Índice de Força não apresenta divergência de alta. A implementação em MQL5 é a seguinte:
//+------------------------------------------------------------------+ //| Check for Pattern 8. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_8(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > Close(X() + 1) && FRC(X()) > FRC(X() + 1) && FRM(X()) - FRM(X() + 1) >= 2.0 * FRM(X() + 1)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < Close(X() + 1) && FRC(X()) < FRC(X() + 1) && FRM(X()) - FRM(X() + 1) <= -2.0 * FRM(X() + 1)) { return(true); } return(false); }
O ponto central do padrão é que o preço esteja significativamente acima da FrAMA, no caso de um sinal de alta, ou significativamente abaixo dela, no caso de um sinal de baixa. O uso da FrAMA para avaliar a força da tendência, com o Índice de Força como filtro, ajuda a reduzir sinais falsos e aumentar a precisão das operações em mercados direcionais, além de equilibrar as informações de tendência e volume. Essa combinação, utilizada no padrão 8, permite permanecer em tendências fortes e, ao mesmo tempo, evitar entradas quando o momentum começa a enfraquecer, já que o Índice de Força atua como filtro.
Na implementação, o uso de um limiar para a força da tendência pode tornar a identificação dos pontos de entrada ainda mais precisa, sobretudo quando esse limiar é baseado, por exemplo, na inclinação da média móvel ou na variação percentual do preço. Também é importante monitorar o Índice de Força em busca de divergências ocultas, encerrar as operações quando as divergências persistirem em diferentes timeframes e testar adequadamente diferentes configurações dos parâmetros de entrada da FrAMA para otimizar a avaliação da força da tendência. O padrão 8 também não passou no teste forward:

FrAMA em múltiplos timeframes com alinhamento do Índice de Força
O padrão 9 aplica os princípios básicos dos nossos dois indicadores em dois timeframes. Um sinal de alta ocorre quando a FrAMA está subindo tanto no timeframe mais curto quanto no mais longo, enquanto o Índice de Força permanece ligeiramente acima do nível zero em ambos. Para testar o padrão, acrescentamos o timeframe diário ao período-base de H4 utilizado nos testes. No cenário de baixa, a FrAMA indica tendência descendente tanto no timeframe principal quanto no timeframe mais longo, enquanto o Índice de Força permanece abaixo de zero em ambos. A implementação em MQL5 é a seguinte:
//+------------------------------------------------------------------+ //| Check for Pattern 9. | //+------------------------------------------------------------------+ bool CSignalFRM_FRC::IsPattern_9(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > Close(X() + 1) && FRC(X()) > FRC(X() + 1) && FRM(X()) > FRM(X() + 1) && FRC(X()) > FRC(X() + 1) && FRM(X()) > FRM(X() + 1)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < Close(X() + 1) && FRC(X()) < FRC(X() + 1) && FRM(X()) < FRM(X() + 1) && FRC(X()) < FRC(X() + 1) && FRM(X()) < FRM(X() + 1)) { return(true); } return(false); }
A combinação desses sinais básicos dos dois indicadores em dois timeframes aumenta a probabilidade de operações bem-sucedidas. O padrão 9 reforça a confirmação ao alinhar tendência e volume. Ele é especialmente adequado para swing trading e position trading. Quanto maior o alinhamento entre os sinais, menor tende a ser a incidência de falsos sinais. Este é um dos dois padrões que passaram no teste forward. O teste realizado ao longo de 2024, após a otimização/treinamento com dados de 2023, apresentou o seguinte relatório.

Implementamos o padrão utilizando o timeframe diário, mas timeframes ainda mais longos também podem ser considerados nos testes para aumentar a confiabilidade. Além disso, em vez de observar apenas a posição do Índice de Força em relação ao nível zero, pode-se exigir que o Índice de Força apresente tendência ascendente para um sinal de alta e tendência descendente para um sinal de baixa. Também utilizamos o período padrão de 14 para a FrAMA, embora esse valor possa ser ajustado separadamente em cada timeframe para permitir testes mais abrangentes.
Dos 10 padrões analisados acima, apenas dois passaram no teste forward. A rigor, treinar ou otimizar um EA com apenas um ano de dados nunca garante que ele terá bom desempenho no ano seguinte. Em muitos ativos negociados, as tendências podem persistir por mais de um ano. Por isso, para desenvolver um sistema de negociação mais robusto, é importante treinar ou otimizar o EA com dados de vários anos, buscando configurações equilibradas dos parâmetros de entrada.
Ainda assim, como mostraram os artigos anteriores, mesmo com um período de treinamento tão curto, de apenas um ano, seguido por testes ao longo do ano seguinte, já obtivemos resultados "mais promissores". Os resultados obtidos com essa combinação de indicadores podem esconder problemas que impedem que ela seja considerada uma opção com potencial real de uso. As causas são analisadas a seguir.
Por que a combinação da FrAMA com o Índice de Força pode ser problemática?
A FrAMA, como indicador de acompanhamento de tendência, adapta seu grau de suavização de acordo com a dimensão fractal dos movimentos de preço. Isso permite acompanhar as variações de preço com eficiência e com atraso reduzido. O Índice de Força, calculado como o produto da variação do preço pelo volume, também tende a refletir a dinâmica dos preços, já que seu principal componente é justamente essa variação. Essa sobreposição faz com que ambos os indicadores dependam, em grande medida, das tendências de preço. Como consequência, os sinais podem acabar sendo redundantes, em vez de complementares.
Isso pode ser problemático porque, na previsão de séries temporais financeiras, o uso de entradas diversificadas permite capturar diferentes aspectos do comportamento do mercado. Essas categorias mais amplas normalmente incluem tendência, momentum, volatilidade, volume e outros fatores. Sinais redundantes reduzem efetivamente a quantidade de informação disponível ao modelo para fazer previsões, limitando sua capacidade de generalizar os resultados em diferentes condições de mercado. Por exemplo, se ambos os indicadores sinalizam simultaneamente uma tendência de alta, eles podem acabar reforçando o ruído, em vez de acrescentar características realmente distintas.
Em vez de combinar a FrAMA com o Índice de Força, talvez seja mais interessante associá-la a outro indicador que forneça informações ortogonais, como níveis de suporte e resistência ou momentum. As Bandas de Bollinger e o Índice de Força Relativa (RSI), respectivamente, são exemplos possíveis. Combinações desse tipo podem fornecer ao modelo entradas mais diversificadas, melhorando sua capacidade de prever movimentos de preço.
Outra limitação pode estar na forte dependência do Índice de Força em relação ao volume negociado. Como não temos acesso ao volume real, somos obrigados a utilizar o volume de ticks. Essa limitação certamente reduz a confiabilidade do Índice de Força. Além disso, a FrAMA introduz atraso e há um descompasso de sensibilidade entre os dois indicadores. A suavização adaptativa da FrAMA pode entrar em conflito com a resposta rápida do Índice de Força às mudanças de preço e volume, gerando sinais contraditórios em períodos de maior volatilidade.
Também é possível argumentar que a capacidade preditiva desses indicadores é limitada, pois nenhum deles foi concebido, por natureza, para prever níveis futuros de preço. Ambos são adequados para identificar tendências e condições de volume no momento atual, mas não necessariamente para prever níveis futuros de preço.
Conclusão
Neste artigo, analisamos mais uma combinação de indicadores: a FrAMA e o oscilador Índice de Força. Embora ela tenha se mostrado menos "promissora" do que algumas das combinações examinadas nos artigos anteriores, como sempre, é necessário considerar diversos aspectos antes de tirar conclusões de longo prazo. O principal deles é a necessidade de realizar testes ao longo de vários anos utilizando dados reais de ticks da corretora com a qual se pretende operar. No próximo artigo, veremos se o machine learning pode melhorar essa combinação de indicadores e, em caso afirmativo, de que forma.
| Arquivo | Descrição |
|---|---|
| wz-65.mq5 | EA criado no Assistente, cujo cabeçalho exibe os arquivos utilizados |
| SignalWZ-65.mqh | Arquivo da classe de sinais |
Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/18144
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.
Machine Learning e Data Science (Parte 41): YOLOv8v para detectar padrões nos mercados Forex e de ações
Trading com o Calendário Econômico MQL5 (Parte 9): Aprimorando a interação com as notícias com uma barra de rolagem dinâmica e uma exibição aprimorada
Está chegando o novo MetaTrader 5 e MQL5
Desenvolvimento de ferramentas para análise de Price Action (Parte 23): Indicador de força das moedas
- 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