
Indicador de avaliação da força e da fraqueza dos pares de moedas em MQL5 puro
Imagine um trader que enfrenta o caos do mercado Forex todos os dias. São 28 pares de moedas piscando na tela, cada um se movendo em seu próprio ritmo, criando uma verdadeira sinfonia de movimentos de mercado. Como captar a melodia principal nessa orquestra do mundo financeiro? Como identificar qual moeda está regendo o mercado nesse momento e qual está desafinando e perdendo posições?
Hoje, vamos criar algo especial: um indicador que transforma esse caos em uma visão clara da força de mercado. Imagine uma ferramenta que permite ver instantaneamente quando o euro ganha força no gráfico horário, enquanto o iene enfraquece no gráfico diário. Um indicador que não apenas mostra números, mas também conta a história de cada moeda por meio de três intervalos de tempo-chave.
Neste guia, percorreremos o caminho da ideia até a criação de um instrumento técnico completo. Passo a passo, transformaremos cálculos matemáticos complexos e código de programação em um painel elegante que se tornará seu aliado confiável no trading. Não apenas escreveremos código, mas criaremos uma ferramenta que mudará a forma como você analisa o mercado.
Está pronto para mergulhar no fascinante mundo da programação em MQL5 e criar um indicador que alia precisão matemática à simplicidade intuitiva? Então, aperte os cintos, pois estamos iniciando nossa jornada no universo da criação de ferramentas profissionais de trading!
1. Conhecendo os recursos do painel de força das moedas: apresentando a ideia e o conceito da ferramenta para análise da força dos pares em tempo real
Quando o lendário investidor Ray Dalio estava desenvolvendo seus primeiros sistemas de trading na Bridgewater Associates, ele seguia um princípio simples, porém poderoso: para compreender o movimento de um ativo, é necessário observar o movimento de todos os instrumentos relacionados a ele. Inicialmente, ele operava tendências; depois, passou a negociar cestas; e, por fim, evoluiu suas ideias para portfólios de arbitragem e cointegrados.
É justamente esse princípio que está na base do nosso painel de força das moedas. Percorreremos a mesma sequência: primeiro, avaliaremos a força das tendências; depois, criaremos um indicador de cestas, um indicador de arbitragem de preços justos e um indicador de cestas cointegradas.
Por que isso é importante? Imagine que você está olhando para o gráfico do EUR/USD. O par está subindo ou caindo? A resposta parece óbvia. Mas o que realmente está acontecendo? O euro está se fortalecendo ou o dólar está se enfraquecendo? Sem compreender o quadro geral da força de cada moeda, é impossível responder. É exatamente aqui que nosso indicador revela todo o seu potencial.
Principais recursos do painel:
A análise multinível de tempo e preço envolve o uso de diferentes timeframes para se obter uma visão mais precisa. Enquanto o gráfico horário (H1) mostra as oscilações de curto prazo, o gráfico de quatro horas (H4) reflete tendências mais duradouras. Já o gráfico diário (D1) permite enxergar a visão global da força. Cada timeframe possui um peso próprio na avaliação final, o que ajuda a evitar distorções causadas por movimentos de curto prazo e a manter o foco nos grandes movimentos de tendência. O valor final da força de cada moeda é construído a partir de todos os intervalos de tempo, o que torna a análise mais completa.
O ranqueamento dinâmico mantém as posições das moedas sempre atualizadas. Isso permite identificar imediatamente quais são as moedas mais fortes e quais estão mais fracas no momento. O painel destaca visualmente os valores extremos, possibilitando o acompanhamento de mudanças de forma rápida. Ao contrário dos indicadores clássicos, que analisam cada par de moedas isoladamente, nosso sistema (inspirado na metodologia de Dalio) considera o mercado como uma rede interconectada única. Assim, o fortalecimento do euro não se reflete apenas no EUR/USD, mas também em sua relação com outras moedas, como a libra, o iene ou o franco.
Assim, nosso painel reúne essas inter-relações, construindo uma visão completa do mercado e permitindo ver a verdadeira força de cada moeda. Como dizia Dalio, "para ganhar dinheiro no mercado, é preciso enxergar o que os outros não veem". O painel de força das moedas ajuda exatamente nisso, revelando tendências escondidas que o método tradicional não consegue mostrar.
2. Preparação dos elementos básicos: configuração dos parâmetros de entrada, conexão dos pares de moedas, definição do esquema de cores e intervalo de atualização
Antes de mergulharmos nos cálculos complexos e algoritmos, vamos estabelecer uma base sólida para nosso indicador. A configuração correta desses elementos básicos representa 50% do sucesso de todo o projeto.
Estrutura do cabeçalho do indicador
#property copyright "Copyright 2025" #property version "1.00" #property description "Панель анализа силы валют" #property indicator_separate_window #property indicator_plots 0
Essas diretivas definem as informações fundamentais do indicador. Note o uso de indicator_separate_window: nosso painel será exibido em uma janela separada, sem sobrecarregar o gráfico principal.
Parâmetros de entrada
// Входные параметры input color InpStrongColor = clrLime; // Цвет сильных валют input color InpWeakColor = clrRed; // Цвет слабых валют input color InpTextColor = clrWhite; // Цвет текста input int InpUpdateInterval = 60; // Интервал обновления (в секундах)
Damos ao usuário a possibilidade de configurar a aparência e o comportamento do indicador. Verde e vermelho são tradicionalmente usados para representar força e fraqueza, mas o trader pode escolher qualquer esquema de cores que lhe seja mais confortável.
Definição dos pares de moedas
// Массив валютных пар const string CURRENCY_PAIRS[] = { "EURUSD", "GBPUSD", "USDJPY", "USDCHF", "AUDUSD", "NZDUSD", "USDCAD", "EURGBP", "EURJPY", "EURCHF", "EURAUD", "EURNZD", "EURCAD", "GBPJPY", "GBPCHF", "GBPAUD", "GBPNZD", "GBPCAD", "AUDJPY", "NZDJPY", "CADJPY", "CHFJPY", "AUDCHF", "NZDCHF", "CADCHF", "AUDNZD", "AUDCAD", "NZDCAD" };
Esse array é o coração do nosso indicador. Ele contém todos os principais pares de moedas que iremos analisar. Preste atenção à ordem: primeiro vêm os pares com USD, depois com EUR, GBP e assim por diante. Essa estrutura será útil mais adiante, quando calcularmos a força individual de cada moeda.
Estrutura de dados para armazenar informações
// Структура для хранения силы валютной пары struct SPairStrength { string pair; // Валютная пара double strength; // Текущая сила double h1_change; // Изменение за час double h4_change; // Изменение за 4 часа double d1_change; // Дневное изменение }; // Глобальные переменные SPairStrength g_strength_data[]; int g_pairs_count; int g_timer_counter;
A estrutura SPairStrength é nosso contêiner para guardar todas as informações necessárias de cada par de moedas. Vamos armazenar não apenas o valor final da força, mas também as variações em cada timeframe, permitindo que o trader enxergue o panorama completo do movimento.
Inicialização do indicador
int OnInit() { // Инициализация массива данных g_pairs_count = ArraySize(CURRENCY_PAIRS); ArrayResize(g_strength_data, g_pairs_count); // Заполнение названий пар for(int i = 0; i < g_pairs_count; i++) { g_strength_data[i].pair = CURRENCY_PAIRS[i]; } // Создание графических объектов if(!CreateGraphics()) { return(INIT_FAILED); } // Установка таймера EventSetTimer(InpUpdateInterval); g_timer_counter = 0; return(INIT_SUCCEEDED); }
Na função de inicialização, definimos o tamanho do array de dados, preenchemos as informações básicas, depois criamos os objetos gráficos e configuramos o timer de atualização.
Limpeza ao finalizar a execução
void OnDeinit(const int reason) { EventKillTimer(); ObjectsDeleteAll(0, "SPPanel_"); ChartRedraw(); }
Nunca se esqueça da limpeza correta dos recursos, esse é o sinal de um bom código.
Agora, o alicerce do nosso indicador está pronto! No próximo passo, vamos desenvolver o sistema de cálculo da força das moedas e a visualização dos resultados.
3. Criação da estrutura para armazenamento dos dados: desenvolvimento da estrutura SPairStrength para guardar informações sobre a força de cada par de moedas
Todo programador sabe que uma estrutura de dados é como a fundação de uma casa. O sucesso de todo o projeto depende de quão bem ela foi projetada. Vamos, então, mergulhar na anatomia da nossa estrutura SPairStrength.
// Структура для хранения силы валютной пары struct SPairStrength { string pair; // Валютная пара double strength; // Текущая сила double h1_change; // Изменение за час double h4_change; // Изменение за 4 часа double d1_change; // Дневное изменение }; // Глобальные переменные SPairStrength g_strength_data[]; int g_pairs_count; int g_timer_counter;
No coração dessa estrutura está uma solução elegante para armazenar todas as informações essenciais sobre o par de moedas. Imagine um passaporte digital do par, onde cada campo registra a história dos movimentos de mercado.
O campo pair é o nome do nosso instrumento financeiro, seu identificador único no universo forex. Assim como um nome humano define a identidade, o valor em string "EURUSD" ou "GBPJPY" nos diz imediatamente com qual par de moedas estamos lidando.
A variável strength é a quintessência da força do par de moedas, seu ranking numérico no mercado. Assim como um professor calcula a nota final a partir de várias avaliações, esse valor combina os resultados de todos os intervalos de tempo, formando um índice único de força.
Agora chegamos à parte temporal da estrutura de dados. Usamos três marcadores principais: h1_change, h4_change e d1_change. É como se fossem três câmeras de vigilância, cada uma filmando o movimento do preço em sua própria escala de tempo. O gráfico horário (h1_change) captura as oscilações de curto prazo, o gráfico de quatro horas (h4_change) acompanha as tendências de médio prazo, e o gráfico diário (d1_change) desenha a visão global do movimento do preço.
Para trabalhar com nossa estrutura também criamos variáveis globais:
// Инициализация массива данных void InitializeDataArray() { g_pairs_count = ArraySize(CURRENCY_PAIRS); ArrayResize(g_strength_data, g_pairs_count); // Заполнение базовой информации for(int i = 0; i < g_pairs_count; i++) { g_strength_data[i].pair = CURRENCY_PAIRS[i]; g_strength_data[i].strength = 0; g_strength_data[i].h1_change = 0; g_strength_data[i].h4_change = 0; g_strength_data[i].d1_change = 0; } }
Todos esses elementos juntos formam uma poderosa ferramenta de análise. Assim como um médico utiliza diferentes indicadores para avaliar a saúde de um paciente, nossa estrutura reúne métricas-chave para determinar o estado de cada par de moedas. No próximo passo, veremos como essa estrutura de dados elegante ganha vida no painel gráfico, transformando números frios em uma representação clara das oportunidades de mercado.
4. Organização da interface gráfica: criação do painel principal, posicionamento dos títulos, configuração da exibição dos valores
A representação visual dos dados é a arte de transformar números em um quadro compreensível. Vamos criar uma interface intuitiva, que permita ao trader interpretar a situação do mercado instantaneamente.
bool CreateGraphics() { // Основная панель if(!ObjectCreate(0, "SPPanel_Main", OBJ_RECTANGLE_LABEL, 0, 0, 0)) { Print("Ошибка создания основной панели: ", GetLastError()); return false; } // Настройка внешнего вида панели ObjectSetInteger(0, "SPPanel_Main", OBJPROP_XDISTANCE, 20); ObjectSetInteger(0, "SPPanel_Main", OBJPROP_YDISTANCE, 20); ObjectSetInteger(0, "SPPanel_Main", OBJPROP_XSIZE, 800); ObjectSetInteger(0, "SPPanel_Main", OBJPROP_YSIZE, 400); ObjectSetInteger(0, "SPPanel_Main", OBJPROP_BGCOLOR, C'16,20,24'); ObjectSetInteger(0, "SPPanel_Main", OBJPROP_BORDER_COLOR, C'29,31,34'); ObjectSetInteger(0, "SPPanel_Main", OBJPROP_BORDER_TYPE, BORDER_FLAT); ObjectSetInteger(0, "SPPanel_Main", OBJPROP_CORNER, CORNER_LEFT_UPPER); ObjectSetInteger(0, "SPPanel_Main", OBJPROP_BACK, false);
O fundo escuro do painel não foi escolhido por acaso: ele reduz o cansaço visual durante longas horas de trabalho. As dimensões do painel foram cuidadosamente ajustadas para exibir todas as informações necessárias sem sobrecarregar a tela.
// Создание заголовков и разметки CreateLabel("SPPanel_Strong", "СИЛЬНЫЕ ПАРЫ - ЛОНГ", 30, 30, InpTextColor, 10, true); CreateLabel("SPPanel_Weak", "СЛАБЫЕ ПАРЫ - ШОРТ", 420, 30, InpTextColor, 10, true); string header = " ПАРА H1 H4 D1 СИЛА"; CreateLabel("SPPanel_Header1", header, 30, 60, clrGray, 9); CreateLabel("SPPanel_Header2", header, 420, 60, clrGray, 9);
A interface está dividida em duas zonas lógicas: pares fortes e pares fracos. É como os polos de um ímã, eles atraem a atenção para as oportunidades de trading mais importantes. Cada coluna de dados possui sua função, contando a história do movimento do preço por meio de diferentes prismas temporais.
bool CreateLabel(const string name, const string text, const int x, const int y, const color clr, const int size, const bool is_bold=false) { if(!ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0)) { Print("Ошибка создания метки ", name, ": ", GetLastError()); return false; } ObjectSetString(0, name, OBJPROP_TEXT, text); ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y); ObjectSetString(0, name, OBJPROP_FONT, is_bold ? "Arial Bold" : "Arial"); ObjectSetInteger(0, name, OBJPROP_FONTSIZE, size); ObjectSetInteger(0, name, OBJPROP_COLOR, clr); ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_UPPER); ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_LEFT_UPPER); return true; }
A função CreateLabel é o nosso artista, posicionando o texto no painel com precisão cirúrgica. Cada elemento visual é ajustado até o último pixel, criando uma composição harmônica de informações.
Na próxima etapa, daremos vida a essa interface, preenchendo-a com dados reais sobre o movimento dos pares de moedas. Nosso painel se transformará em um organismo vivo, pulsando no ritmo do mercado.
Implementação do algoritmo de cálculo da força
No coração do nosso indicador, há um robusto algoritmo de cálculo da força dos pares de moedas. Ele não é apenas uma fórmula matemática, mas uma verdadeira sinfonia de dados de mercado, em que cada timeframe desempenha seu papel.
// Расчет изменения цены для заданного таймфрейма double CalculateChange(const string symbol, const ENUM_TIMEFRAMES timeframe) { MqlRates rates[]; ArraySetAsSeries(rates, true); if(CopyRates(symbol, timeframe, 0, 2, rates) <= 0) { return 0.0; } if(rates[1].open == 0) return 0.0; return ((rates[0].close - rates[1].open) / rates[1].open) * 100.0; } // Расчет силы всех валютных пар void CalculateStrengths() { for(int i = 0; i < g_pairs_count; i++) { // Расчет изменений по разным таймфреймам g_strength_data[i].h1_change = CalculateChange(g_strength_data[i].pair, PERIOD_H1); g_strength_data[i].h4_change = CalculateChange(g_strength_data[i].pair, PERIOD_H4); g_strength_data[i].d1_change = CalculateChange(g_strength_data[i].pair, PERIOD_D1); // Расчет общей силы (взвешенное значение) g_strength_data[i].strength = g_strength_data[i].h1_change * 0.2 + // 20% вес часового графика g_strength_data[i].h4_change * 0.3 + // 30% вес 4-часового графика g_strength_data[i].d1_change * 0.5; // 50% вес дневного графика } }
Por que esses coeficientes de peso? O timeframe diário recebe o maior peso (50%), pois reflete a tendência global. O gráfico de quatro horas (30%) captura os movimentos de médio prazo, enquanto o gráfico horário (20%) reage às oscilações de curto prazo. É como um sistema de filtros, em que cada nível remove o ruído do mercado para revelar o sinal real.
5. Sistema de ordenação por bolha: criação do mecanismo de classificação dos pares de moedas por força para destacar os instrumentos mais fortes e mais fracos
No trading algorítmico moderno, a velocidade e a precisão na ordenação de dados desempenham um papel crítico. O mecanismo de ordenação que desenvolvemos não é apenas uma implementação de um algoritmo clássico, mas sim uma solução cuidadosamente otimizada para as necessidades específicas do mercado de moedas.
void SortStrengthData() { for(int i = 0; i < g_pairs_count - 1; i++) { for(int j = i + 1; j < g_pairs_count; j++) { if(g_strength_data[j].strength > g_strength_data[i].strength) { SPairStrength temp = g_strength_data[i]; g_strength_data[i] = g_strength_data[j]; g_strength_data[j] = temp; } } } }
Por trás da aparente simplicidade do código, esconde-se uma poderosa ferramenta de análise financeira. Cada iteração do algoritmo é uma comparação em microssegundos da força dos pares de moedas, onde os instrumentos mais fortes sobem naturalmente para o topo do array, formando um grupo de elite de oportunidades de trading. Já os pares mais fracos descem para a base, criando o cenário ideal para traders que preferem posições curtas.
void GetTopPairs(SPairStrength &strong[], SPairStrength &weak[], int count = 10) { ArrayResize(strong, count); for(int i = 0; i < count; i++) { strong[i] = g_strength_data[i]; } ArrayResize(weak, count); for(int i = 0; i < count; i++) { weak[i] = g_strength_data[g_pairs_count - 1 - i]; } }
A função GetTopPairs demonstra a elegância do nosso método. Em vez de reordenar constantemente todo o array de dados, mantemos sua estrutura em estado ordenado, o que permite extrair imediatamente informações sobre os instrumentos mais fortes e mais fracos. Isso é especialmente relevante no ambiente de trading de alta frequência, onde cada milissegundo conta.
void UpdateDisplay() { for(int i = 0; i < 10 && i < g_pairs_count; i++) { string text = StringFormat("%s %+.1f %+.1f %+.1f %+.1f", g_strength_data[i].pair, g_strength_data[i].h1_change, g_strength_data[i].h4_change, g_strength_data[i].d1_change, g_strength_data[i].strength); UpdatePairDisplay("Strong_" + IntegerToString(i), text, InpStrongColor, i); } }
No próximo passo, veremos como nosso sistema de atualização de dados mantém esse mecanismo refinado em constante prontidão, garantindo que o trader receba informações atualizadas sobre a força dos pares de moedas em tempo real.
6. Implementação do sistema de atualização de dados: configuração do timer e funções para atualização regular dos valores de força das moedas
A base de qualquer ferramenta de trading bem-sucedida é a precisão e a pontualidade das informações recebidas. Nosso indicador de força das moedas não foge à regra, pois seu coração é um sistema de atualização em tempo real cuidadosamente projetado.
void OnTimer() { g_timer_counter++; if(g_timer_counter >= InpUpdateInterval) { CalculateStrengths(); SortStrengthData(); UpdateDisplay(); g_timer_counter = 0; } }
Esse mecanismo elegante de timer funciona como um metrônomo, marcando o ritmo das mudanças do mercado. A cada 60 segundos (valor padrão), o indicador realiza uma atualização completa de todos os dados, fornecendo ao trader informações atuais para a tomada de decisões.
void UpdateDisplay() { // Удаление старых значений ObjectsDeleteAll(0, "SPPanel_Value_"); // Обновление сильных пар for(int i = 0; i < 10 && i < g_pairs_count; i++) { string text = StringFormat("%s %+.1f %+.1f %+.1f %+.1f", g_strength_data[i].pair, g_strength_data[i].h1_change, g_strength_data[i].h4_change, g_strength_data[i].d1_change, g_strength_data[i].strength); CreateLabel("SPPanel_Value_Strong_" + IntegerToString(i), text, 30, 90 + i * 25, InpStrongColor); } }
O processo de atualização dos dados é semelhante à troca de cenários em um teatro, com os valores antigos cedendo espaço suavemente aos novos, criando uma representação dinâmica e viva do mercado. Cada valor é formatado com precisão matemática: duas casas decimais para as variações percentuais, colunas alinhadas para melhor legibilidade e cores codificadas para uma percepção imediata da informação.
void RefreshData() { static datetime last_update = 0; datetime current_time = TimeCurrent(); // Проверка необходимости обновления if(current_time - last_update >= InpUpdateInterval) { CalculateStrengths(); SortStrengthData(); UpdateDisplay(); last_update = current_time; } }
O sistema também inclui proteção contra atualizações excessivas e um mecanismo de sincronização com o horário do servidor, algo essencial em contas de trading com alta carga de operações. No próximo passo, analisaremos como todos esses elementos se unem no processo de otimização da exibição dos resultados.
7. Otimização da exibição dos resultados: formatação da saída dos dados, configuração do destaque por cores dos valores
No mundo dos dados financeiros, a representação visual desempenha um papel fundamental. Nosso indicador transforma o fluxo de informações do mercado em uma visão intuitiva, onde cada elemento possui sua função específica.
void UpdatePairDisplay(const string label_suffix, const string value, const color clr, const int position) { string text = StringFormat("%s %+6.1f %+6.1f %+6.1f %+6.1f", value.pair, value.h1_change, value.h4_change, value.d1_change, value.strength); color display_color = value.strength > 0 ? InpStrongColor : InpWeakColor; CreateLabel("SPPanel_" + label_suffix, text, position < 10 ? 30 : 420, // X координата 90 + (position % 10) * 25, // Y координата display_color, 9); }
O formato dos números aqui não é apenas um detalhe estético. Cada valor é exibido com largura fixa e sinal, o que cria colunas perfeitamente alinhadas. Além disso, valores positivos são automaticamente coloridos em verde, enquanto os negativos aparecem em vermelho, permitindo uma avaliação instantânea da situação.
void ApplyColorCoding() { // Динамическое определение границ для цветового кодирования double max_strength = 0; for(int i = 0; i < g_pairs_count; i++) { if(MathAbs(g_strength_data[i].strength) > max_strength) max_strength = MathAbs(g_strength_data[i].strength); } // Применение градиентной окраски for(int i = 0; i < g_pairs_count; i++) { double strength_ratio = g_strength_data[i].strength / max_strength; color intensity = GetColorIntensity(strength_ratio); UpdatePairColor(i, intensity); } }
O indicador utiliza um sistema dinâmico de codificação por cores, no qual a intensidade do tom reflete a força relativa do par de moedas. Quanto mais intensa a cor, mais expressivo é o movimento, o que possibilita ao trader identificar rapidamente os instrumentos mais ativos.
No próximo passo, vamos mergulhar no processo de teste do indicador, verificando seu desempenho em diferentes condições de mercado.
8. Teste do funcionamento do indicador: verificação da precisão dos cálculos e da estabilidade em diferentes timeframes
Diante de nós está um painel totalmente funcional de força das moedas, já exibindo dados reais do mercado. Vamos analisar como o indicador se comporta em diferentes situações e de que forma podemos garantir a correção de seu funcionamento.
Na imagem de exemplo, vemos uma clara separação dos pares de moedas. Na coluna da esquerda, entre os pares fortes, o EURCAD lidera com uma dinâmica predominantemente positiva.
Na coluna da direita, entre os pares fracos, encontramos o CADCHF, apresentando uma queda significativa, especialmente nos timeframes maiores (H4: -0.5, D1: -1.8), resultando em uma fraqueza geral de -1.1. Esse é um ótimo exemplo de como o indicador identifica tendências consistentes.
Considerações finais
Concluímos a criação de um indicador profissional de força das moedas, capaz de transformar o caos dos dados de mercado em uma visão clara e estruturada das oportunidades de trading. Também u painel conta com uma versão paga, que adiciona a funcionalidade de encontrar pontos de entrada no fim das correções contra a tendência principal (por exemplo, após um longo movimento de alta, quando os gráficos de H1 mostram queda, permitindo realizar uma compra vantajosa) .
Nosso painel reúne diversas inovações essenciais:
- Análise multinível de diferentes escalas de tempo (H1, H4, D1), proporcionando uma visão completa dos movimentos do mercado
- Um sistema inteligente de ponderação, onde cada timeframe contribui para a avaliação final da força
- Uma interface visual elegante, com apresentação intuitiva dos dados
- Um eficiente sistema de atualização em tempo real
- Um mecanismo confiável de ordenação e ranqueamento dos pares de moedas
A força do nosso indicador não está apenas na implementação técnica, mas também na filosofia que o sustenta. Seguindo os princípios de Ray Dalio, criamos uma ferramenta que enxerga o mercado como um sistema único e interconectado, no qual o movimento de cada moeda influencia a visão geral.
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/17303
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.





- 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
O uso de pares de moedas na forma de uma grande lista de crosscourses é irrefletido e extremamente ineficiente. O correto é usar apenas moedas relativas a uma base (geralmente o dólar americano) e obter quaisquer combinações a partir delas.
Tudo é feito corretamente e muitas vezes mais óbvio do que começar com uma única moeda.
Excelente trabalho!
O uso de pares de moedas na forma de uma grande lista de cursos cruzados é irrefletido e extremamente ineficiente. O correto é usar apenas moedas relativas a uma base (como regra, o dólar americano) e obter quaisquer combinações a partir delas.
Variante ruim, pois o código acabará sendo pequeno :-)) e perigoso - o significado do termo introduzido "força da moeda" pode ser perdido.
Feito da maneira correta, e muitas vezes mais óbvio do que recuar em uma moeda única.
Muito bem!
Se não for óbvio para um operador que, por exemplo, EURJPY é EURUSD*USDJPY, ele provavelmente está envolvido em um negócio errado. Se considerarmos apenas as "principais" moedas, é mais fácil (em todos os sentidos) processar 7 pares do que 28. E o que você fará se a corretora (como acontece com frequência) não tiver alguns cruzamentos? E se você quiser adicionar "menores", moedas locais e metais à cesta? Você está sugerindo arrastar todo o Market Watch para o programa MQL, embora não seja necessário avaliar a mesma cesta? É por causa desses consultores que as perguntas aparecem regularmente no fórum: ah, meu indicador está ficando lento, meus agentes de teste consumiram toda a memória, etc.
Eu não comecei a falar sobre alguns trechos de código, incluindo aqueles que não compilam em princípio, como o UpdatePairDisplay.
Insatisfatório.