Alerta: El terminal MT4 duplica las órdenes enviadas por los expertos - página 6

 

Hay una diferencia entre

bool Buy_Ticket = OrderSend(........)

y lo que está haciendo

bool Buy_Ticket = Ordersend > 0;   //SIMPLIFIED CODE FOR EASIER READING

en el primer caso, si un pedido falla se devolverá un valor de -1, pero el booleano lo interpretará como TRUE

en el segundo, estás usando la condición (Ordersend>0) para asignar true o false al booleano.

 
GumRai:


Hay una diferencia entre

y lo que está haciendo

en el primer caso, si un pedido falla se devolverá un valor de -1, pero el booleano lo interpretará como TRUE

en el segundo, estás usando la condición (Ordersend>0) para asignar true o false al booleano.



¿Es eso cierto? No soy capaz de probarlo en una cuenta demo (comercio en vivo) ahora, pero hice una verificación rápida en un backtest interrumpiendo a propósito OrderSend() con stoploss inválido = ask (precio de mercado) para un comercio largo. El resultado es OrderSend() devuelve un "-1" como se esperaba y mi bool var Buy_Ticket devuelve falso también.


** EDITAR **

¿Se ha perdido mi condición "> 0" detrás de OrderSend()? Mi código original muestra:

bool Buy_Ticket = OrderSend(........) > 0;
 
BigFisherman:



¿Es eso cierto? No soy capaz de probarlo en una cuenta demo (comercio en vivo) ahora, pero hice una rápida verificación en un backtest interrumpiendo a propósito OrderSend() con un stoploss inválido = ask (precio de mercado) para una operación larga. El resultado es OrderSend() devuelve un "-1" como se esperaba y mi bool var Buy_Ticket devuelve falso también.


** EDITAR

¿Se ha perdido mis condiciones "> 0" detrás de OrderSend()? Mi código original muestra:


Lo siento, sí, se me escapó el >0.

Supongo que es una forma tan extraña de hacerlo, que no me di cuenta.

 

@ BigFisherman comprueba el código siguiente

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);

ver aquí

El operador de asignación puede utilizarse varias veces en una expresión. En este caso el procesamiento de la expresión se realiza de izquierda a derecha:

y=x=3;

Primero, a la variable x se le asignará el valor 3, luego a la variable y se le asignará el valor de x, es decir, también 3.

 
GumRai:


Lo siento, sí, se me escapó el >0.

Supongo que es una forma tan extraña de hacerlo, que no me di cuenta.


No hay problema.

Estoy de acuerdo en que no es una buena práctica para codificar de esa manera; He codificado esa parte en la etapa inicial de mi aprendizaje MQL, pero ya que parecía correcto para mí todo este tiempo, lo dejé ser hasta que este problema de comercio duplicado sucede. Pero aparentemente, ahora "parece" que mi código original, aunque confuso, parece válido, entonces vuelve al tema original de este hilo "Operaciones duplicadas.."; esto podría ser un grave y altamente inoportuno "raro" error en mt4, que desafortunadamente no soy capaz de reproducir debido a su rara aparición (1 en más de 500+ operaciones).

Para la información de cualquier persona, debido a la forma en que codifiqué mi EA (consulte mi primer post en pg5), SL & TP sólo se asigna después de que se detecta OrderSend() éxito (IMHO es bastante a prueba de tontos hasta ahora). Y lo que sucedió con mi comercio duplicado anterior era que nunca lo hizo para establecer SL & TP por alguna razón desconocida; que no sea OrderSend() devolver "-1", pero abrió un comercio de todos modos O "que" abrió 2 operaciones simultáneas en un OrderSend() ** sólo mi propia especulación **. Por suerte estaba justo delante de mi PC cuando esto sucede, así que pude cerrarlo manualmente; imagina lo que pasaría si estoy fuera de vacaciones.

 
qjol:

@ BigFisherman comprueba el código siguiente

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);


Buy_Ticket devuelve true como se esperaba. ¿Qué está tratando de decir?

 

no estoy tratando de decir, ¡estoy diciendo!

si lo usas así

bool Buy_Ticket = OrderSend(........) > 0;

por supuesto que vas a obtener true si se ha ejecutado OrderSend()

porque primero se examina si el resultado de OrderSend es > 0

y luego se pasa a

Buy_Ticket

pero aun así no es la manera de manejarlo bien

 
qjol:

no estoy tratando de decir, ¡estoy diciendo!

si lo usas así

por supuesto que vas a obtener true si se ha ejecutado OrderSend()

porque primero se examina si el resultado de OrderSend es > 0

y luego se pasa a

pero aun así no es la manera de manejarlo bien



Ahora ya sé de quién es el post que hay que filtrar en mql4, gracias por tu aportación de todas formas.
 
y=x=3;
Intenté hacerlo pero el MetaEditor siempre me detiene cuando intento compilar.
 
BigFisherman:


Ahora sé de quién es el post que hay que filtrar en mql4,

nota: mi nombre de usuario en mql5 es el mismo