Para eliminar as ordens pendentes tente a lógica abaixo:
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderGetTicket(i) > 0)
{
if (OrderGetString(ORDER_SYMBOL)==Symbol())
{
trade.OrderDelete(OrderGetTicket(i));
}
}
}
Para eliminar as ordens pendentes tente a lógica abaixo:
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderGetTicket(i) > 0)
{
if (OrderGetString(ORDER_SYMBOL)==Symbol())
{
trade.OrderDelete(OrderGetTicket(i));
}
}
}
Sim amigo!! Fechar a ordem eu consigo... A dúvida é, como eu consigo idenficar se o candle anterior não abriu a ordem ? Sendo que desta forma:
if(!rates[1].close > rates[2].high + (30*_Point)
Ele olhara para o candle anterior e o candle anterior é o candle que foi usado como parâmetro pra abertura de ordem, logo ele não é maior que 30 pontos acima da máxima do anterior, dessa forma o robô fica posicionando e cancelando a ordem sem parar.
E mesmo que eu faça:
if(rates[1].close < ma[1]Isso não funciona tambem, no caso de uma ordem de compra.
Fala amigo, conseguiu achar a solução ?
Segue exemplo (não testado):
for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt --) { ulong ticket = OrderGetTicket(cnt); if(ticket == 0) { Print("Failed to get order ticket..."); return; } if(OrderGetString(ORDER_SYMBOL) == _Symbol) { int OrdTimeIdx = iBarShift(_Symbol, PERIOD_CURRENT, OrderGetInteger(ORDER_TIME_SETUP), false); if(OrdTimeIdx < 0) { return; } if(OrdTimeIdx > 0) { trade.OrderDelete(ticket); } } }
... Se preferir não utilizar o iBarShift():
. . . if(OrderGetInteger(ORDER_TIME_SETUP) < iTime(_Symbol, PERIOD_CURRENT, 0)) { trade.OrderDelete(ticket); }

- 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 criando um EA baseado no setup do Larry Williams, mas estou tendo dificuldade para fechar uma odem pendente, caso o proximo candle não ative a ordem.
Aqui está parte do meu codigo: