Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 133

 
Hola a todos. ¿Me pueden decir cómo cambiar este código for(int=OrdersTotal()-1;i>=0;i--){
En este momento se están cerrando las que se han abierto más recientemente. ¡Quiero que cierre primero los primeros!
 
Rustam Bikbulatov:
Hola a todos. ¿Me pueden decir cómo cambiar este código for(int=OrdersTotal()-1;i>=0;i--){
En este momento se están cerrando las que se han abierto más recientemente. ¡Quiero que cierre primero los primeros!
for(int i=0; i<OrdersTotal(); i++)
 
Rustam Bikbulatov:
Hola a todos. Por favor, dígame cómo cambiar este código for(int=OrdersTotal()-1;i>=0;i--){
En este momento se están cerrando las que se han abierto más recientemente. ¡Quieres que cierre primero los primeros!
for( int i = 0; i < OrdersTotal(); i++ )
   {
    if( /*Функция закрытия. Если вернула истину*/ )
       i--;
   }

Inténtalo de esta manera. En lugar de los comentarios, debe utilizar la función para cerrar la orden. No he comprobado su funcionamiento. Y aquí, creo que tendremos que llamar a la función que calcula la cantidad de pedidos cada vez, ya que el número de pedidos disminuirá.

También podemos probar esta variante:

while( OrdersTotal() > 0 )
   /*Функция закрытия ордера*/
 
Vitaly Muzichenko:
for(int i=0; i<OrdersTotal(); i++)
no se cierra bien)
 
Rustam Bikbulatov:
se cierra de forma incómoda)
La forma correcta es recordar qué órdenes hay que cerrar, ordenar la lista como sea necesario y cerrar en ese orden

no es correcto, pero por ahora (hasta alguna compilación) funciona: al cerrarse con éxito i--



 
Rustam Bikbulatov:
Hola a todos. ¿Me pueden decir cómo cambiar este código for(int=OrdersTotal()-1;i>=0;i--){
En este momento se están cerrando las que se han abierto más recientemente. ¡Quiero que cierre primero los primeros!

//+------------------------------------------------------------------+
//|           Закрыть все позиции начиная с первых                   |
//+------------------------------------------------------------------+

double CloseOrders()

{
  for(int i=0; i<OrdersTotal(); )
  {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    break;
    
    if (OrderMagicNumber() != mn)
    break;
    
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
                          break;
    }
    
    if(result == false)
    {
      Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      i++;
    }  
  }
return (True);
}
// End
 
Rustam Bikbulatov:
Se cierra de forma incómoda)
La opción que he sugerido es generalmente incongruente para el cierre.
Si se trata de cerrar de lo viejo a lo nuevo, entonces se está cerrando la red. Teniendo algo de experiencia con las parrillas, lo único que puedo decir con seguridad es que no hay que elegir por la edad de la posición, sino por su lote, y hay que cerrar de un lote mayor a uno menor. Si la parrilla es de un solo lote, entonces no hay diferencia en el orden de cierre. Utiliza funciones ya hechas para cerrar, y no inventes algo que ya está inventado)
 
¡Muchas gracias, chicos! ¡¡¡Ya lo he solucionado!!!
 
Vitaly Muzichenko:
La opción que he sugerido es generalmente incongruente para el cierre.
Si se trata de cerrar de lo viejo a lo nuevo, entonces se está cerrando la red. Teniendo algo de experiencia con las parrillas, lo único que puedo decir con seguridad es que no hay que elegir por la edad de la posición, sino por su lote, y hay que cerrar de un lote mayor a uno menor. Si la parrilla es de un solo lote, no hay diferencia en el orden de cierre. Utiliza funciones ya hechas para el cierre, y no inventes algo que ya está inventado)
Así es. ¡Tienes razón!
 
¡Señores promotores! Buenos días a todos. Estoy interesado en una pregunta sobre cómo crear una plantilla de Asesor Experto (script) al crearla. ¿Se puede editar esto en algún sitio y cómo se hace?