Discussão do artigo "Automatizando Estratégias de Trading em MQL5 (Parte 7): Construindo um EA de Grid Trading com Escalonamento Dinâmico de Lote"

 

Novo artigo Automatizando Estratégias de Trading em MQL5 (Parte 7): Construindo um EA de Grid Trading com Escalonamento Dinâmico de Lote foi publicado:

Neste artigo, construímos um expert advisor de grid trading em MQL5 que utiliza escalonamento dinâmico de lote. Cobrimos o design da estratégia, a implementação do código e o processo de backtesting. Por fim, compartilhamos insights principais e boas práticas para otimizar o sistema de negociação automatizado.

O grid trading é uma abordagem sistemática que posiciona ordens de compra e venda em intervalos de preço predeterminados, permitindo que os traders capitalizem sobre as flutuações do mercado sem exigir previsões precisas de tendência. Essa estratégia se beneficia da volatilidade do mercado ao abrir e fechar negociações continuamente dentro de uma faixa de preço definida. Para aprimorar seu desempenho, integraremos o escalonamento dinâmico de lote, que ajustará os tamanhos das posições com base em condições predefinidas, como saldo da conta, volatilidade ou resultados de negociações anteriores. Nosso sistema de Grid Trading operará com os seguintes componentes principais:

  • Estrutura do Grid – Definiremos o espaçamento entre as ordens.
  • Regras de Entrada e Execução – Determinaremos quando abrir negociações no grid com base em distâncias fixas utilizando uma estratégia com o indicador Média Móvel.
  • Escalonamento Dinâmico de Lote – Implementaremos um mecanismo adaptativo de dimensionamento de lote que ajusta os tamanhos das posições com base nas condições de mercado ou parâmetros de risco predefinidos.
  • Gestão de Negociações – Incorporaremos stop-loss, take-profit e mecanismos opcionais de breakeven para gerenciar o risco de forma eficaz.
  • Estratégia de Saída – Desenvolveremos uma lógica para fechar posições com base em metas de lucro, limites de risco ou reversões de tendência.

Em resumo, aqui está a visualização completa do blueprint da estratégia para facilitar o entendimento.

LAYOUT DO GRID

Ao combinar um sistema de grid estruturado com dimensionamento adaptativo de lote, criaremos um EA que maximiza os retornos enquanto gerencia o risco de forma eficaz. Em seguida, implementaremos esses conceitos em MQL5.


Autor: Allan Munene Mutiiria

 
//--- Recuperar preços de barras recentes para a lógica do sinal de negociação
double low1  = iLow(_Symbol, _Period, 1);
double low2  = iLow(_Symbol, _Period, 2);
double high1 = iHigh(_Symbol, _Period, 1);
double high2 = iHigh(_Symbol, _Period, 2);

Essas variáveis não são usadas... por que esse código?

 
testtestmio71 #:

Essas variáveis não são usadas... por que esse código?

Elas são funções a serem reutilizadas.

 
Allan Munene Mutiiria #:
Elas são funções que devem ser reutilizadas.
no código ... onde você usa a variável low1?
 
testtestmio71 #:
no código ...onde você usa a variável low1?

Qual é o problema com as variáveis? Algum erro? Elas são funções que podem ser usadas em qualquer parte do código.

Se eu tivesse que explicar melhor, eu diria para obter os preços mínimo e máximo da barra anterior e da barra anterior + 1.

void ExecuteInitialTrade(double ask, double bid){
   //--- Sinal de compra: mínima da barra anterior acima da MA e barra anterior abaixo da MA
   if (iLow(_Symbol, _Period, 1) > maData[1] && iLow(_Symbol, _Period, 2) < maData[1]){
      gridSize = ask - gridSize_Spacing;     //--- Definir o acionador da grade abaixo da pergunta atual
      TakeProfit = ask + takeProfitPts;      //--- Definir TP para COMPRA
      if(obj_Trade.Buy(LotSize, _Symbol, ask, 0, TakeProfit,"Initial Buy"))
         Print("Initial BUY order executed at ", ask, " with LotSize: ", LotSize);
      else
         Print("Initial BUY order failed at ", ask);
      isTradeAllowed = false;
   }
   //--- Sinal de VENDA: máxima da barra anterior abaixo da MA e barra anterior acima da MA
   else if(iHigh(_Symbol, _Period, 1) < maData[1] && iHigh(_Symbol, _Period, 2) > maData[1]){
      gridSize = bid + gridSize_Spacing;     //--- Definir o acionador da grade acima do lance atual
      TakeProfit = bid - takeProfitPts;      //--- Definir TP para SELL
      if(obj_Trade.Sell(LotSize, _Symbol, bid, 0, TakeProfit,"Initial Sell"))
         Print("Initial SELL order executed at ", bid, " with LotSize: ", LotSize);
      else
         Print("Initial SELL order failed at ", bid);
      isTradeAllowed = false;
   }
}

Especificamente aqui. Você pode mudar para o uso das funções ou ainda excluí-las se não as quiser. Isso está claro? Obrigado.

 
double low1  = iLow(_Symbol, _Period, 1);

Por exemplo: ..... para o sinal de compra, você usou a variável iLow e não Low1

if (iLow(_Symbol, _Period, 1) > maData[1] && iLow(_Symbol, _Period, 2) < maData[1]){

é apenas para meu estudo, obrigado!!!

 

Essas quatro linhas podem ser comentadas

// double low1  = iLow(_Symbol, _Period, 1);
// double low2  = iLow(_Symbol, _Period, 2);
// double high1 = iHigh(_Symbol, _Period, 1);
// double high2 = iHigh(_Symbol, _Period, 2);
 
testtestmio71 #:

Essas quatro linhas podem ser comentadas

Claro. Então está tudo bem agora?

 

está ok.....best EA .

As 4 linhas são confusas para um novato

 
testtestmio71 #:

está ok.....best EA .

As 4 linhas são confusas para um novato

Certo

 

ótimo artigo - muito obrigado... Estou estudando a abordagem de negociação que usarei para editar minhas próprias negociações com símbolos de hashedge personalizados!

verificando....