Delete order - ME ajudem!!!

 

Pessoal, me da uma força quero excluir apenas a ordem pendente de um unico robo, mas nao to conseguindo me ajudem por favor

//+------------------------------------------------------------------+
//| Delete limit/stop order                                          |
//+------------------------------------------------------------------+
void DeleteOrder()
  {
     for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name())
            
               if(!m_trade.OrderDelete(m_order.Ticket()))
                  
                     Print(__FILE__," ",__FUNCTION__,", ERROR: ","CTrade.OrderDelete ",m_order.Ticket());
  }
 
Qual erro vc está recebendo?
 
Silverveins:

Pessoal, me da uma força quero excluir apenas a ordem pendente de um unico robo, mas nao to conseguindo me ajudem por favor

Cara não é assim que você conseguirá resolver o seu problema ... usando este código que você mostrou, você irá remover todas as ordens, ( não confunda ordem com posição - mas isto não vem ao caso ), para resolver isto você tem que dizer na ORDEM qual o ROBÔ que criou a ordem, para fazer isto use o campo MAGIC na estrutura MqlTradeRequest, antes de enviar a ordem para o servidor de negociação via OrderSend, de forma que cada ROBO terá um numero magico, único e exclusivo, depois para remover apenas e somente as ordens que este robô postou, bastará você testar o numero mágico, que pode ser capturada facilmente já que ela irá fazer parte da ordem em si, desta forma quando os valores forem iguais, o numero mágico da ordem e o do robô, você deleta a ordem, caso contrário você mantem a ordem no lugar .... mas não é da forma como você esta tentado fazer, desta forma NUNCA irá funcionar ....  Procure na documentação ( MqlTradeRequest e OrderSend ) e use o campo MAGIC na estrutura MqlTradeRequest e problema resolvido .. 😁👍


 
Daniel Jose #:

Cara não é assim que você conseguirá resolver o seu problema ... usando este código que você mostrou, você irá remover todas as ordens, ( não confunda ordem com posição - mas isto não vem ao caso ), para resolver isto você tem que dizer na ORDEM qual o ROBÔ que criou a ordem, para fazer isto use o campo MAGIC na estrutura MqlTradeRequest, antes de enviar a ordem para o servidor de negociação via OrderSend, de forma que cada ROBO terá um numero magico, único e exclusivo, depois para remover apenas e somente as ordens que este robô postou, bastará você testar o numero mágico, que pode ser capturada facilmente já que ela irá fazer parte da ordem em si, desta forma quando os valores forem iguais, o numero mágico da ordem e o do robô, você deleta a ordem, caso contrário você mantem a ordem no lugar .... mas não é da forma como você esta tentado fazer, desta forma NUNCA irá funcionar ....  Procure na documentação ( MqlTradeRequest e OrderSend ) e use o campo MAGIC na estrutura MqlTradeRequest e problema resolvido .. 😁👍


Daniel,

Antes de mais nada obrigado pela resposta.

O problema é exatamente este, ele esta deletando todas as ordens, gostaria que só deletasse a ordem pendente do respectivo robo.

Não gostaria de usar o Magic Number pq estou usando o mesmo robo no templeate default para varios simbolos, teria outra maneira?

Tem algum exemplo que possa me basear mesmo que seja com magic number?

 
Silverveins #:

Daniel,

Antes de mais nada obrigado pela resposta.

O problema é exatamente este, ele esta deletando todas as ordens, gostaria que só deletasse a ordem pendente do respectivo robo.

Não gostaria de usar o Magic Number pq estou usando o mesmo robo no templeate default para varios simbolos, teria outra maneira?

Tem algum exemplo que possa me basear mesmo que seja com magic number?

normalmente a gente separa a ordem da seguinte forma:

- Magic number depois symbol e se quiser buy or sell...como vc não quer utilizar o magic number então é só selecionar todas as ordens que existem naquele simbolo e deletar

ou pega todas daquele symbol e depois separa so as buy e deleta

 
mas se existem 5 ordens no mesmo symbol e vc quer deletar somente um,então vc vai ter que explicar pra gente pq quer deletar aquela e nao a outra assim vamos conseguir te ajudar melhor
 
Eduardo Oliveira #:
mas se existem 5 ordens no mesmo symbol e vc quer deletar somente um,então vc vai ter que explicar pra gente pq quer deletar aquela e nao a outra assim vamos conseguir te ajudar melhor

Edu,


Obrigado pela resposta, eu vou usar somente uma ordem para cada symbol, você tem algum exemplo de codigo que possa usar neste caso.


Abraço.

 
Cesar Afif rezende Oaquim #:
Qual erro vc está recebendo?

Ele esta apagando todas as ordens pendentes e não somente a especifica.

 

A resposta é mais simples do que parece: Guarde o ticket da ordem em algum lugar e delete só a necessária, pelo ticket, ou faça algo assim (olhe o codigo) o problema é que vai apagar TODAS as ordens pendentes EURUSD

DeleteOrder("EURUSD");

//+------------------------------------------------------------------+
//| Delete limit/stop order                                          |
//+------------------------------------------------------------------+
void DeleteOrder(string simbolo)
  {
     for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==simbolo)
            
               if(!m_trade.OrderDelete(m_order.Ticket()))
                  
                     Print(__FILE__," ",__FUNCTION__,", ERROR: ","CTrade.OrderDelete ",m_order.Ticket());
  }
Silverveins #:

Ele esta apagando todas as ordens pendentes e não somente a especifica.

Razão: