Tienes razón, sólo veo una parte de tu código y probablemente tienes diferentes planes en tu mente, y seguramente leer 4000 líneas de código no ayuda a tener la cabeza clara - yo también.
Usted dijo que su EA no puede cerrar un comercio. Así que tenemos que averiguar la causa y tratarla. Esta es la forma en que lo veo:
: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
}
Por lo tanto, usted tiene un problema, que no todos los pedidos se cierran. Este código, que ha pegado - NUNCA cerrará todas las órdenes. Así que si usted quiere un poco de ayuda - pegar todo el código que está trabajando con la orden de cierre. No hay necesidad de pegar todo el código (entiendo que quiere mantenerlo en secreto), pero nunca obtendrá ayuda sin pegar parte del código, que está involucrado en el problema (en este caso - no hay código para el cierre de órdenes cortas).
Tienes razón, sólo veo una parte de tu código y probablemente tienes diferentes planes en tu mente, y seguramente leer 4000 líneas de código no ayuda a tener la cabeza clara - yo también.
Usted dijo que su EA no puede cerrar un comercio. Así que tenemos que averiguar la causa y tratarla. Esta es la forma en que lo veo:
:D
Gracias onewithzachy por esta idea. Es útil en cualquier lugar como aquí.
Por favor, dejar que funcione durante otras horas, y me comprometo a actualizar.
¿No crees que 20000 reintentos es un poco excesivo? Si falla el cierre 5 veces seguidas entonces es hora de dejarlo.
Estaría bien imprimir el mensaje de error si el cierre falla.
Hola crossy,
Tienes razón, sólo veo una parte de tu código y probablemente tienes diferentes planes en tu mente, y seguramente leer 4000 líneas de código no ayuda a tener la cabeza clara - yo también.
Usted dijo que su EA no puede cerrar un comercio. Así que tenemos que averiguar la causa y tratarla. Esta es la forma en que lo veo:
:D
Por lo tanto, usted tiene un problema, que no todos los pedidos se cierran. Este código, que ha pegado - NUNCA cerrará todas las órdenes. Así que si usted quiere un poco de ayuda - pegar todo el código que está trabajando con la orden de cierre. No hay necesidad de pegar todo el código (entiendo que quiere mantenerlo en secreto), pero nunca obtendrá ayuda sin pegar parte del código, que está involucrado en el problema (en este caso - no hay código para el cierre de órdenes cortas).
Hola crossy,
Tienes razón, sólo veo una parte de tu código y probablemente tienes diferentes planes en tu mente, y seguramente leer 4000 líneas de código no ayuda a tener la cabeza clara - yo también.
Usted dijo que su EA no puede cerrar un comercio. Así que tenemos que averiguar la causa y tratarla. Esta es la forma en que lo veo:
:D
Gracias onewithzachy por esta idea. Es útil en cualquier lugar como aquí.
Por favor, dejar que funcione durante otras horas, y me comprometo a actualizar.
Gracias también a Raptor por su buen aporte.
Y.
Hola,
Como prometí, después de 6 horas el EA funciona, todo funciona correctamente, gracias a su
buen pensamiento.
Así que, mientras tanto sigamos adelante y espero que no haya ningún trubol.
Y.
Hola,
Como prometí, después de 6 horas el EA funciona, todo funciona correctamente, gracias a su
buen pensamiento.
Así que, mientras tanto sigamos adelante y espero que no haya ningún trubol.
Y.
Genial, por favor, actualízanos de nuevo en unas semanas.
:D