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

 

Ya está, he encontrado mi error. Algunas personas necesitan expresar su pregunta para entender después cómo se equivocaron.

Por desgracia, parece que yo soy uno de esos personajes. (((

 
Konstantin Nikitin:

PedirEnviar
OrderSelect

Supongo que se refiere alnúmero de billete.

¿Algún problema?

 
Decromor:

¡Saludos!


Se puede acceder a una orden mediante el comando OrderSelect por su número.

Pregunta, ¿es posible conocer de antemano los números de los pedidos existentes, para no pasar por todos? Por ejemplo, podemos memorizar este número al abrir un nuevo pedido.

Entiendo que este número se asigna por orden a partir del 1. ¿Cuáles son los posibles matices?

Gracias de antemano.

  1. Podemos dirigirnos a esta orden por su índice en la lista de órdenes (al probarla en el bucle), o por su ticket (si se conoce de antemano).
  2. No es deseable - en caso de cualquier fallo (reinicio del Asesor Experto, reinicio del terminal, fallo del sistema, etc.), las entradas memorizadas pueden perderse. Por lo tanto, deben almacenarse en variables globales del terminal, o en un archivo, lo cual es factible, pero más difícil que la búsqueda habitual, que no se hace en cada tic, sino sólo cuando se necesita.
  3. No. Empezando por el número 1, y en orden ascendente - sólo en el probador.
  4. De nada.
 
Artyom Trishkin:
  1. Puede referirse a ella por su índice en la lista de pedidos (al buscar en el bucle), o por su ticket (si se conoce de antemano)
  2. No es deseable - en caso de cualquier fallo (reinicio del EA, reinicio del terminal, fallo del sistema, etc.), los tickets memorizados pueden perderse. Por lo tanto, deben almacenarse en variables globales del terminal, o en un archivo, lo cual es factible, pero más difícil que la búsqueda habitual, que no se hace en cada tic, sino sólo cuando se necesita.
  3. No. Empezando por el número 1, y en orden ascendente - sólo en el probador.
  4. Por favor.

¿Es posible ejecutar en el código OnInit() en el bucle OrdersTotal() y recoger toda la información de las órdenes abiertas, en particular OrderTicket()?

string orders[][3];

int OnInit() {
   for (int n = OrdersTotal() + 1; n >= 0; n--) {              
      if (OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) {
         int i = (ArraySize(orders) / 3);
         ArrayResize(orders, i + 1);
         orders[i][0] = IntegerToString(OrderTicket());
         orders[i][1] = IntegerToString(OrderType());
         orders[i][2] = DoubleToString(OrderOpenPrice(), Digits);   
      } 
   }
   return(INIT_SUCCEEDED);
}


Cuando una orden se cierra automáticamente por TP o SP, ¿es posible obtener los datos de esta orden?

 
Decromor:

¿Es posible ejecutar el programa en el cuerpo de OnInit() y recoger toda la información sobre las órdenes abiertas, en particular OrderTicket(), en el bucle OrdersTotal()?


Cuando una orden se cierra automáticamente por TP o SP, ¿es posible obtener los datos de esta orden?

  1. Sí, podemos. ¿Y luego qué? Los pedidos pueden cambiar con el tiempo, y la información recopilada durante la inicialización está obsoleta.
  2. Debemos encontrar la última orden cerrada y obtener toda la información necesaria sobre ella.
 
Artyom Trishkin:
  1. Puedes hacerlo. ¿Y luego qué? Los pedidos pueden cambiar con el tiempo, y la información sobre ellos, recopilada durante la inicialización, quedará obsoleta.
  2. Necesito encontrar la última orden cerrada y obtener toda la información necesaria sobre ella.

Durante la COMPRA, VENTA guardo los datos requeridos en un array y luego ruedo este array y dependiendo del precio hago los cambios requeridos (transferir SL a Breakeven, cerrar la orden después de la inversión, etc.), dirigiéndome a la orden requerida a través del ticket.

Pero tengo órdenes con TP y SL que pueden cerrarse sin que yo lo sepa. No me gusta la opción de buscar la última orden cerrada cada tick y buscarla en mi matriz para corregirla.

"Los pedidos pueden cambiar con el tiempo, y la información recopilada sobre ellos durante la inicialización quedará obsoleta". Supongo que esto es lo que se quiere decir, ¿cerrar el pedido?

La única opción que veo es hacer 2 bucles en un tick, el mío con órdenes yOrdersTotal() y tampoco me gusta.

"Pero más complicado que la fuerza bruta habitual, que no se hace en cada tic, sino sólo cuando es necesario" Por favor, comparte este algoritmo.

 
Decromor:

¿Es posible ejecutar el programa en el cuerpo de OnInit() y recoger toda la información sobre las órdenes abiertas, en particular OrderTicket(), en el bucle OrdersTotal()?


Cuando una orden se cierra automáticamente por TP o SP, ¿es posible obtener los datos de esta orden?

¿Y por qué tenemos que convertir todo esto en una cadena? ¿Es un tipo de cadena?

 
Decromor:

¿Es posible ejecutar el programa en el cuerpo de OnInit() y recoger toda la información sobre las órdenes abiertas, en particular OrderTicket(), en el bucle OrdersTotal()?


Cuando una orden se cierra automáticamente por TP o SP, ¿es posible obtener los datos de esta orden?

struct SOrders
{
     int ticket,
         type;
     double price;
} orders[];

int OnInit() {
   for (int n = 0; n < OrdersTotal(); n++)
   {              
      if(!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;
      int i = ArraySize(orders);
      if(ArrayResize(orders, i+1) < i+1) continue;
      orders[i].ticket = OrderTicket();
      orders[i].type   = OrderType();
      orders[i].price  = OrderOpenPrice();
   }
   return(INIT_SUCCEEDED);
}
 
Konstantin Nikitin:
Muchas gracias por la información, esto es nuevo para mí.
 
Alexey Viktorov:

¿Por qué traducir todo esto en una cadena? ¿Tipo de cadena?

Porque, por ejemplo, un billete tiene el tipo Int, el precio Double, y un array sólo puede ser de un tipo.
Razón de la queja: