Sair em candle positivo

 

Olá pessoal.

Estou testando um EA e preciso que ele saia da operação quando o primeiro candle que feche e ja me de lucro.

Estou usando essa função aqui mas não esta dando certo:


void verificaSaida()
  {

   fechamento2 = iClose(_Symbol, _Period, 3);


   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
      if(posicao.SelectByIndex(i))
         if(posicao.Symbol()==simbolo.Name() && magicNumber == posicao.Magic())
           {

            double preco_abertura= posicao.PriceOpen();

            if(posicao.PositionType()==POSITION_TYPE_BUY)
              {
               //if(rates[1].close < mediaMinima[1])
               if(fechamento2 > preco_abertura)
                 {
                  ulong PositionTicket = posicao.Ticket();
                  if(trade.PositionClose(PositionTicket, desvPts))
                    {
                     Print("Posição Fechada - sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());
                    }
                  else
                    {
                     Print("Posição Fechada - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());
                    }
                 }
              }
            else
               if(posicao.PositionType() == POSITION_TYPE_SELL)
                 {
                  //if(rates[1].close > mediaLow[1])
                  if(fechamento2 < preco_abertura)
                    {
                     ulong PositionTicket = posicao.Ticket();
                     if(trade.PositionClose(PositionTicket, desvPts))
                       {
                        Print("Posição Fechada - sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());
                       }
                     else
                       {
                        Print("Posição Fechada - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());
                       }
                    }
                 }
           }

  }

Alguem ja fez esse tipo de função?

Poderia me ajudar?

Obrigado desde ja

 
João Bernardes:

Olá pessoal.

Estou testando um EA e preciso que ele saia da operação quando o primeiro candle que feche e ja me de lucro.

Estou usando essa função aqui mas não esta dando certo:


Alguem ja fez esse tipo de função?

Poderia me ajudar?

Obrigado desde ja


Bom dia João!


Considerando que essa função esteja sendo chamada somente a cada nova barra, a variável fechamento2 deveria ser o valor de fechamento da última barra, ou seja:

fechamento2 = iClose(_Symbol, _Period, 1);


Se após essa mudança continuar ocorrendo erros, poste os logs, por favor.

 
Vinicius de Oliveira #:


Bom dia João!


Considerando que essa função esteja sendo chamada somente a cada nova barra, a variável fechamento2 deveria ser o valor de fechamento da última barra, ou seja:


Se após essa mudança continuar ocorrendo erros, poste os logs, por favor.

Cara fiz desse jeito e esta fechando no mesmo candle que abriu:




2022.07.24 11:24:44.154 2018.01.03 10:18:40   exchange buy 1 WIN$N at 78120 sl: 77945 tp: 78420 (78115 / 78120 / 78115)

2022.07.24 11:24:44.154 2018.01.03 10:18:40   deal #2 buy 1 WIN$N at 78120 done (based on order #2)

2022.07.24 11:24:44.154 2018.01.03 10:18:40   deal performed [#2 buy 1 WIN$N at 78120]

2022.07.24 11:24:44.154 2018.01.03 10:18:40   order performed buy 1 at 78120 [#2 buy 1 WIN$N at 78120]

2022.07.24 11:24:44.155 2018.01.03 10:18:40   CTrade::OrderSend: exchange buy 1.00 WIN$N sl: 77945 tp: 78420 [done]

2022.07.24 11:24:44.156 2018.01.03 10:18:40   exchange sell 1 WIN$N at 78115, close #2 (78115 / 78120 / 78115)

2022.07.24 11:24:44.156 2018.01.03 10:18:40   deal #3 sell 1 WIN$N at 78115 done (based on order #3)

2022.07.24 11:24:44.156 2018.01.03 10:18:40   deal performed [#3 sell 1 WIN$N at 78115]

2022.07.24 11:24:44.156 2018.01.03 10:18:40   order performed sell 1 at 78115 [#3 sell 1 WIN$N at 78115]

2022.07.24 11:24:44.158 2018.01.03 10:18:40   CTrade::OrderSend: exchange sell 1.00 position #2 WIN$N [done]

2022.07.24 11:24:44.158 2018.01.03 10:18:40   Posição Fechada - sem falha. ResultRetcode: 10009, RetcodeDescription: done

2022.07.24 11:24:44.790 2018.01.03 10:24:40   exchange buy 1 WIN$N at 78120 sl: 77945 tp: 78420 (78115 / 78120 / 78115)

2022.07.24 11:24:44.790 2018.01.03 10:24:40   deal #4 buy 1 WIN$N at 78120 done (based on order #4)

2022.07.24 11:24:44.790 2018.01.03 10:24:40   deal performed [#4 buy 1 WIN$N at 78120]

2022.07.24 11:24:44.790 2018.01.03 10:24:40   order performed buy 1 at 78120 [#4 buy 1 WIN$N at 78120]

2022.07.24 11:24:44.792 2018.01.03 10:24:40   CTrade::OrderSend: exchange buy 1.00 WIN$N sl: 77945 tp: 78420 [done]

2022.07.24 11:24:44.792 2018.01.03 10:24:40   exchange sell 1 WIN$N at 78115, close #4 (78115 / 78120 / 78115)

2022.07.24 11:24:44.792 2018.01.03 10:24:40   deal #5 sell 1 WIN$N at 78115 done (based on order #5)

2022.07.24 11:24:44.792 2018.01.03 10:24:40   deal performed [#5 sell 1 WIN$N at 78115]

2022.07.24 11:24:44.792 2018.01.03 10:24:40   order performed sell 1 at 78115 [#5 sell 1 WIN$N at 78115]

2022.07.24 11:24:44.794 2018.01.03 10:24:40   CTrade::OrderSend: exchange sell 1.00 position #4 WIN$N [done]

2022.07.24 11:24:44.794 2018.01.03 10:24:40   Posição Fechada - sem falha. ResultRetcode: 10009, RetcodeDescription: done


 
João Bernardes #:

Cara fiz desse jeito e esta fechando no mesmo candle que abriu:




2022.07.24 11:24:44.154 2018.01.03 10:18:40   exchange buy 1 WIN$N at 78120 sl: 77945 tp: 78420 (78115 / 78120 / 78115)

2022.07.24 11:24:44.154 2018.01.03 10:18:40   deal #2 buy 1 WIN$N at 78120 done (based on order #2)

2022.07.24 11:24:44.154 2018.01.03 10:18:40   deal performed [#2 buy 1 WIN$N at 78120]

2022.07.24 11:24:44.154 2018.01.03 10:18:40   order performed buy 1 at 78120 [#2 buy 1 WIN$N at 78120]

2022.07.24 11:24:44.155 2018.01.03 10:18:40   CTrade::OrderSend: exchange buy 1.00 WIN$N sl: 77945 tp: 78420 [done]

2022.07.24 11:24:44.156 2018.01.03 10:18:40   exchange sell 1 WIN$N at 78115, close #2 (78115 / 78120 / 78115)

2022.07.24 11:24:44.156 2018.01.03 10:18:40   deal #3 sell 1 WIN$N at 78115 done (based on order #3)

2022.07.24 11:24:44.156 2018.01.03 10:18:40   deal performed [#3 sell 1 WIN$N at 78115]

2022.07.24 11:24:44.156 2018.01.03 10:18:40   order performed sell 1 at 78115 [#3 sell 1 WIN$N at 78115]

2022.07.24 11:24:44.158 2018.01.03 10:18:40   CTrade::OrderSend: exchange sell 1.00 position #2 WIN$N [done]

2022.07.24 11:24:44.158 2018.01.03 10:18:40   Posição Fechada - sem falha. ResultRetcode: 10009, RetcodeDescription: done

2022.07.24 11:24:44.790 2018.01.03 10:24:40   exchange buy 1 WIN$N at 78120 sl: 77945 tp: 78420 (78115 / 78120 / 78115)

2022.07.24 11:24:44.790 2018.01.03 10:24:40   deal #4 buy 1 WIN$N at 78120 done (based on order #4)

2022.07.24 11:24:44.790 2018.01.03 10:24:40   deal performed [#4 buy 1 WIN$N at 78120]

2022.07.24 11:24:44.790 2018.01.03 10:24:40   order performed buy 1 at 78120 [#4 buy 1 WIN$N at 78120]

2022.07.24 11:24:44.792 2018.01.03 10:24:40   CTrade::OrderSend: exchange buy 1.00 WIN$N sl: 77945 tp: 78420 [done]

2022.07.24 11:24:44.792 2018.01.03 10:24:40   exchange sell 1 WIN$N at 78115, close #4 (78115 / 78120 / 78115)

2022.07.24 11:24:44.792 2018.01.03 10:24:40   deal #5 sell 1 WIN$N at 78115 done (based on order #5)

2022.07.24 11:24:44.792 2018.01.03 10:24:40   deal performed [#5 sell 1 WIN$N at 78115]

2022.07.24 11:24:44.792 2018.01.03 10:24:40   order performed sell 1 at 78115 [#5 sell 1 WIN$N at 78115]

2022.07.24 11:24:44.794 2018.01.03 10:24:40   CTrade::OrderSend: exchange sell 1.00 position #4 WIN$N [done]

2022.07.24 11:24:44.794 2018.01.03 10:24:40   Posição Fechada - sem falha. ResultRetcode: 10009, RetcodeDescription: done



Essa verificação deve ser feita somente a cada nova barra. Eu alertei pra isso na resposta anterior. Você está verificando a cada tick...


Você sabe como verificar a cada nova barra (isNewBar)? Se precisar de ajuda, avise...

Documentação sobre MQL5: Manipulação de eventos / OnTick
Documentação sobre MQL5: Manipulação de eventos / OnTick
  • www.mql5.com
OnTick - Manipulação de eventos - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Vinicius de Oliveira #:


Essa verificação deve ser feita somente a cada nova barra. Eu alertei pra isso na resposta anterior. Você está verificando a cada tick...


Você sabe como verificar a cada nova barra (isNewBar)? Se precisar de ajuda, avise...

Verdade Vinicius.

Vou colocar uma condição para chamar essa função somente quando der true no isNewbar() dentro do ontick.

Vou testar e respondo aqui.

Razão: