Bom dia,
uma observação antes da resposta, use o copiador de código Alt-S para colar códigos, a postagem fica mais inteligível, então vamos lá.
... Ao executar o start do BUY/SELL STOP LIMIT a oferta vai para pedra, até aqui tudo OK, mas dizer que o MT5 que não pode exclui-la e que você é obrigado a usar o HB isso é um problema e deve ser relatado ao suporte da XP.
... Agora um fato que você precisa saber é que as operações feitas no HB não são sincronizadas com o terminal MT5 de forma automática, então quando você exclui uma ordem pelo HB ela permanece no MT5 e ao tentar excluir dá o erro "Modification Failed due to order or position being close to market"
Bom dia,
uma observação antes da resposta, use o copiador de código Alt-S para colar códigos, a postagem fica mais inteligível, então vamos lá.
... Ao executar o start do BUY/SELL STOP LIMIT a oferta vai para pedra, até aqui tudo OK, mas dizer que o MT5 que não pode exclui-la e que você é obrigado a usar o HB isso é um problema e deve ser relatado ao suporte da XP.
... Agora um fato que você precisa saber é que as operações feitas no HB não são sincronizadas com o terminal MT5 de forma automática, então quando você exclui uma ordem pelo HB ela permanece no MT5 e ao tentar excluir dá o erro "Modification Failed due to order or position being close to market"
Estou usando meu EA na XP e estou tendo um problema, que não achei solução aqui no forum. Quando eu envio uma ordem Sell Stop Limit ou Buy Stop Limit e ela atinge o preço de envio da ordem mas não é executada e fica pendente eu não consigo excluir até ela conseguir ser executada. NNão consigo excluir pelo MT5 na XP, mas consigo pelo home broker. Quando eu vou deletar ela, aparece esse erro: "Modification Failed due to order or position being close to market"
Alguém sabe alguma solução?
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
{
if(myorder.SelectByIndex(i)) // selects the pending order by index for further access to its properties
{
if(myorder.Symbol()!=mysymbol.Name() || myorder.Magic()!=Magic_Number)continue;
if(myorder.OrderType()!=ORDER_TYPE_BUY_STOP_LIMIT && myorder.OrderType()!=ORDER_TYPE_SELL_STOP_LIMIT)continue;
if(myorder.OrderType()==ORDER_TYPE_BUY_STOP_LIMIT)
{
price_order=OrderGetDouble(ORDER_PRICE_OPEN);
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)>price_order+2*ticksize)
{
DeleteALL();
CloseALL();
mensagens=__FUNCSIG__+" Ordem BUY STOP LIMIT aberta não executada. Fechando Posições."+"\n"
+"BID "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits)+
" Preço da Ordem "+DoubleToString(price_order,_Digits);
WriteToFile(filelog,mensagens);
Print(mensagens);
return;
}
}
if(myorder.OrderType()==ORDER_TYPE_SELL_STOP_LIMIT)
{
price_order=OrderGetDouble(ORDER_PRICE_OPEN);
if(SymbolInfoDouble(_Symbol,SYMBOL_ASK)<price_order-2*ticksize)
{
DeleteALL();
CloseALL();
mensagens=__FUNCSIG__+" Ordem SELL STOP LIMIT aberta não executada. Fechando Posições."+"\n"
+"ASK "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits)+
" Preço da Ordem "+DoubleToString(price_order,_Digits);
WriteToFile(filelog,mensagens);
Print(mensagens);
return;
}
}
}//Order Select
}//Fim for
Tente usar a função abaixo (realize alterações na mesma se necessário). Veja se resolve o problema.
//+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //|Funcao exclui ordens pendentes | //+------------------------------------------------------------------+ void ExcluiOrdens() { //-- Declaração e inicialização do pedido e resultado MqlTradeRequest request={0}; MqlTradeResult result={0}; int total=OrdersTotal(); // número de ordens pendentes colocadas //--- iterar todas as ordens pendentes colocadas for(int i=total-1; i>=0; i--) { ulong order_ticket=OrderGetTicket(i); // bilhete da ordem ulong magic=OrderGetInteger(ORDER_MAGIC); // MagicNumber da ordem //--- se o MagicNumber coincidir if(magic==EXPERT_MAGIC) { //--- zerar os valores do pedido e o resultado ZeroMemory(request); ZeroMemory(result); //--- instalação de parâmetros de operação request.action=TRADE_ACTION_REMOVE; // tipo de operação de negociação request.order=order_ticket; // bilhete da ordem //--- envio do pedido if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // Se não for capaz de enviar o pedido, exibir um código de erro string msg = "Verifique o robo urgente!";//-- Mensagem de notificacao APP SendNotification(msg); //--- informações sobre a operação PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); } } }
Você diz que: Quando exclue pelo home broker, imediatamente ela some do mt5, Não é ao contrário? Tenho que rever isso. Já faz uma tempão que não uso o HB da XP. pois só o opero usando o MT5, vou na Segunda fazer um teste.

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Estou usando meu EA na XP e estou tendo um problema, que não achei solução aqui no forum. Quando eu envio uma ordem Sell Stop Limit ou Buy Stop Limit e ela atinge o preço de envio da ordem mas não é executada e fica pendente eu não consigo excluir até ela conseguir ser executada. NNão consigo excluir pelo MT5 na XP, mas consigo pelo home broker. Quando eu vou deletar ela, aparece esse erro: "Modification Failed due to order or position being close to market"
Alguém sabe alguma solução?
for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
{
if(myorder.SelectByIndex(i)) // selects the pending order by index for further access to its properties
{
if(myorder.Symbol()!=mysymbol.Name() || myorder.Magic()!=Magic_Number)continue;
if(myorder.OrderType()!=ORDER_TYPE_BUY_STOP_LIMIT && myorder.OrderType()!=ORDER_TYPE_SELL_STOP_LIMIT)continue;
if(myorder.OrderType()==ORDER_TYPE_BUY_STOP_LIMIT)
{
price_order=OrderGetDouble(ORDER_PRICE_OPEN);
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)>price_order+2*ticksize)
{
DeleteALL();
CloseALL();
mensagens=__FUNCSIG__+" Ordem BUY STOP LIMIT aberta não executada. Fechando Posições."+"\n"
+"BID "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits)+
" Preço da Ordem "+DoubleToString(price_order,_Digits);
WriteToFile(filelog,mensagens);
Print(mensagens);
return;
}
}
if(myorder.OrderType()==ORDER_TYPE_SELL_STOP_LIMIT)
{
price_order=OrderGetDouble(ORDER_PRICE_OPEN);
if(SymbolInfoDouble(_Symbol,SYMBOL_ASK)<price_order-2*ticksize)
{
DeleteALL();
CloseALL();
mensagens=__FUNCSIG__+" Ordem SELL STOP LIMIT aberta não executada. Fechando Posições."+"\n"
+"ASK "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits)+
" Preço da Ordem "+DoubleToString(price_order,_Digits);
WriteToFile(filelog,mensagens);
Print(mensagens);
return;
}
}
}//Order Select
}//Fim for