Programar um indicador de força relativa (RSI) entre dois ativos no MQL5 parece simples na teoria, mas na prática o desenvolvedor tropeça em três frentes: sincronização de tempos, tratamento de gaps e visualização clara no gráfico. O objetivo é comparar, por exemplo, EUR/USD e GBP/USD em tempo real, obtendo um número que mostre qual par está “mais forte” naquele instante. No mercado real, a diferença de liquidez e a variação de spreads podem distorcer a métrica, exigindo ajustes finos antes de confiar no sinal.
Como sincronizar as séries temporais
- Use iClose() com o mesmo timeframe para ambos os símbolos. Se um par não tem dados suficientes no timeframe escolhido, o indicador gera zeros e quebra a lógica.
- Implemente um fallback para PeriodSeconds() e ajuste o
CopyRatespara garantir que o número de barras seja idêntico.
Construindo o cálculo da força relativa
O núcleo do indicador é a razão entre os RSI de cada ativo:
| Par | RSI | Força Relativa |
|---|---|---|
| EUR/USD | rsi1 | rsi1 / rsi2 |
| GBP/USD | rsi2 |
Um valor acima de 1 indica que o primeiro ativo está mais “overbought” relativo ao segundo; abaixo de 1, o inverso. A fórmula simples, porém, esconde duas armadilhas:
- RSI é sensível a períodos curtos – escolha 14 como padrão, mas teste 7 ou 21 conforme a volatilidade.
- Gaps de preço criam picos artificiais; aplique
MathMaxeMathMinpara limitar o output entre 0,5 e 1,5.
Desenhando no gráfico
Utilize SetIndexBuffer para criar duas linhas: a razão e uma média móvel de 5 períodos, que suaviza ruídos. A cor verde para >1 e vermelha para <1 ajuda na leitura rápida, essencial em telas de celular.
Exemplo prático
Imagine que o RSI de EUR/USD esteja em 68 e o de GBP/USD em 55. A razão = 1,236 → sinal de força para EUR/USD. Se, no próximo candle, GBP/USD sobe para 70, a razão cai para 0,97, indicando reversão.
Limitações e quando o indicador falha
- Durante anúncios de alta volatilidade (dados de emprego, decisões de taxa), o RSI pode permanecer sobrecomprado por longos períodos, gerando falsos positivos.
- Mercados com baixa liquidez (ex.: pares exóticos) produzem spreads amplos que distorcem o RSI.
- Se um dos ativos é fortemente correlacionado ao outro, a razão tende a oscilar em torno de 1, reduzindo a utilidade.
FAQ rápido
- Posso usar outro oscilador? Sim, mas lembre-se de recalibrar a escala.
- É possível comparar mais de dois ativos? Sim, basta criar um array de RSIs e calcular razões pares a pares.
- Como otimizar no Strategy Tester? Defina o parâmetro “periodo RSI” como variável e rode um teste de 30 dias.
Depois de validar a lógica em histórico, teste ao vivo com o script oficial e ajuste os limites de cor conforme sua tolerância ao risco. O próximo passo é integrar alertas por push, para não perder a mudança de força enquanto está fora do terminal.
1. Configuração inicial do ambiente MQL5
Abra o MetaEditor, crie um novo Custom Indicator e salve como RelativeStrength.mq5. Defina as propriedades básicas:
| Parâmetro | Valor padrão |
|---|---|
| #property indicator_separate_window | true |
| #property indicator_buffers | 2 |
| #property indicator_color1 | clrDodgerBlue |
| #property indicator_color2 | clrTomato |
Essas linhas garantem que o indicador rode em janela própria e possua duas linhas de cor para alta e baixa de força.
2. Módulo de cálculo da força relativa
O cálculo clássico de RSI entre dois ativos usa a razão dos preços de fechamento. Implemente duas funções auxiliares:
double GetClose(string symbol, int shift)– retorna o preço de fechamento do symbol no deslocamentoshift.double ComputeRSI(double priceA, double priceB, int period)– aplica a fórmula RSI sobre a série de razõespriceA/priceB.
Exemplo de código condensado:
double ComputeRSI(double priceA,double priceB,int period) { static double rsiBuffer[]; double ratio=priceA/priceB; int copied=CopyClose(_Symbol,0,0,period+1,rsiBuffer); // cálculo simplificado usando iRSI da biblioteca padrão return(iRSIOnArray(ratio,period,0)); } 3. Checklist operacional – antes de compilar
- ✅ Definir símbolos a comparar (ex.: EURUSD vs. GBPUSD) nas
inputvariables. - ✅ Verificar disponibilidade de histórico suficiente (mínimo
period+1candles). - ✅ Incluir tratamento de erros para
CopyClose(retorno <0). - ✅ Ajustar
#property indicator_buffersao número de linhas que deseja plotar. - ✅ Salvar e recompilar – o MetaEditor exibirá warnings úteis.
4. Rotina recomendada de teste
1. Backtest rápido no Strategy Tester: escolha o par principal como ativo testado e o secundário como “símbolo externo”.
2. Validação visual: abra o gráfico, anexe o indicador e observe a correlação entre picos de força e movimentos reais de preço.
3. Filtro adicional: combine o RSI relativo com um oscilador de volume para reduzir falsos sinais.
5. Fluxograma de integração ao EA
Use o diagrama abaixo para entender onde inserir o sinal no seu Expert Advisor:
| Passo | Ação |
|---|---|
| 1 | Carregar indicadores (RSI relativo + EMA 20). |
| 2 | Verificar condição: RSI_rel > 70 && EMA20_uptrend. |
| 3 | Executar ordem de compra; definir stop loss em 1,5×ATR. |
| 4 | Monitorar saída: RSI_rel < 30 || EMA20_crossdown. |
6. Erros comuns e como evitá‑los
Erro 1 – Dados incompletos: ao mudar de timeframe, o histórico pode não estar carregado. Use RefreshRates() antes de chamar CopyClose.
Erro 2 – Divisão por zero: garanta que priceB nunca seja zero; inclua if(priceB==0) priceB=SymbolInfoDouble(_Symbol,SYMBOL_BID)+0.0001;.
Erro 3 – Lag de atualização: o indicador calcula na barra fechada. Para sinais intrabar, habilite #property indicator_chart_window e recalcule a cada tick.
7. Mini‑dashboard de acompanhamento diário
| Hora | RSI Relativo | Ação sugerida |
|---|---|---|
| 09:00 | 68 | Observar, sem entrada. |
| 12:30 | 73 | Considerar compra se EMA20 confirma. |
| 15:45 | 31 | Possível saída ou venda curta. |
8. FAQ rápido
- Posso comparar mais de dois ativos? Sim. Crie um array de razões e calcule o RSI médio.
- Qual período funciona melhor? 14 é padrão; teste 7‑21 para ajustar à volatilidade do par.
- O indicador consome muita memória? Não, usa apenas dois buffers; ideal para múltiplas instâncias.
Pronto para colocar em produção? Basta seguir o checklist, validar no tester e integrar ao seu EA. Boa codificação!
Perfil Ideal e Limitações Práticas
O indicador de força relativa entre ativos em MQL5 destina‑se a traders que já manipulam múltiplos símbolos e precisam de um comparativo rápido para decisões de alocação.
- Quem deve usar: desenvolvedores intermediários a avançados, scalpers que operam em períodos menores e gestores de portfólio que buscam rebalanceamento automatizado.
- Quem não terá bom aproveitamento: iniciantes que ainda não dominam a lógica de cálculo de RSI ou que operam apenas em um único ativo.
- Limitações contextuais: dependência de dados de tick‑by‑tick; em servidores com latência alta o indicador pode atrasar, distorcendo sinais de convergência.
- Ambientes recomendados: MetaTrader 5 com conexão VPS, contas que permitem múltiplos símbolos simultâneos e histórico completo de 1‑ano ao menos.
Checklist de Compatibilidade
| Critério | Condição mínima |
|---|---|
| Versão do MetaTrader | 5.00+ |
| Conexão | VPS ou conexão com < 30 ms de latência |
| Capacidade de memória | ≥ 256 MB livre para buffers de preço |
| Conhecimento prévio | RSI básico + manejo de arrays |
FAQ Contextual
- O indicador funciona em todos os prazos? Sim, porém em timeframes acima de H4 a atualização pode perder relevância para estratégias de alta frequência.
- Posso usar o mesmo script para CFDs e futuros? Tecnicamente, sim, porém a diferença de calendário de negociação pode gerar “gaps” que precisam ser filtrados.
- É possível combinar com outros osciladores? Claro, mas a sobrecarga de cálculo pode elevar o consumo de CPU em mais de 20 %.
Mini Cenário Real
Um trader de EUR/USD, GBP/JPY e AUD/CAD configurou o indicador para comparar o RSI de 14 períodos entre os três pares a cada 5 min. Quando o RSI do AUD/CAD cruzou acima de 70 enquanto os demais permaneciam abaixo de 50, o algoritmo disparou um alerta de sobrecompra relativa. O trader fechou a posição antes da correção de 15 pips, evitando perda de capital.
Parecer Editorial
Em termos de viabilidade, o script entrega exatamente o que promete: um panorama relacional de força entre ativos, pronto para alimentar estratégias de trading multiestratégia. No entanto, sua utilidade se dissolve se o usuário não dispõe de infraestrutura de rede robusta ou de experiência para interpretar sinais relativos.
Se o seu objetivo é fazer “drag‑and‑drop” de um indicador genérico sem entender os parâmetros subjacentes, este produto será mais um obstáculo que um ganho. Por outro lado, para quem já opera em diversificação e busca automatizar o “who‑is‑stronger‑now” será um acréscimo estratégico.
Decisão editorial: adquira somente se você preenche o checklist acima e está disposto a integrar o output a um framework de gestão de risco próprio.


