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

 
novichok2018:

Hola! Ayúdame a resolver la situación: abro una posición 1 bajo la condición de Y1, cerrada bajo la condición de Y2. Pero si antes de la ocurrencia de U2 una vez más se produce U1 y abrió la posición 2, no reacciona a venir U2, y se cuelga a la siguiente U2, que vino después de la nueva U1 (!) Y esta nueva posición no se cierra por un nuevo U2, y espera a la siguiente condición U1-U2. ¿Cómo evitarlo? La cabeza me está matando. Gracias.

Necesitamos un bucle para cerrar OrderClose(...) de todas las órdenes en la condición U2 - incluso si tenemos un centenar de ellas. Podemos eliminar uno en cada tick - entonces hacer lo siguiente: 1) por condición U2, levantar la bandera. 2) Si se levanta la bandera, eliminar UNA orden. 3) Si no hay órdenes, baja la bandera. Entonces todos los pedidos, uno tras otro, serán eliminados....

 
STARIJ:

Necesitamos un bucle para cerrar OrderClose(...) de todas las órdenes por la condición U2 - necesitamos un centenar de ellas.


Ya estoy en un ciclo. ¿Hay algún problema?

void ClosePoz()
  { int total=OrdersTotal();
  if(total>1)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
      { Print("позиция для закрытия не найдена");
         break;
      }
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
      }
    } 
  }   
 
novichok2018:
Ya estoy en un ciclo. ¿Hay algún problema?
No lo entiendo, he utilizado el SRC para insertar el código y no lo veo.
Tienes que pulsar Insertar y luego Añadir
 
STARIJ:
Tienes que pulsar Pegar y luego Añadir

Arriba, aunque no en el lugar correcto, pero se lee. ¡Oh! Ahora está en el lugar correcto. ¡Oh, Dios mío!

 
novichok2018:

He insertado su código correctamente.

Primero pulsa el botón SRC, luego introduce tu código en la ventana, pulsa el botón "Insertar" y envía tu mensaje.

 
tura210577:

Gracias por su respuesta.

De nada. Intenta utilizar funciones multiplataforma como ésta:

//+------------------------------------------------------------------+
//| Returns specified Open by shift                                  |
//+------------------------------------------------------------------+
double Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyOpen(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified High by shift                                  |
//+------------------------------------------------------------------+
double High(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Low by shift                                   |
//+------------------------------------------------------------------+
double Low(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Close by shift                                 |
//+------------------------------------------------------------------+
double Close(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyClose(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Time by shift                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   if(CopyTime(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
 
novichok2018: Ya estoy en un ciclo. ¿Hay algún problema?

Hay 2 errores en el código. 1) Esta página explica el orden de las órdenes en el bucle. 2) break - salir del bucle y continuar - omitir esto

 
Artyom Trishkin:

He insertado su código correctamente.

Primero se pulsa el botón SRC, luego se introduce el código en la ventana, se pulsa el botón "Insertar" y se envía el mensaje.


Gracias. Al menos me has hecho reír de mi escritura. ¿Qué sentido tiene la pregunta? ¿Está todo correcto en el bucle?

 
novichok2018:

Gracias. Al menos me has hecho reír de mi escritura. ¿Qué sentido tiene? ¿Está bien el ciclo?

Ya se le ha respondido:

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias de comercio

Cualquier pregunta de los principiantes sobre MQL4, ayuda y discusión sobre algoritmos y códigos

STARIJ, 2018.01.18 20:19

Hay 2 errores en el código. 1) Esta página explica el orden de las órdenes en el bucle. 2) break - salir del bucle, y debe continuar - omitir esto


 
Artyom Trishkin:

Ya se le ha respondido:



Sí, gracias, he leído la página. Sólo mis conocimientos en MKL4 fueron suficientes para notar que en mi bucle las posiciones se repiten desde el cero hasta el último, mientras que en el ejemplo es al revés, desde el último hasta el cero.Todavía no sé dónde insertarla pausa. Y cuando cambié mi bucle a la inversa, las posiciones dejaron de cerrarse del todo.

Razón de la queja: