Verificação de ordens abertas

 

Olá, gostaria de saber de alguem pode me ajudar. 


Meu EA aloca algumas ordens pendentes em alguns pontos do gráfico, porém no momento que a ordem é acionada e logo menos fechado nou no take ou stop loss, eu precisaria verificar se ela esta aberta pra eu abrir uma novamente no mesmo lugar. 


Resumindo, como faço para verificar se uma certa ordem se encontra aberta ? 


Agradeço

 
Eduardo dos Santos:

Olá, gostaria de saber de alguem pode me ajudar. 


Meu EA aloca algumas ordens pendentes em alguns pontos do gráfico, porém no momento que a ordem é acionada e logo menos fechado nou no take ou stop loss, eu precisaria verificar se ela esta aberta pra eu abrir uma novamente no mesmo lugar. 


Resumindo, como faço para verificar se uma certa ordem se encontra aberta ? 


Agradeço

bool SemOrdem()
  {
   if(OrdersTotal()>0)
      return false;
   else
      return true;
  }
 
Eduardo dos Santos:


Boa tarde Eduardo,

Emitir uma ORDEM significa incluir uma ordem na LISTA DE ORDENS e se a ordem for a preço limite ela permanece na LISTA DE ORDENS até o gatilho ser acionado.  No acionamento do gatilho ela começa a ser preenchida e permanece na LISTA DE ORDENS até zerar o saldo. Estou falando isso para você sair da caixa do lote mínimo e fazer corretamente seu programa, pois para ordens com qtd >300 de (WIN) ou >15000 (BOBR4) a preço limite é comum a ORDEM ficar na lista de ordens  com um saldo não executado (  ou como se diz, ficar na pedra ).

Quando uma ORDEM começa a ser preenchida, o MT5 inclui uma(*) POSIÇÃO na lista de posições e inclui a ORDEM  na lista de histórico de ordens, essas duas listas vão sendo atualizadas  até a ordem ser totalmente preenchida... Acabou o preenchimento a então ORDEM é excluída da lista de ordens.

Continuando, agora temos uma POSIÇÃO aberta e esta fica aberta até que  um gatilho de STOP LOSS/GAIN seja acionado , nesse momento uma ordem a mercado é incluída na lista ordens e começa a ser preenchida imediatamente a qualquer preço, ao termino da execução a POSIÇÃO vai para histórico e a ORDEM vai para  lista de histórico de ordens.

Resumidamente é esse o fluxo que seu EA tem que enxergar para fazer o procedimento correto.

Agora é ler a documentação para saber como: LER A LISTA DE ORDENS, LER AS POSIÇÕES E LER OS HISTÓRICOS (ordens e posições).


(*) Modo Netting

 
Ruy Christian Hoffmann:
Ok. Mas como meu ea abre varias ordens pendentes. Queria saber de uma ordem em especifico. De repente pelo tickt. E nao de um modo geral
 
Eduardo dos Santos:
Ok. Mas como meu ea abre varias ordens pendentes. Queria saber de uma ordem em especifico. De repente pelo tickt. E nao de um modo geral

Eduardo, tem uns exemplos aqui no fórum use o localizar, como eu não controlo Ordens individualmente, então não tenho aqui pronto para te enviar.

Mas é fácil também, você só vai ter que paginar cada ordem e verificar uma-a-uma através de um For, por exemplo.

 

Boa tarde...

Tenho que saber alem de se tem ordem aberta.. tenho que saber se a ordem aberta é de Buy ou Sell... 

Alguem consegue me ajudar ??


Obrigado.

 
NWI.Leonardo1:

Boa tarde...

Tenho que saber alem de se tem ordem aberta.. tenho que saber se a ordem aberta é de Buy ou Sell... 

Alguem consegue me ajudar ??


Obrigado.

Boa noite!

   int MAGICNUM = 1112;
   //--- Checks positions and orders
   for(int Cnt = OrdersTotal() - 1; Cnt >= 0; Cnt--)
     {
      if(OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == _Symbol && OrderMagicNumber() == MAGICNUM)
           {
            if(OrderType() == OP_BUY)
              {
               . . .
              }
            else if(OrderType() == OP_SELL)
              {
               . . .
              }
            else if(OrderType() == OP_BUYSTOP)
              {
               . . .
              }
            else if(OrderType() == OP_SELLSTOP)
              {
               . . .
              }
            else if(OrderType() == OP_BUYLIMIT)
              {
               . . .
              }
            else if(OrderType() == OP_SELLLIMIT)
              {
               . . .
              }
           }
        }
     }