Você está certo, eu só vejo parcialmente seu código e você provavelmente tem planos diferentes em sua mente, e certamente ler 4000 linhas de código não ajuda a ficar de cabeça limpa - eu também.
Você disse que sua EA não pode fechar um negócio. Portanto, temos que descobrir o que a causa e lidar com ela. É assim que eu vejo as coisas:
:D
#include <stdlib.mqh>
...
for(int pos = OrdersTotal(); pos >= 0 ; pos--)
{
if ( OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)
&& OrderMagicNumber() == My_Magic_Number
&& OrderSymbol() == Symbol())
{
if (OrderType() = OP_BUY) // we close long
{
for (int try_to_close = 1; try_to_close <= 100; try_to_close ++)
{
bool success = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Yellow);
if (success = false)
{
int Error = GetLastError();
Print ("Unable to close ticket ",OrderTicket()," with error ",ErrorDescription(Error)); // from #include <stdlib.mqh>if (TRY_CLOSE_AGAIN_OR_NOT(Error) == false ) break; //
}
}
}
if (OrderType() = OP_SELL) // we close short
{
// do the same with sell
}
}
}
//+------------------------------------------------------------------+bool TRY_CLOSE_AGAIN_OR_NOT(int err) // True
{
switch (err)
{
case1: return (false); //error_string="no error"; case2: return (false); //error_string="common error"; case3: return (false); //error_string="invalid trade parameters"; case4: Sleep (500); return (true); //error_string="trade server is busy"; case5: return (false); //error_string="old version of the client terminal"; case6: Sleep (500); return (true); //error_string="no connection with trade server"; case7: return (false); //error_string="not enough rights"; case8: Sleep (500); return (true); //error_string="too frequent requests"; case9: return (false); //error_string="malfunctional trade operation (never returned error)"; case64: return (false); //error_string="account disabled"; case65: return (false); //error_string="invalid account"; case128: Sleep (500); return (true); //error_string="trade timeout"; case129: return (false); //error_string="invalid price"; case130: return (false); //error_string="invalid stops"; case131: return (false); //error_string="invalid trade volume"; case132: return (false); //error_string="market is closed"; case133: return (false); //error_string="trade is disabled"; case134: return (false); //error_string="not enough money"; case135: return (false); //error_string="price changed"; case136: return (false); //error_string="off quotes"; case137: Sleep (500); return (true); //error_string="broker is busy (never returned error)"; case138: return (false); ////error_string="requote"; case139: return (false); //error_string="order is locked"; case140: return (false); //error_string="long positions only allowed"; case141: return (false); //error_string="too many requests"; //case 145: return (true); //error_string="modification denied because order too close to market"; case146: Sleep (500); return (true); //error_string="trade context is busy"; //case 147: return (true); error_string="expirations are denied by broker"; //case 148: return (true); error_string="amount of open and pending orders has reached the limit"; //case 149: return (true); error_string="hedging is prohibited"; case150: return (false); //error_string="prohibited by FIFO rules"; default : return (false);
}
return(false); // can not manage the err we get out
}
Portanto, você tem um problema, que NÃO TODOS os pedidos estão fechados. Este código, Você colou - NUNCA fechará TODAS as ordens. Portanto, se Você quiser alguma ajuda - cole TODO o código que está trabalhando com o FECHAMENTO da ordem. Não há necessidade de colar todo o Seu código (Eu entendo que Você quer manter segredo), mas Você nunca obterá ajuda sem colar parte do código, que está envolvida no problema (neste caso - NÃO há código para fechamento de pedidos CURTOS).
Você está certo, eu só vejo parcialmente seu código e você provavelmente tem planos diferentes em sua mente, e certamente ler 4000 linhas de código não ajuda a ficar de cabeça limpa - eu também.
Você disse que sua EA não pode fechar um negócio. Portanto, temos que descobrir o que a causa e lidar com ela. É assim que eu vejo as coisas:
:D
Obrigado onewewithzachy por esta idéia. Ela é útil em qualquer lugar, como aqui.
Por favor, deixe-o trabalhar por mais algumas horas, e prometo atualizá-lo.
Obrigado Raptor, também, por sua agradável contribuição.
Não pense que 20000 retratos é um pouco excessivo. Se ela não fechar 5 vezes seguidas, é hora de parar.
Seria bom imprimir a mensagem de erro se o fechamento falhar.
Olá, crossy,
Você está certo, eu só vejo parcialmente seu código e você provavelmente tem planos diferentes em sua mente, e certamente ler 4000 linhas de código não ajuda a ficar de cabeça limpa - eu também.
Você disse que sua EA não pode fechar um negócio. Portanto, temos que descobrir o que a causa e lidar com ela. É assim que eu vejo as coisas:
:D
Portanto, você tem um problema, que NÃO TODOS os pedidos estão fechados. Este código, Você colou - NUNCA fechará TODAS as ordens. Portanto, se Você quiser alguma ajuda - cole TODO o código que está trabalhando com o FECHAMENTO da ordem. Não há necessidade de colar todo o Seu código (Eu entendo que Você quer manter segredo), mas Você nunca obterá ajuda sem colar parte do código, que está envolvida no problema (neste caso - NÃO há código para fechamento de pedidos CURTOS).
Olá, crossy,
Você está certo, eu só vejo parcialmente seu código e você provavelmente tem planos diferentes em sua mente, e certamente ler 4000 linhas de código não ajuda a ficar de cabeça limpa - eu também.
Você disse que sua EA não pode fechar um negócio. Portanto, temos que descobrir o que a causa e lidar com ela. É assim que eu vejo as coisas:
:D
Obrigado onewewithzachy por esta idéia. Ela é útil em qualquer lugar, como aqui.
Por favor, deixe-o trabalhar por mais algumas horas, e prometo atualizá-lo.
Obrigado Raptor, também, por sua agradável contribuição.
Y.
Olá,
Como prometi, após 6 horas o EA funciona, tudo funciona corretamente, graças ao seu
bom raciocínio.
Então, enquanto isso, vamos em frente e espero que não haja nenhum trubolo.
Y.
Olá,
Como prometi, após 6 horas o EA funciona, tudo funciona corretamente, graças ao seu
bom raciocínio.
Então, enquanto isso, vamos em frente e espero que não haja nenhum trubolo.
Y.
Ótimo!,por favor, nos atualize novamente em uma semana
:D