Cómo comprobar si una orden está seleccionada - página 7

 
tara:

España también:)
España es meridional y Barcelona tiene un clima muy suave, sin frío ni calor insoportable, y la ciudad en sí es muy bonita y compacta, así que a mí, como moscovita, me gustó mucho.
 

El TS quiere aprovechar una característica no documentada de MT4. La función OrderSelect( ) crea un puntero (TC lo llama "orden seleccionada") que es global para el EA (script). Los dos guiones siguientes lo ilustran

El puntero creado por este procedimiento llamado está disponible en el procedimiento llamado:

int start()
{
   ordsel();
   Print( OrderTicket( ) );
   return(0);
}
void ordsel()
{
   OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY );
   Print( OrderTicket( ) );
}

2013.02.17 02:50:48 111 EURUSD,H1: uninit reason 0
2013.02.17 02:50:48 111 EURUSD,H1: 18338793
2013.02.17 02:50:48 111 EURUSD,H1: 18338793
2013.02.17 02:50:48 111 EURUSD,H1: cargado con éxito

El puntero creado está disponible en el procedimiento llamado:

int start()
{
   OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY );
   Print( OrderTicket( ) );
   ordsel();
   return(0);
}
void ordsel()
{
   Print( OrderTicket( ) );
}

2013.02.17 02:56:10 111 EURUSD,H1: uninit reason 0
2013.02.17 02:56:10 111 EURUSD,H1: 18338793
2013.02.17 02:56:10 111 EURUSD,H1: 18338793
2013.02.17 02:56:10 111 EURUSD,H1: cargado con éxito


Pero es un poco espeluznante usarlo.

 
tara:
Deberías casarte, hermano.
¿Para qué? Mucha gente vive aquí sin registrarse y con niños. ¿Por qué pagar todo tipo de tasas? Entonces lo he tenido todo, así que no es necesario.
 
Ant_TL:

Bueno, aparentemente todo el mundo aquí es superguay, pero me temo que si empiezo a centrarme en los aspectos guays de todo esto voy a recibir un martillo de prohibición en la cabeza del Sr. FAQ, que sin duda también es guay. Así que gracias a todos los que han participado en la discusión, probablemente se pueda cerrar el tema ya que nadie está interesado en esta cuestión, excepto yo.

Tal vez, el nombre del tema era engañoso, debería haberse llamado"Cómo comprobar si la orden actual en mql4 está actualmente seleccionada" o algo así. Por lo demás, algunos educadores tienen que detallar las preguntas al nivel de los bucs.


1) Creo que lo que hace que los ojos lloren es tu"genialidad".

2) Si sigues siendo maleducado, recibirás exactamente lo que llamas un "banhammer" con fines educativos.

3) Tu mensaje (en negrita) se ha entendido sin ningún tipo de "deletreo" desde la página 2 y yo (en cuanto a los que están en el tanque) ya he contestado que no. No existe tal garantía, si quieres tener una, encárgate tú mismo y con mucha antelación.

4) Puedes escribir todos los programas largos que quieras, pero si tienes un vacío de conocimiento y quieres llenarlo a costa de la sociedad (que es para lo que está este foro), entonces intenta comportarte decentemente.

 
Mislaid:

El TS quiere aprovechar una característica no documentada de MT4. La función OrderSelect() crea un puntero (TC lo llama "orden seleccionada") que es global para el EA (script). Como se demuestra en los dos guiones siguientes

Pero es espeluznante usarlo.

¿Por qué indocumentado y por qué raro? Esto siempre funciona, excepto para las bibliotecas personalizadas, porque aparentemente este "puntero" es global sólo dentro de un EA o un módulo de script, y un módulo de biblioteca tiene su propio puntero.

 
FAQ:

3) Tu mensaje (en negrita) ya está claro sin "deletrearlo" desde la página 2, y yo (como los del tanque) ya he contestado que no. No existe tal garantía, si quieres tener una, encárgate tú mismo y con mucha antelación.

4) Puedes escribir todos los programas largos que quieras, pero si tienes un vacío de conocimiento y quieres llenarlo a costa de la sociedad (que es para lo que está este foro), entonces intenta comportarte decentemente.

¿Qué otra orden no existe? No tengo ninguna laguna de conocimiento, eso es una fabricación tuya. He llamado la atención sobre un problema, que creo que es una laguna en el mecanismo de trabajo con las órdenes en mql4, eso es todo. Si una serie de funciones trabajan con una orden resaltada, debería ser posible comprobar si una orden está resaltada o no, para no generar un error. Entiendo que se pueden idear muletillas, memorizar la selección de la orden en una docena de lugares, pasar un parámetro para no equivocarse, etc.

PREGUNTAS FRECUENTES:

2) Si sigues siendo maleducado, seguro que te llevas lo que tú llamas un "banhammer" con fines educativos.

El hecho de que tu amigo bori haya sido grosero conmigo durante varias páginas, obviamente pasó por tus agudos ojos. Estás siendo selectivo.

 
Ant_TL:

¿Qué otra orden no existe? No tengo ninguna laguna en mis conocimientos, esa es tu ficción. He señalado el problema, que creo que es una laguna en el mecanismo de trabajo con las órdenes en mql4, eso es todo. Si algunas funciones trabajan con una orden seleccionada, necesitamos poder comprobar si una orden está seleccionada o no, para no generar un error. Entiendo que podemos hacer muletillas, recordar la selección de una orden en una docena de sitios, enviar un parámetro para no equivocarnos, etc.

No hay ningún hueco en mql4. El estado de la orden seleccionada puede cambiar durante cualquier operación con órdenes: abrir/cerrar, tomar/parar, ejecutar/borrar una orden pendiente, o cerrar parcialmente una orden. Así que no necesitamos memorizar y transmitir nada. Nunca hay que contar con que el estado no ha cambiado. Se puede seleccionar un orden, pero ya no es el mismo.
 
Mislaid:
No hay ningún hueco en mql4. El estado de una orden seleccionada puede cambiar durante cualquier operación con órdenes: abrir/cerrar, tomar/parar, ejecutar/borrar una orden pendiente o cerrar parcialmente una orden, por lo que no debemos memorizar y transmitir nada. Nunca hay que contar con que el estado no ha cambiado. Se puede seleccionar un orden, pero ya no es el mismo.

Señalé una situación concreta: tenemos un bucle principal que trabaja con órdenes. Y hay una serie de funciones auxiliares que se utilizan en este bucle, que también trabajan con órdenes. La lógica del bucle principal no debe romperse después de llamar a estas funciones. Esto significa que si una función auxiliar afecta al trabajo con órdenes, debe recordar el estado del "puntero" en el momento de su llamada y devolverlo al estado en el que se encontraba al terminar. Pero no puede hacerlo sin muletas y generando errores. Esto es exactamente una brecha aquí.

De hecho, como escribí en el primer post, ignorar la necesidad de controlar el estado del "puntero" en las funciones auxiliares puede llevar a errores difíciles de detectar.

 
Ant_TL:

Señalé una situación concreta: tenemos un bucle principal que trabaja con órdenes. Y hay una serie de funciones auxiliares que se utilizan en este bucle, que también trabajan con órdenes. La lógica del bucle principal no debe romperse después de llamar a estas funciones. Esto significa que si una función auxiliar afecta al trabajo con órdenes, debe recordar el estado del "puntero" en el momento de su llamada y devolverlo al estado en el que se encontraba al terminar. Pero no puede hacerlo sin muletas y generando errores. Esto es exactamente una brecha aquí.

De hecho, como escribí en el primer post, ignorar la necesidad de controlar el estado del "puntero" en las funciones auxiliares puede llevar a errores difíciles de detectar.

Supongamos que has pasado tu EA a alguien. No sabes si tiene otros EAs trabajando, tal vez esté operando con sus propias manos.

Tal vez, haya terminado este EA y empiece a escribir uno nuevo. Aquí es donde la antigua falla.

 
Mislaid:

Supongamos que has pasado tu EA a alguien. No se sabe, tal vez él tiene otros EAs de trabajo, que negocia sus propias manos.

Tal vez haya terminado este EA y empiece a escribir uno nuevo. Ahí es donde el viejo fallará.

¿Perdón? ¿Qué tiene esto que ver con a quién le di el Asesor Experto? ¿Crees que el estado del "puntero" está influenciado por las acciones de otros EAs y del terminal? El "puntero" (el ticket de la orden actualmente seleccionada) es una variable de nivel de módulo. Estaría bien poder acceder a ella sin que se genere un posible error 4105, que es lo que he estado escribiendo todo este tiempo