Discussão do artigo "Automatização de estratégias de negociação em MQL5 (Parte 24): Sistema de negociação por rompimento da sessão de Londres com gerenciamento de risco e trailing stops"
Confira o novo artigo: Automatização de estratégias de negociação em MQL5 (Parte 24): Sistema de rompimento na sessão de Londres com gestão de risco e stops móveis.
Autor: Allan Munene Mutiiria
Baixei e executei esse código tal como está no Testador de Estratégias. Ele identifica a variação diária e desenha a caixa no gráfico. No entanto, ele não realiza uma operação todos os dias (embora se esperasse que o fizesse). Ao longo de um mês e meio, ele realizou apenas três operações.
A segunda questão é que os níveis de alta/baixa e os níveis de compra/venda no painel de controle não são atualizados.
Os níveis de alta e baixa da variação estão claramente sendo identificados no gráfico; portanto, imagino que os níveis de compra e venda também devam ser exibidos no gráfico e atualizados no painel de controle, já que são derivados diretamente dos níveis de alta e baixa da variação.
Que sugestões você tem para que isso funcione corretamente?
Agradeço desde já.
O segundo problema é que os níveis de alta/baixa e os níveis de compra/venda no painel de controle não são atualizados.
Os níveis de alta e baixa estão claramente sendo identificados no gráfico, então imagino que os níveis de compra e venda também devam ser exibidos no gráfico e atualizados no painel de controle, já que são derivados diretamente dos níveis de alta e baixa.
Quais sugestões vocês têm para que isso funcione corretamente?
Agradeço desde já.
Não consigo editar meu comentário; estou usando a versão 5.00, build 5214 do MT5
O segundo problema é que os níveis de alta/baixa e os níveis de compra/venda no painel de controle não são atualizados.
Os níveis de alta e baixa estão claramente sendo identificados no gráfico; portanto, imagino que os níveis de compra e venda também devam ser exibidos no gráfico e atualizados no painel de controle, já que são derivados diretamente dos níveis de alta e baixa.
Que sugestões vocês têm para que isso funcione corretamente?
Agradeço desde já.
Olá. Obrigado pela resposta gentil e pelo feedback. Supondo que você não tenha realmente lido o artigo, você simplesmente instalou e começou a usar; o programa foi desenvolvido para o símbolo AUDUSD, então teste-o lá primeiro antes de passar para outras moedas. Isso lhe dará uma compreensão mais profunda, pois os pontos precisam de ajuste conforme os pares mudam. Talvez você precise também verificar o diário em busca de possíveis pistas sobre o motivo da falha, que pode ser devido a configurações incorretas, mas, aparentemente, os pontos para AUDUSD e EURUSD deveriam funcionar quase da mesma forma. Por exemplo, você está executando no EURUSD; então, faremos um teste semelhante para verificar.
Pela imagem, veja que há um erro ali. Isso faria com que o teste não fosse executado corretamente.
Outra razão possível seria a falta de confiabilidade dos dados históricos, especialmente ao executar o teste com dados muito antigos. No seu exemplo, você executou a partir de 2020. Então, vamos testar e verificar para o período mostrado na sua captura de tela.
Após o teste do período de 01/01/2020 a 31/01/2020 — tecnicamente, janeiro de 2020 —, nenhuma operação foi efetivamente realizada. Como você pode ver, a qualidade dos dados nesse período é ruim; 15% é um índice muito pouco confiável. As seções em vermelho mostram dados totalmente nulos e, ao passar o mouse sobre elas, é possível ver o período em branco. Agora, vamos testar com os dados de janeiro de 2025 e ver o que acontece.
Pela imagem, dá para ver que, com 100% de qualidade do histórico, temos algumas negociações: 19 delas em um mês.
Portanto, com base no seu problema, talvez você precise verificar a qualidade dos seus dados de teste, já que comprovamos que as configurações padrão funcionam bem no símbolo EURUSD. Espero que isso esclareça as coisas e seja útil. Obrigado. Boas negociações.
O segundo problema é que os níveis de alta/baixa e os níveis de compra/venda no painel de controle não são atualizados.
Os níveis de alta e baixa estão claramente sendo identificados no gráfico, então imagino que os níveis de compra e venda também devam ser exibidos no gráfico e atualizados no painel de controle, já que são derivados diretamente dos níveis de alta e baixa.
Quais sugestões vocês têm para que isso funcione corretamente?
Agradeço desde já.
Quanto à sua segunda questão, o artigo explica isso, mas, supondo que o problema se deva a dados de teste insuficientes e para dar uma dica: quando a faixa está sendo calculada, você sempre verá o status “Calculando...” até que haja dados suficientes para definir a sessão da faixa de Londres ou qualquer outra sessão que você definir nas configurações. Supondo que você esteja usando as configurações padrão, com 3 horas pré-Londres, e que a data na captura de tela compartilhada seja 13 de fevereiro, duas barras após as 22h, o que equivale a 2 × 15 minutos = 30, o que resulta em 22h30, está fora do horário de cálculo do intervalo; portanto, os dados no painel devem continuar visíveis, já que o intervalo definido anteriormente ainda está em vigor, a menos que a primeira sessão ainda não tenha sido encontrada, e serão apagados assim que o cálculo do intervalo for concluído a partir da meia-noite. Veja abaixo:
const int PreLondonStartHour = 3; //--- Horário fixo de início antes de Londres const int PreLondonStartMinute = 0; //--- Minuto fixo antes do início da corrida em Londres
Talvez seja necessário conferir a lógica abaixo para identificar o intervalo
//+------------------------------------------------------------------+ //| Verificar as condições de negociação e inserir ordens | //+------------------------------------------------------------------+ void CheckTradingConditions(datetime currentTime) { MqlDateTime timeStruct; //--- Estrutura temporal TimeToStruct(currentTime, timeStruct); //--- Converter a hora datetime today = StringToTime(StringFormat("%04d.%02d.%02d", timeStruct.year, timeStruct.mon, timeStruct.day)); //--- Obter a data de hoje datetime preLondonStart = today + PreLondonStartHour * 3600 + PreLondonStartMinute * 60; //--- Início antes de Londres datetime londonStart = today + LondonStartHour * 3600 + LondonStartMinute * 60; //--- Início em Londres datetime londonEnd = today + LondonEndHour * 3600 + LondonEndMinute * 60; //--- Fim da parte de Londres analysisTime = londonStart; //--- Definir o tempo de análise if (currentTime < analysisTime) return; //--- Sair antes da análise double preLondonRange = GetRange(preLondonStart, currentTime, PreLondonHigh, PreLondonLow, PreLondonHighTime, PreLondonLowTime); //--- Obter intervalo if (preLondonRange < MinRangePoints || preLondonRange > MaxRangePoints) { //--- Verificar os limites do intervalo noTradeToday = true; //--- Definir como “sem negociação” sessionChecksDone = true; //--- Verificações concluídas DrawSessionRanges(preLondonStart, londonEnd); //--- Desenhar intervalos return; //--- Sair } LondonRangePoints = preLondonRange; //--- Definir pontos do intervalo PlacePendingOrders(PreLondonHigh, PreLondonLow, today); //--- Fazer pedidos noTradeToday = true; //--- Definir como “sem negociação” sessionChecksDone = true; //--- Verificações concluídas DrawSessionRanges(preLondonStart, londonEnd); //--- Desenhar intervalos }
e como ele é definido.
//+------------------------------------------------------------------+ //| Atualizar o painel com os dados atuais | //+------------------------------------------------------------------+ void UpdatePanel() { string rangeText = "Range (points): " + (LondonRangePoints > 0 ? DoubleToString(LondonRangePoints, 0) : "Calculating..."); //--- Formatar o texto do intervalo ObjectSetString(0, panelPrefix + "RangePoints", OBJPROP_TEXT, rangeText); //--- Atualizar o texto do intervalo //--- }
Veja a imagem abaixo; embora não saibamos o ano do seu teste, vamos considerar 2025. Se for 2020, como no seu caso, não temos dados de qualidade para esse ano; de qualquer forma, usamos 2025 e, portanto, o cálculo do intervalo deve começar à meia-noite.
Na imagem, você pode ver que os dados às 23h55 ainda estão intactos. No entanto, quando chega a meia-noite, devemos reiniciar. Veja abaixo.
Você pode ver que reiniciamos os dados à meia-noite para o cálculo do outro intervalo. Na verdade, quando o cálculo do intervalo é concluído, a visualização pode ajudar você a entender o que realmente aconteceu. Por exemplo, no seu caso, usando as configurações padrão, veremos as barras de intervalo das 03h00 às 08h00, pois foi isso que definimos. Veja abaixo:
Espero que isso esclareça as coisas novamente. Você pode ajustar tudo de acordo com seu estilo de negociação. Para evitar os problemas que você está enfrentando, é recomendável usar dados de teste confiáveis. Obrigado.
- 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








Novo artigo Automatização de estratégias de negociação em MQL5 (Parte 24): Sistema de negociação por rompimento da sessão de Londres com gerenciamento de risco e trailing stops foi publicado:
A estratégia de rompimento da sessão de Londres aproveita o aumento da volatilidade na abertura do mercado londrino. Ela identifica a faixa de preços formada nas horas que antecedem a abertura e posiciona ordens pendentes para operar seu rompimento. A sessão de Londres costuma apresentar alta liquidez e movimentos expressivos de preços, criando boas oportunidades de lucro. No entanto, a estratégia exige um gerenciamento de risco rigoroso para proteger o capital contra falsos rompimentos e drawdowns.
Para isso, calcularemos a máxima e a mínima do período anterior à sessão de Londres e utilizaremos esses níveis para posicionar ordens Buy Stop e Sell Stop com distâncias configuráveis em relação a eles. Também configuraremos a relação risco/retorno para determinar os níveis de take profit, trailing stops para assegurar os lucros e limites para o número de operações abertas e o drawdown diário, visando preservar o capital. Além disso, utilizaremos um painel de controle para monitoramento em tempo real e verificações do horário da sessão, garantindo que as operações sejam executadas apenas nos períodos definidos. O sistema também será capaz de se adaptar a diferentes condições de mercado. A seguir, apresentamos a estrutura conceitual do sistema que implementaremos.
Autor: Allan Munene Mutiiria