English Русский 中文 Español Deutsch 日本語
preview
Técnicas do MQL5 Wizard que você deve conhecer (Parte 25): Testes e Operações em Múltiplos Timeframes

Técnicas do MQL5 Wizard que você deve conhecer (Parte 25): Testes e Operações em Múltiplos Timeframes

MetaTrader 5Sistemas de negociação |
144 2
Stephen Njuki
Stephen Njuki

Introdução

No nosso último artigo, analisamos Médias Pitagóricas, que são um grupo de médias móveis, algumas das quais são bastante inovadoras e ainda pouco comuns, apesar de seu potencial em beneficiar certos traders, como indicamos nos relatórios de teste. Essas Médias Pitagóricas foram representadas em um diagrama semicircular que resumiu o valor de cada média quando apresentado com dois valores desiguais que somavam o diâmetro do semicirculo. Entre os valores das cordas do semicirculo que não foram abordados no artigo, estava o valor indicado como Q, que representava a média quadrática dos dois valores a e b.

A média quadrática (MQ) também é comumente conhecida como raiz quadrática média e, como média, tende a ser mais influenciada pelos valores maiores no conjunto cuja média é buscada, diferentemente das médias geométrica e harmônica que analisamos no artigo anterior. Assim como a média geométrica, ela retorna apenas valores positivos, portanto, o conjunto amostrado cuja média será buscada precisa conter somente valores positivos. No entanto, o título deste artigo é sobre implementar estratégias de múltiplos timeframes em Expert Advisors montados pelo assistente, então a MQ será simplesmente a ferramenta que usaremos para mostrar como múltiplos timeframes podem ser testados em um Expert construído pelo assistente.

Então, por que testar em múltiplos timeframes é complicado com Experts montados pelo assistente? Bem, na minha opinião, isso ocorre porque a personalização necessária para cada sinal adicionado no espaço de montagem do assistente geralmente é negligenciada. A personalização dos nomes dos símbolos e dos timeframes para um Expert Advisor montado pelo assistente pode ser feita durante as etapas de seleção de sinal do assistente, mas, muitas vezes, as pessoas assumem que, ao escolher um sinal, já podem definir o símbolo e o período. Contudo, isso não deveria ser o caso na montagem do assistente. No artigo anterior, mostrei várias maneiras de acomodar operações com múltiplos símbolos em Experts montados pelo assistente, modificando o código-fonte montado. Uma abordagem óbvia e primária que não compartilhei foi realizar múltiplos anexos de sinais, onde cada anexo de sinal seria para um símbolo específico. Esses múltiplos anexos acontecem mesmo anexando o mesmo sinal. A personalização do sinal na atribuição do símbolo deve ser feita nos passos indicados abaixo:

n1


n2

De forma semelhante, múltiplos timeframes podem ser personalizados para cada Expert Advisor dentro de um sinal como um parâmetro de entrada (um código de exemplo está anexado). No entanto, a abordagem preferida pode ser atribuir cada timeframe necessário a um sinal e anexar este sinal independentemente na montagem do assistente. Os passos para personalizar timeframes para cada sinal são muito semelhantes aos que compartilhamos acima com operações de múltiplos símbolos.

f1


f2

Estratégias com múltiplos timeframes podem ser muito úteis em situações como quando se busca oportunidades de divergência entre os timeframes monitorados. Por exemplo, uma tendência de baixa no curto prazo (timeframe menor) pode ser um sinal importante se estiver ocorrendo em meio a uma tendência de alta no longo prazo (timeframe maior). Alternativamente, estratégias com múltiplos timeframes podem girar em torno de configurações de confirmação entre dois ou mais timeframes testados. Essas e outras razões explicam por que vamos nos aprofundar na implementação de estratégias de múltiplos timeframes em Expert Advisors montados pelo assistente.

Da mesma forma, as operações com múltiplos símbolos já analisadas neste artigo certamente ampliam as possibilidades de um trader. Neste artigo, no entanto, consideraremos três pares de moedas que têm o potencial de se neutralizar em uma configuração de arbitragem, mas não buscaremos desenvolver ou testar sistemas de arbitragem protegidos. Em vez disso, tentaremos explorar configurações comuns de médias móveis, se existirem, quando todos os pares são negociados por um único Expert Advisor.

Operações com múltiplos timeframes e múltiplos símbolos são muito interessantes, mas, devido à forma como os Experts montados pelo assistente são codificados, o design inerente permite que múltiplos sinais sejam adicionados em paralelo durante a montagem do assistente, com cada sinal adicionado atendendo a um símbolo ou timeframe específico. A principal razão para isso, na minha opinião, vem das fases de inicialização dos Expert Advisors montados pelo assistente. Existem quatro fases de inicialização da classe ‘CExpertBase’, que serve como a classe âncora não apenas para sinais, mas também para gerenciamento de dinheiro e trailing stop. Essas fases são: início da Inicialização, definição de valores de parâmetros, verificação de valores de parâmetros e, finalmente, finalização da Inicialização.

Especificamente, na fase de definição de parâmetros, é quando uma instância da classe de sinal do Expert é atribuída ao seu símbolo de negociação e timeframe. De acordo com a documentação, isso também pode acontecer na fase de verificação de parâmetros. Acredito que a fase de definição de parâmetros seja chamada de fase de ajuste, mas não consegui encontrar documentação que confirme isso. Como um símbolo de negociação determina muitos dos parâmetros de que a classe de sinal depende, como quais preços OHLC carregar e o tamanho do ponto, isso é algo que, por design, é definido uma vez durante a Inicialização. De forma semelhante, o timeframe usado para recuperar os buffers de preço OHLC precisa ser predefinido, e isso também ocorre durante a Inicialização, e nunca depois.

Essas restrições de design significam que a maneira pretendida de usar múltiplos símbolos e timeframes é quando uma instância de uma classe de sinal é predefinida durante a montagem do assistente, de forma que esses valores de símbolo e timeframe atuem como parâmetros constantes.

Ainda há uma ressalva em relação à negociação com múltiplos símbolos sob esse regime de pré-definição dentro do assistente. Como vimos no artigo sobre multi-moedas artigo, ainda precisamos criar uma instância de array da classe ‘CExpert’ e reatribuir os símbolos de negociação pretendidos para cada instância da classe de expert nesse array. Aparentemente, o que a atribuição de símbolo do assistente faz é apenas determinar qual símbolo será usado para buscar dados de preços OHLC sob as enumerações ‘USED_SERIES’. No entanto, o símbolo real negociado, após ser inicializado na classe ‘m_symbol’ Symbol-Info, é o símbolo atribuído na primeira etapa da montagem do assistente, antes que qualquer sinal seja selecionado.

s1

Essa restrição na negociação com múltiplos símbolos não se reflete na negociação com múltiplos timeframes, já que a atribuição de um timeframe a um sinal durante a montagem do assistente é suficiente para garantir que cada timeframe atribuído será usado no processamento de sinais uma vez que o Expert Advisor esteja operando.


Implicações da Fase de Ajuste na Inicialização.

Como só conseguimos definir personalizações para símbolos de negociação e timeframes na inicialização, essa restrição significa que não podemos explorar ou otimizar símbolos negociáveis ou timeframes ideais uma vez que um Expert Advisor tenha sido montado. Há soluções para isso, onde o símbolo de negociação ou timeframe desejado pode servir como um parâmetro de entrada para uma classe de sinal personalizada. Esses parâmetros de entrada seriam do tipo string e da enumeração de timeframes, respectivamente. Naturalmente, eles também teriam valores padrão, e, em geral, a atribuição de valores de timeframe personalizados deve ser mais direta, já que as opções vêm da enumeração ENUM_TIMEFRAMES já definida. No entanto, quando se trata de nomes de símbolos para negociação, um passo ou função extra deve ser usado para garantir que o nome do símbolo digitado seja realmente válido, esteja listado na Observação do Mercado e seja negociável.


Médias Móveis Quadráticas

As Médias Quadráticas (MQ), também conhecidas como raiz média quadrática, são simplesmente a raiz quadrada da média de todos os valores ao quadrado em um conjunto. Como a maioria das médias não aritméticas, elas têm um viés ou peso preferencial, que, ao contrário da média geométrica e da média harmônica, é em direção aos valores maiores do conjunto. No diagrama semicircular mostrado neste artigo anterior, onde os diferentes tipos de médias para dois valores desiguais a e b foram representados em escala dentro do semicirculo, a média quadrática também foi indicada, e era equivalente ao comprimento da corda marcada como Q.

Onde

  • n é o número de valores no conjunto.
  • x são os valores no conjunto em seus respectivos índices.

Usamos a MQ para desenvolver e testar um sinal personalizado que opera em múltiplos timeframes e outro sinal personalizado que também opera em múltiplos símbolos. No artigo anterior, devido ao viés ou peso preferencial em direção aos valores menores em um conjunto para a média geométrica e a média harmônica, desenvolvemos médias espelhadas que tinham viés em direção aos valores maiores. A implementação da MQ em MQL5 é apresentada no código abaixo:

//+------------------------------------------------------------------+
//| Quadratic Mean                                                   |
//+------------------------------------------------------------------+
double CSignalQM::QM(int Index, int Mask = 8)
{  vector _f;
   _f.CopyRates(m_symbol.Name(), m_period, Mask, Index, m_length);
   vector _p = _f*_f;
   double _m = _p.Mean();
   return(sqrt(_m));
}

Antes de começarmos a explorar possíveis aplicações, seria prudente fazer algo semelhante para o QM, já que ele tende mais para os valores maiores, tendo uma média espelhada chamada QM', que é mais ponderada para os valores menores. Mais uma vez, essa dicotomia entre ponderação de valores menores versus ponderação de valores maiores pode nos permitir derivar, respectivamente, buffers de preço baixo e buffers de preço alto.

No artigo anterior, usamos esses pares de buffer para gerar sinais de envelope (Bandas de Bollinger) e de divergência. Além dessas duas aplicações, podemos gerar aplicações alternativas, caso decidamos, por exemplo, derivar sinais OSMA. No entanto, como o objetivo principal deste artigo não é uma introdução ao QM ou Médias, mas sim a negociação de múltiplos símbolos e a negociação em múltiplos períodos de tempo, vamos nos manter nas aplicações já apresentadas no artigo anterior. Como sempre, o leitor pode modificar o código anexado de forma independente para explorar outras possibilidades de implementação do QM.

O espelho do QM, QM', pode ser dado por uma fórmula semelhante à que compartilhamos no último artigo:

//+------------------------------------------------------------------+
//| Inverse Quadratic Mean                                           |
//+------------------------------------------------------------------+
double CSignalQM::QM_(int Index, int Mask = 8)
{  double _am = AM(Index, Mask);
   double _qm = QM(Index, Mask);
   return(_am + (_am - _qm));
}

A tese central desta fórmula é que a média aritmética fornece a média mais imparcial e justa, implicando que qualquer distância desta média em relação a uma média alternativa pode ser ‘espelhada’ se tomarmos essa média aritmética bruta como uma linha de espelho. O código-fonte MQL5 que implementa isso, portanto, é idêntico ao que já compartilhamos e não será compartilhado aqui. Isso está anexado abaixo.

Mais uma vez, nosso objetivo é mostrar a negociação de múltiplos símbolos e múltiplos períodos de tempo. Dois tipos de Expert Advisors. Segue-se, portanto, que poderíamos ter o QM como um sinal de Bandas de Bollinger para um e o outro usando o sinal de Divergência, com ambas as implementações já apresentadas no último artigo.

Como destacamos acima, os Expert Advisors montados pelo MQL5 Wizard foram projetados para permitir testes (e negociações) em múltiplos períodos de tempo e múltiplos símbolos, com base em cada sinal. Cada sinal utilizado pelo Expert Advisor recebe seu símbolo e/ou período de tempo personalizados antes de ser adicionado no wizard. Isso implica que poderíamos ter testado múltiplos símbolos e múltiplos períodos de tempo em qualquer sinal, no entanto, como acabamos de ver novas médias no último artigo, estamos continuando nessa linha abordando médias quadráticas.


Desenvolvendo Classes de Sinal Personalizadas com QMA

Não realizaremos testes para o Expert Advisor multi-moeda, já que o que é montado no wizard requer modificações que já abordamos neste artigo. Como mencionado acima, os testes para Expert Advisors multi-símbolos e multi-períodos podem ser feitos com o mesmo arquivo de sinal, já que esses valores de símbolo e período de tempo são atribuídos por sinal. O processamento das condições de compra e venda seguirá a abordagem geral que utilizamos para gerar sinais para a média geométrica no artigo anterior. No entanto, estamos fazendo algumas alterações, pois no artigo anterior lidávamos com apenas um sinal e podíamos nos dar ao luxo de procurar por pontos de entrada mais precisos, como o cruzamento da banda superior do preço, que procurávamos ao buscar um sinal de venda, ou o cruzamento da banda inferior, que buscava um sinal de compra.

Neste artigo, como estamos lidando com múltiplos sinais em paralelo, é improvável que todos eles tenham um cruzamento ao mesmo tempo. Portanto, em vez de procurar por pontos de entrada tão precisos, usamos as bandas como um medidor de probabilidade para a tendência de alta e baixa, medindo quão acima (para baixa) ou abaixo (para alta) o preço de fechamento está em relação à linha de base das duas bandas. Assim, quanto mais acima da linha de base o preço de fechamento atual estiver, maior o peso para a tendência de baixa; da mesma forma, quanto mais abaixo da linha de base o preço de fechamento estiver, maior o peso para a tendência de alta.

Portanto, cada um dos sinais utilizados, que rodaram em diferentes períodos de tempo, fornece uma condição para tendência de alta ou baixa, dependendo de onde estão as posições de seus respectivos preços de fechamento. Essas condições são então combinadas utilizando os pesos otimizados de cada sinal para chegar a uma única condição, via média ponderada. É essa média que determina se as posições atuais podem ser fechadas e se novas posições podem ser abertas. O código para nossas condições de compra e venda modificadas é compartilhado abaixo:

//+------------------------------------------------------------------+
//| "Voting" that price will grow.                                   |
//+------------------------------------------------------------------+
int CSignalQM::LongCondition(void)
{  int result = 0;
   m_close.Refresh(-1);
   if(m_close.GetData(StartIndex()) > m_close.GetData(StartIndex() + 1) && m_close.GetData(StartIndex()) > BandsDn(StartIndex()) && m_close.GetData(StartIndex() + 1) < BandsDn(StartIndex() + 1))
   {  result = int(round(100.0 * ((m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1))/(fabs(m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1)) + fabs(BandsUp(StartIndex()) - BandsDn(StartIndex()))))));
   }
   return(result);
}
//+------------------------------------------------------------------+
//| "Voting" that price will fall.                                   |
//+------------------------------------------------------------------+
int CSignalQM::ShortCondition(void)
{  int result = 0;
   m_close.Refresh(-1);
   if(m_close.GetData(StartIndex()) < m_close.GetData(StartIndex() + 1) && m_close.GetData(StartIndex()) < BandsUp(StartIndex()) && m_close.GetData(StartIndex() + 1) > BandsUp(StartIndex() + 1))
   {  result = int(round(100.0 * ((m_close.GetData(StartIndex()+1) - m_close.GetData(StartIndex()))/(fabs(m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1)) + fabs(BandsUp(StartIndex()) - BandsDn(StartIndex()))))));
   }
   return(result);
}


Implementação Prática e Testes

Uma vez que um Expert que utiliza nosso sinal acima seja montado no wizard, se estivermos utilizando múltiplos períodos de tempo, então a parte do cabeçalho do arquivo *MQ5 ficará da seguinte forma:

//+------------------------------------------------------------------+
//|                                                           qm.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\My\SignalWZ_25.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedMargin.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title           = "qm_frame"; // Document name
ulong        Expert_MagicNumber     = 2028; //
bool         Expert_EveryTick       = false; //
//--- inputs for main signal
input int    Signal_ThresholdOpen   = 10;   // Signal threshold value to open [0...100]
input int    Signal_ThresholdClose  = 10;   // Signal threshold value to close [0...100]
input double Signal_PriceLevel      = 0.0;  // Price level to execute a deal
input double Signal_StopLevel       = 50.0; // Stop Loss level (in points)
input double Signal_TakeLevel       = 50.0; // Take Profit level (in points)
input int    Signal_Expiration      = 4;    // Expiration of pending orders (in bars)
input int    Signal_0_QM_Length     = 50;   // QM(50) H1 Averaging Length
input double Signal_0_QM_Weight     = 1.0;  // QM(50) H1 Weight [0...1.0]
input int    Signal_1_QM_Length     = 50;   // QM(50) H4 Averaging Length
input double Signal_1_QM_Weight     = 1.0;  // QM(50) H4 Weight [0...1.0]
input int    Signal_2_QM_Length     = 50;   // QM(50) D1 Averaging Length
input double Signal_2_QM_Weight     = 1.0;  // QM(50) D1 Weight [0...1.0]
//--- inputs for money
input double Money_FixMargin_Percent = 10.0; // Percentage of margin

Como pode ser visto, atribuímos um parâmetro de comprimento de média móvel e um parâmetro de ponderação a cada um dos três períodos de tempo escolhidos, que neste caso são PERIOD_H1, PERIOD_H4 e PERIOD_D1. Como o sinal gerado para o Expert Advisor é uma média ponderada da distância entre o preço de fechamento e a linha de base das Bandas de Bollinger, isso implica que sempre temos um sinal a qualquer momento, ao contrário dos pontos de entrada precisos que exploramos com a média geométrica no artigo anterior. Isso significa que provavelmente seria uma boa ideia realizar testes sem metas de preço para saídas, como stop loss ou take profits. No último artigo, a única meta de preço que utilizamos foi o take profit. A definição de stop loss é sempre promovida como uma estratégia sólida de limitação de perdas, no entanto, o preço do stop loss nunca é garantido e, além disso, de acordo com testes extensivos, a maioria das contas acaba esgotando a margem principalmente porque o tamanho da posição era muito otimista, em vez de não ter um stop loss. Obviamente, o debate sobre a importância de um stop loss é algo que, tenho certeza, continuará, mas essa é minha opinião. Para este artigo, no entanto, vamos nos manter com a meta de preço de take profit apenas, e o leitor pode fazer alterações nos parâmetros de entrada ao testar, de acordo com sua abordagem de gerenciamento de perdas.


Relatórios e Análise do Strategy Tester

Se realizarmos testes para o ano de 2023 no período de uma hora para o par EURJPY, enquanto buscamos um sinal equilibrado dos períodos de 1 hora, 4 horas e diário, obtemos os seguintes resultados como alguns dos nossos resultados justos:

r2

c2

Os resultados, de certa forma, estão bem distantes do que alcançamos quando estávamos confiando em entradas precisas a partir dos cruzamentos de preço das bandas superior e inferior. Portanto, realizamos testes com múltiplos períodos de tempo, utilizando a entrada precisa dos cruzamentos de preço das Bandas de Bollinger e, surpreendentemente, à parte o desempenho, o número de negociações realizadas ao esperar por esses cruzamentos foi maior do que na abordagem de média ponderada que acabamos de adotar acima. Abaixo estão os resultados:

r1

c1


Conclusão

Em conclusão, mostramos como múltiplos períodos de tempo podem ser usados em Expert Advisors montados pelo wizard. O principal ponto que cobrimos ao mostrar isso é que o processo de montagem no wizard permite que cada sinal tenha não apenas seu próprio período de tempo, mas também seu próprio símbolo de negociação. Personalizar um sinal atribuindo-lhe um período de tempo específico implica que os buffers OHLC para esse sinal estarão vinculados a esse período de tempo, e esse é um processo relativamente simples, ao contrário da personalização de um sinal para negociar um símbolo específico. Isso ocorre porque, quando os sinais são atribuídos para negociar um símbolo específico, mudanças extras precisam ser feitas na instância da classe ‘CExpert’, onde ela deve estar em formato de array para acomodar cada símbolo que será negociado. Ao demonstrar a negociação em múltiplos períodos de tempo, utilizamos as Médias Quadráticas como nosso sinal, onde, como no artigo anterior, derivamos uma versão espelhada dela, mais ponderada para os valores menores no conjunto de médias, dado que a média quadrática por padrão é mais ponderada para os valores maiores. Testamos isso em dois cenários, onde um estava sempre avaliando probabilidades e o outro procurava sinais de entrada específicos, e obtivemos resultados significativamente diferentes com cada abordagem.

A negociação em múltiplos períodos de tempo, em geral, tem como objetivo encontrar os pontos de entrada mais precisos ou ‘corretos’, monitorando simultaneamente um período de tempo maior para a tendência macro, enquanto escolhe o sinal para a entrada real no período de tempo menor. Para isso, talvez fosse mais prudente usar sinais diferentes, cada um com um período de tempo diferente, onde o período de tempo maior utilizaria a abordagem de probabilidade que consideramos em nosso primeiro caso de teste acima, e o período de tempo menor consideraria os pontos de cruzamento reais como o ponto de ativação do sinal.

Isso pode ser implementado e testado pelo leitor, já que ambas as instâncias dessas classes de sinal estão anexadas abaixo e, além disso, há implementações alternativas de múltiplos períodos de tempo que podem receber um período de tempo do indicador como parâmetro de entrada, onde esse período de tempo seria diferente do período de tempo do gráfico ao qual o Expert Advisor está anexado. Essa abordagem fornece uma solução para o problema de não poder selecionar o período de tempo ideal, que ocorre quando os períodos de tempo são atribuídos a um sinal durante a montagem no wizard. Ao tê-lo como um parâmetro de entrada do sinal, ele pode ser otimizado para melhor se ajustar à estratégia. Curiosamente, essa abordagem pode até ser usada para atribuir um período de tempo a um buffer de série OHLC personalizado. Seu principal inconveniente está na negociação multi-símbolos, onde, embora os preços e leituras de indicadores possam ser obtidos a partir de um nome de símbolo que é um parâmetro, a colocação de negociações só pode ser feita se mudanças forem feitas no arquivo do Expert Advisor montado, como mencionado acima.


Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/15185

Últimos Comentários | Ir para discussão (2)
Marcel Fitzner
Marcel Fitzner | 5 out. 2024 em 13:22
Além de mostrar como diferentes períodos de tempo estão sendo adicionados ao Assistente do EA, o artigo não demonstra como exatamente o teste de vários períodos de tempo é tratado no código - ou estou perdendo alguma coisa?
Khaled Ali E Msmly
Khaled Ali E Msmly | 8 out. 2024 em 19:44

OiStephen

Seu artigo é maravilhoso, obrigado por ele. Você pode anexar os arquivos para que possamos testá-lo ou o código no artigo é todo o código usado no experimento?

Teoria do caos no trading (Parte 2): Continuamos a imersão Teoria do caos no trading (Parte 2): Continuamos a imersão
Continuamos a imersão na teoria do caos nos mercados financeiros e analisamos sua aplicabilidade à análise de moedas e outros ativos.
Criando uma Interface Gráfica de Usuário Interativa no MQL5 (Parte 1): Criando o Painel Criando uma Interface Gráfica de Usuário Interativa no MQL5 (Parte 1): Criando o Painel
Este artigo explora os passos fundamentais para criar e implementar um painel de Interface Gráfica de Usuário (GUI) utilizando a Linguagem MetaQuotes 5 (MQL5). Painéis utilitários personalizados melhoram a interação do usuário no trading, simplificando tarefas comuns e visualizando informações essenciais de trading. Ao criar painéis personalizados, os traders podem otimizar seu fluxo de trabalho e economizar tempo durante as operações de trading.
Análise de Sentimento e Deep Learning para Trading com EA e Backtesting com Python Análise de Sentimento e Deep Learning para Trading com EA e Backtesting com Python
Neste artigo, vamos introduzir a Análise de Sentimento e Modelos ONNX com Python para serem usados em um EA. Um script executa um modelo ONNX treinado do TensorFlow para previsões de deep learning, enquanto outro busca manchetes de notícias e quantifica o sentimento usando IA.
Desenvolvendo um EA multimoeda (Parte 16): Influência de diferentes históricos de cotações nos resultados de testes Desenvolvendo um EA multimoeda (Parte 16): Influência de diferentes históricos de cotações nos resultados de testes
O EA em desenvolvimento deve apresentar bons resultados ao operar com diferentes corretoras. Porém, até agora, os testes foram realizados com base em cotações de uma conta de demonstração da MetaQuotes. Vamos verificar se o EA está pronto para operar em contas reais com cotações diferentes das utilizadas durante os testes e otimizações.