Encerramento de posições usando a função OrderSend

 

Bom dia!


Estou tentando as 17 horas fechar todas minhas posições em aberto e estou me deparando com o erro do terminar 4756

2020.11.05 09:08:40.256 2020.10.19 17:00:00   failed close position #32 sell 1 WINZ20 by position #32 [Invalid request]

2020.11.05 09:08:40.256 2020.10.19 17:00:00   Alert: erro ao envio de ordem no terminal fechar ordens as 17 hrs nº4756

Conseguem me ajudar ?

abaixo o código utilizado

if(dt.hour == 17)
       {        
         
           encerrarPosicoes();
       
       } 


 void encerrarPosicoes()
   { 
               
       int posicoesEmAberto = PositionsTotal();
       
        for(int i=(posicoesEmAberto-1);i>=0;i--)
        
       {
       
           ulong ticket = OrderGetTicket(i);
                 
           Print("numero do ticket Nº: ",ticket);
              
      
           MqlTradeRequest requisicao; 
           MqlTradeResult  resposta;
           
           ZeroMemory(requisicao);
           ZeroMemory(resposta);
           
              
       requisicao.action = TRADE_ACTION_CLOSE_BY;
       requisicao.order = ticket;
       requisicao.position_by= PositionGetInteger(POSITION_TICKET);
       requisicao.comment= "ordem fechando posição";
       
        //-- tratamento do erro
           ResetLastError();
           bool ok = OrderSend(requisicao,resposta);
             if(ok == false)
              {
                 Alert("erro ao envio de ordem no terminal fechar ordens as 17 hrs nº",GetLastError());// imprimi ultmo erro
               ExpertRemove();
              
                }
                else
                  {
                  Print("A ordem foi corretamente enviada para a corretora!!!!");
                
                   if(resposta.retcode==10008 || resposta.retcode==10009)
                    {
                     Print("ordem executada pela corretora");
                    }
                  else
                    {
                     Print("erro ao executar a ordem na corretora nº",GetLastError(),"retorno",resposta.retcode);
                      ExpertRemove();
                     
                      }
                   }
          } 
       }
     
 
diego_jaques:


Olá Diego,

TRADE CLOSE BY é para fechar duas posições, uma contrária a outra ao mesmo tempo, obviamente é uma opção para modo Headging.

 
Tente com              trade.PositionClose(Symbol());

Razão: