Discussão do artigo "Guia passo a passo para iniciantes para escrever um Expert Advisor no MQL5" - página 27

 
Rustam Ayupov #:

Caro Vladimir! Cheguei ao seu trabalho titânico para iniciantes, minhas prioridades estão mudando, a negociação de demonstração será feita à sua maneira, e a principal coisa agora é a sua escola para iniciantes, eu mastigo valiosos apertos de sua experiência, é inestimável, não há palavras. Se eu chegar a saber como inserir um trailing stop nesse EA, provavelmente o farei com prioridade, porque, como resultado da otimização avançada, o EA cria longos takeprofits, sua rede de segurança se tornou gritante. E, no decorrer do treinamento em sua escola, provavelmente aprenderei a ver os erros, sem os quais não há programas que funcionem, e a corrigi-los. OBRIGADO.

Atenciosamente, Rustam.

De nada, Rustam!

Com todo o respeito, Vladimir.

 
Valeriy Yastremskiy #:

Responder ou Novo comentário, na parte inferior Anexar um arquivo.

OBRIGADO pela simplicidade engenhosa.) E uma pergunta: como você, com sua experiência em trailing, inseriria um desses no EA?

 
MrBrooklin #:

Por favor, Rustam!

Saudações, Vladimir.

Encontrei um "método de rastreamento" único, simples e genial, do Expert Advisor, o próprio autor, que, como é tradicional para esse desenvolvimento, não é executado como o autor comentou. Ele, assim como eu, provavelmente também é um idiota, mas um dos grandes). Ele prometeu que, quando o preço se inverte, a posição aberta anteriormente é fechada, bem, sim, seria ótimo se fosse... mas apenas duas posições abertas estão suspensas, em ambas as direções, e não são fechadas. Anteriormente, antes de seu primeiro conselho, havia uma série de posições abertas em ambas as direções, que não foram fechadas. Você está tentando apertar essa cereja do bolo?

 
Rustam Ayupov #:

OBRIGADO pela simplicidade engenhosa) E uma pergunta: como você, com sua experiência em trailing, poderia inserir um nesse EA?

Se o resultado com o trailing for melhor do que sem ele, então deixe-o.

 
Valeriy Yastremskiy #:

Se o resultado for melhor com a rede de arrasto do que sem ela, então deixe-a.

Não é difícil inserir, mas o que inserir? Para testar e avaliar.

 
Rustam Ayupov #:

Não é difícil colocá-lo, mas o que é preciso colocar? Para testá-lo.

O código do trawl em seu EA sem trawl. É melhor colocar o código de arrasto em uma função. E chamar o trawl por condição, se houver uma ordem.

 
Rustam Ayupov #:

Encontrei um "método de trailing" único, simples e genial, do Expert Advisor, do próprio autor, que, como é tradicional para esse desenvolvimento, não é executado como o autor comentou. Ele, assim como eu, provavelmente também é um idiota, mas um dos grandes). Ele prometeu que, quando o preço se inverte, a posição aberta anteriormente é fechada, bem, sim, seria ótimo se fosse... mas apenas duas posições abertas estão suspensas, em ambas as direções, e não são fechadas. Anteriormente, antes de seu primeiro conselho, havia uma série de posições abertas em ambas as direções, que não foram fechadas. Você está tentando apertar essa cereja do bolo?

Olá, Rustam! Para que possamos continuar a cooperar de forma produtiva, primeiro você precisa aprender a anexar o código do EA com problemas à sua mensagem. Se você tiver problemas ao testar o EA, precisará salvar esse código com um novo nome, compilá-lo e anexá-lo à mensagem. Você deve salvar o EA com um novo nome e compilá-lo !!! Caso contrário, ficaremos confusos em diferentes variantes ao nos comunicarmos com você.

Se, por algum motivo, não for possível anexar o código do EA, você poderá usar outra maneira:

  1. No MetaEditor, destaque o código do EA com problemas pressionando Ctrl+A.
  2. Copie o código do EA pressionando o botão Ctrl+C.
  3. Crie uma mensagem que deseja publicar aqui no fórum e, pressionando o botão AL+S, abra um campo no qual você precisa colar o código copiado pressionando o botão Ctrl+V.
  4. Adicionar sua mensagem ao fórum

Se você não aprender a anexar ou colocar em suas postagens o código do EA com problemas, o diálogo com você será inútil.

Saudações, Vladimir.

 
MrBrooklin #:

Olá, Rustam! Para que possamos continuar a cooperar de forma produtiva, primeiro você precisa aprender a anexar o código do EA com problemas a uma mensagem. Se você tiver problemas ao testar o EA, precisará salvar esse código com um novo nome, compilá-lo e anexá-lo à mensagem. Você deve salvar o EA com um novo nome e compilá-lo !!! Caso contrário, você e eu ficaremos confusos em diferentes variantes ao nos comunicarmos com você.

Se, por algum motivo, você não puder anexar o código do EA, poderá usar outra maneira:

  1. No MetaEditor, destaque o código do EA com problemas pressionando Ctrl+A.
  2. Copie o código do EA pressionando o botão Ctrl+C.
  3. Crie uma mensagem que você deseja publicar aqui no fórum e, pressionando o botão AL+S, abra um campo onde você precisa colar o código copiado pressionando o botão Ctrl+V.
  4. Adicione a mensagem ao fórum

Se você não aprender a anexar ou publicar o código do EA com problemas em suas mensagens, o diálogo com você será inútil.

Atenciosamente, Vladimir.

Desculpe-me pelo atraso, eu me esgotei durante o fim de semana, mas encontrei a causa do último problema, pois o corretor FXopen simplesmente não cresceu para o MT5. Bem, e me ensinou a simplicidade da seleção de arquivos, para enviar. Os dois primeiros são a sua otimização do trabalho do autor, em que você interrompeu a desatenção do autor no código, com a abertura maciça de posições, em vez de uma, a única, e os dois segundos são a sua declaração de fechamento de uma posição quando o preço se inverte. Vale a pena trabalhar no segundo, afinal de contas, o autor, se não terminou, mas queria lucrar).

Arquivos anexados:
 
Rustam Ayupov #:

Desculpe-me pelo atraso, mas no fim de semana fiquei esgotado, 24 horas, mas encontrei a causa do último problema, pois a corretora FXopen simplesmente não se adaptou ao MT5. Bem, e me ensinou a simplicidade da seleção de arquivos, para enviar. Os dois primeiros são a sua otimização do trabalho do autor, em que você impediu a desatenção do autor no código, com a abertura maciça de posições, em vez de uma, uma única, e os dois segundos são a sua declaração de fechamento de uma posição quando o preço se inverte. Vale a pena trabalhar no segundo, afinal de contas, o autor, se não terminou, mas queria lucrar).

Bem, com este, o último, ainda estou resolvendo, tentando entender alguma coisa e começar a navegar nele, enquanto seguro os lucros de longo prazo. Já estou pronto para as surpresas do autor no futuro, a estrada será percorrida por aquele que caminha).

Arquivos anexados:
 
Rustam Ayupov #:

Bem, com este último, ainda estou tentando entender alguma coisa e começar a me orientar nele, por enquanto para fazer hedge long takeprofits. Já estou pronto para as surpresas do autor no futuro, o caminho será percorrido por quem caminha).

Olá, Rustam! Anexei a versão funcional desse Expert Advisor no final da mensagem. As alterações foram feitas nesta seção do código:

//--- Colocando tudo junto 
   if(Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action = TRADE_ACTION_DEAL;                                  // execução imediata da ordem
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // último preço de venda
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // par de moedas
         mrequest.volume = Lot;                                                 // número de lotes a serem negociados
         mrequest.magic = EA_Magic;                                             // Número mágico do pedido
         mrequest.type = ORDER_TYPE_BUY;                                        // Ordem de compra
         mrequest.type_filling = ORDER_FILLING_FOK;                             // Tipo de execução da ordem
         mrequest.deviation=100;                                                // Desvio do preço atual
         //--- enviar pedido
         bool check=OrderSend(mrequest,mresult);
         // obter o código de resultado
         if(mresult.retcode==10009 || mresult.retcode==10008) /A solicitação foi concluída ou o pedido foi feito
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            ResetLastError();           
            return;
           }
        }
     }
/*
 2. Verifique se há uma configuração de venda/curta: MA-8 diminuindo para baixo, 
 preço anterior fechado abaixo dele, ADX > 22, -DI > +DI
*/.
//--- Declare variáveis do tipo bool para manter nossas condições de venda
   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  // MA-8 diminuindo para baixo
   bool Sell_Condition_2 = (p_close <maVal[1]);                         // O preço anterior fechou abaixo da MA-8
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         // Valor ADX atual maior que o mínimo (22)
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         // -DI maior que +DI

//--- Colocando tudo junto
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3 && Sell_Condition_4 && PositionsTotal()==0)
        {
         ZeroMemory(mrequest);
         mrequest.action=TRADE_ACTION_DEAL;                                // execução imediata da ordem
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // último preço do lance
         mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                          // par de moedas
         mrequest.volume = Lot;                                              // número de lotes a serem negociados
         mrequest.magic = EA_Magic;                                          // Número mágico do pedido
         mrequest.type= ORDER_TYPE_SELL;                                     // Ordem de venda
         mrequest.type_filling = ORDER_FILLING_FOK;                          // Tipo de execução da ordem
         mrequest.deviation=100;                                             // Desvio do preço atual
         //--- enviar pedido
         bool check=OrderSend(mrequest,mresult);
         // obter o código de resultado
         if(mresult.retcode==10009 || mresult.retcode==10008) /A solicitação foi concluída ou o pedido foi feito
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+

O que está destacado em amarelo foi adicionado:

&& PositionsTotal()==0

e também removi a condição relacionada a Buy_opened e Sell_opened:

         // alguma posição de compra aberta?
         if(Buy_opened)
           {
            Alert("We already have a Buy Position!!!");
            return;    // Não abra uma nova posição de compra
           }
.
.
.
         // alguma posição de venda aberta?
         if(Sell_opened)
           {
            Alert("We already have a Sell position!!!");
            return;    // Não abra uma nova posição de venda
           }

Atenciosamente, Vladimir.

Arquivos anexados: