¿Qué diseño es el correcto? - página 7

 
Vladon:
Yo solía publicar mi propio conjunto en el cierre de diferentes tipos en codebase en un momento dado.
En este caso estás dando archivos compilados, lo que no sirve de nada en esta rama.
Vladon:
https://www.mql5.com/ru/code/mt4

Y aquí, lo siento, foro equivocado.

No te ofendas.

 

Oh, no es eso :-), ahora.


https://www.mql5.com/ru/code/9052

 
int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}
Entonces ese diseño debería, en teoría, cerrar todas las órdenes, pero sólo cierra un par de la ventana actual, ¿cuál es el error?
 
Vladon:

Oh, no es eso :-), ahora.


https://www.mql5.com/ru/code/9052


Sí, su kit es bueno, sin embargo no puedo averiguar dónde está el error en mi código.
 
valenok2003:

Sí, su kit es bueno, sin embargo no puedo averiguar dónde está el error en mi código.

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}


for (int  Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
A veces la terquedad es sorprendente. En la página 3 de este hilo y más adelante se le mostró un ejemplo adecuado de anulación de órdenes. RTFM al final del día. ¿Cuántas veces tengo que decirte: Salir fuera de una matriz. Pedidos con número
OrdersTotal()

¡no existe! Entonces funcionará:

if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;
 
VladislavVG:
A veces la terquedad es simplemente asombrosa. En la página 3 de este hilo y más adelante se te mostró el ejemplo correcto de los excesos de pedidos. RTFM al final del día. Cuántas veces tengo que decírselo: Salga fuera del conjunto. Pedidos con número

¡no existe! Entonces funcionará:


Vladislav, te pido disculpas, no es terquedad, sino falta de atención. Estaba experimentando y no corregí el código.

Por supuesto que sí:

for (int  Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 

Sin embargo, esta no parece ser la razón, porque el diseño corregido

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}

sigue cerrando órdenes sólo en el par de la ventana en la que lanza el script, pero no en todos los pares.

 

En el perfil de la persona que comienza: "Escribo en MQL4, incluso a medida", un ejemplo típico de exceso de celo.

Comprendo que los programadores pueden ser medios. Te acostumbras a ello. Y yo mismo a veces escribo mal el código, aunque lo intento. Pero lo que sería...

Confirmo la vieja suposición de alguien, el titular tiene lana en la cabeza.

 
valenok2003:


Vladislav, te pido disculpas, no es terquedad, sino falta de atención. Estaba experimentando y no corregí el código.

Por supuesto que sí:

Sin embargo, no parece ser esta la razón, porque el diseño corregido

sigue cerrando órdenes sólo para un par de la ventana en la que se lanza el script, pero no todos los pares.

Si todos los pares, entonces usted no está usando Ask correctamente, Bid - está tomando del gráfico actual. Si se procesan errores al cerrar las órdenes, se verán los mensajes.

en lugar de Ask - MarketInfo(OrderSymbol(),MODE_ASK); en lugar de Bid - MarketInfo(OrderSymbol(),MODE_BID);

Buena suerte.

ZS y cambiar el nombre del script, porque según el nombre funciona correctamente ;).

 
gip:

En el perfil de la persona que comienza: "Escribo en MQL4, incluso a medida", un ejemplo típico de exceso de celo.

Comprendo que los programadores pueden ser medios. Te acostumbras a ello. Y yo mismo a veces escribo mal el código, aunque lo intento. Pero lo que sería...

Confirmo la vieja suposición de alguien, el iniciador del tema tiene lana en la cabeza.


Es una pena escuchar eso, por supuesto. Sin embargo, nunca acepto pedidos que no pueda cumplir. Y usted, espero, entiende que los niveles de pedido también pueden variar. Y, como alguien dijo, no hay que avergonzarse por no saber. Es una pena no preguntar.... Y según tengo entendido, este foro existe precisamente para ofrecer una oportunidad de aprendizaje. Y por eso tu, esnobismo no me queda claro, y tu crítica, no la acepto. Aunque reconozco que eres el más inteligente de este foro.

P.D. El arte de la programación no está en la capacidad de escribir código, sino en la capacidad de hacer un algoritmo correcto. Es como si hubieras conducido un Lada toda tu vida y luego te pasaras a Mercedes y no supieras dónde están todos los mandos y botones, no te has convertido en un mal conductor por ello.

 
VladislavVG:

Si todos los pares, usted no está usando Ask correctamente, Bid - está tomando del gráfico actual. Si se procesan errores al cerrar las órdenes, se vería el mensaje.

en lugar de Ask - MarketInfo(OrderSymbol(),MODE_ASK); en lugar de Bid - MarketInfo(OrderSymbol(),MODE_BID);

Buena suerte.


Muchas gracias, estoy procesando los errores, el mensaje vuelve - precio equivocado, pero no puedo averiguar lo que está mal.