Pregunta sobre la función OnTradeTransaction - página 6

 
Mikalas:

No, las transacciones no se pierden, sólo que pueden no venir en una determinada secuencia.

Sólo TRADE_TRANSACTION_REQUEST va siempre en primer lugar, de lo contrario no recibirá el ticket de pedido.

Lea atentamente la documentación.

Michael, lo siento, pero me ha parecido que sólo has contestado al último post, y es como consecuencia de todo lo descrito en el primero de esta página.

Y es extraño que recomiende leer la documentación. Lo leí, lo releí y lo volví a leer.

¿Qué quiere decir con "billete de garantía"? No lo veo en la documentación.

 
AlexeyVik:

Michael, lo siento, pero me ha parecido que sólo has respondido al último post, y ha sido como consecuencia de todo lo descrito en el primero de esta página.

Y me parece extraña tu recomendación de leer la documentación. Lo leí, lo releí y lo volví a leer.

¿Qué quiere decir con "ticket de pedido"? No lo he visto en la documentación.

Un ticket ulong es un número único que se asigna a un pedido.

Este número no cambiará durante la vida de la orden, así como en el historial.

Obtenemos información sobre el pedido mediante tikcet.

 
Mikalas:

Un ticket ulong es un número único que se asigna a un pedido realizado.

Este número no cambia a lo largo de la vida de la orden, así como en el historial.

Obtenemos información sobre el pedido mediante tikcet.

Gracias Mikhail. En realidad, supuse que se refería al billete de la orden. Pero debería haber sido más preciso.


Pero aún así, el comportamiento de los billetes es bastante extraño.

Ejemplo: Entradas y volúmenes de ejecución en el probador.

Abrimos una posición en Buy 0.1 lotes, Ticket 2. Se coloca el SellStop 0,78 Ticket 3.

Cuando se activa el SellStop, la posición queda con 0,68; la orden 3 con el volumen 0,78 y el beneficio negativo aparece en el historial.

Al mismo tiempo hay una posición con boleto 4

Y no está en absoluto claro dónde ha desaparecido la pérdida de la posición con el billete 2.


En general, no siempre podemos creer lo que está escrito. Porque no está completamente escrito.

Si una posición se abre con una orden pendiente, el ticket se mantiene, pero si la orden cierra otra, se crea la nueva.

 

Lo mismo ocurre con la entrada si la posición y la orden pendiente están en la misma dirección. El billete cambia.


 
AlexeyVik:

Aparentemente esta es la pérdida de transacciones... y, en primer lugar, (recorte de la documentación)

Vasily, ¿es un probador o una demo? Tengo muestras del probador. Me pregunto si hay alguna diferencia entre la activación de OnTradeTransaction en el probador y en la cuenta. Lo comprobaré de vez en cuando.

Esto es una demostración. Tal vez el modelo de eventos es diferente en el probador y en tiempo real.

 

Tengo varios bots en MT5 en Forts. Incluyendo varios en el mismo instrumento. Suelo determinar cuántos contratos tiene el "robot", recorriendo el historial de operaciones. En general, funciona. He decidido intentar utilizarOnTradeTransaction. La idea de cómo implementarlo es simple - cuando llega una operación, miramos cuántos contratos se compran o venden y qué bot hizo la operación (usando el comentario especial a la operación o el Número Mágico) y guardamos esta información en un archivo. La cuestión es la siguiente. Si tenemos OnTradeTransaction en cada EA, ¿cómo se llamará secuencialmente o en paralelo? Supongamos, por ejemplo, que se ha ejecutado una operación - se han producido muchos eventos y OnTradeTransaction se llamará sistemáticamente en cada bot para cada evento. Es decir, ¿es más fácil hacer un manejador OnTradeTransaction que sea responsable de todos los bots? En todo caso, no soy un programador, aunque ya he programado muchas cosas. El código puede ser cursi, pero siempre consigo que funcione correctamente.

 
votor:

Tengo varios bots en MT5 en Forts. Incluyendo varios en el mismo instrumento. Suelo determinar cuántos contratos tiene el "robot", recorriendo el historial de operaciones. Todo funciona básicamente. He decidido intentar utilizarOnTradeTransaction. La idea de cómo implementarlo es simple - cuando llega una operación, miramos cuántos contratos se compran o venden y qué bot hizo la operación (usando el comentario especial a la operación o el Número Mágico) y guardamos esta información en un archivo. La cuestión es la siguiente. Si tenemos OnTradeTransaction en cada EA, ¿cómo se llamará secuencialmente o en paralelo? Supongamos, por ejemplo, que se ha ejecutado una operación - se han producido muchos eventos y OnTradeTransaction se llamará sistemáticamente en cada bot para cada evento. Es decir, ¿es más fácil hacer un manejador OnTradeTransaction que sea responsable de todos los bots? En todo caso, no soy un programador, aunque ya he programado muchas cosas. El código puede ser cursi, pero siempre hago que funcione correctamente.

Sí, OnTradeTransaction funcionará en cada EA. Deben ser filtrados por símbolo y si hay más de un Asesor Experto en un símbolo, entonces por magik.

 

Gracias por su respuesta. Ya lo he comprobado y veo que funciona en todos los EAs. La pregunta es (tal vez sea una pregunta estúpida) si todos estosOnTradeTransactions se procesan en todos los EAs en serie, primero en un EA, luego en el siguiente, etc., en lugar de hacerlo en paralelo, ¿no? Quiero decir, ya que su procesamiento es secuencial(?), sería mejor crear un solo manejador para todos los bots y filtrar lo que necesitamos en él.

 
votor:

Gracias por su respuesta. Ya lo he comprobado y veo que funciona en todos los EAs. La pregunta es (tal vez sea una pregunta estúpida) si todos estos mensajesOnTradeTransaction en todos los EAs funcionan secuencialmente, primero en un EA, luego en el siguiente, etc., en lugar de en paralelo, ¿no? Quiero decir, ya que su procesamiento es secuencial(?), sería mejor crear un manejador para todos los bots y filtrar lo que necesitamos en él.

No lo he comprobado, pero parece que no hay regularidad. Es como quien se levanta primero, no deja piedra sobre piedra. Y es posible que si te levantas a la misma hora, entonces cada una de las zapatillas.

Hasta ahora me parece la mejor opción para filtrar por símbolo y mago. Sobre cuya posición escribe información.

 

Algo que no se me da bien explicar, por lo visto. He aquí un ejemplo de la vida real. Aquí está el código:

void OnTradeTransaction(const MqlTradeTransaction& trans,

const MqlTradeRequest& request,

const MqlTradeResult& result)

{

Cuenta++;

Print("Prueba_de_ontrade = ",Cuenta);

}

El manejador se implementa en dos Asesores Expertos por lo que se ejecuta múltiples veces en dos Asesores Expertos cuando se realiza una operación. El código produce:

18:31:06.495 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 1

18:31:06.495 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 1

18:31:06.497 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 2

18:31:06.497 ontrade_trans_functions2 (MXI-12.17,M5) Ontrade_test = 2

18:31:06.498 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 3

18:31:06.498 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 3

18:31:06.500 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 4

18:31:06.500 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 4 ...

y así sucesivamente.

Puede ver que el tiempo de respuesta de OnTradeTransaction en los dos Asesores Expertos es el mismo en milisegundos. Entonces, tengo una pregunta: ¿el evento de comercio llega primero a un OnTradeTransaction en un EA y luego al siguiente en otro EA o de alguna manera llega a todos los manejadores de todos los EAs a la vez? Bueno, es como una operación paralela multihilo o como se llame en programación. Estoy seguro de que todo sucede secuencialmente, sólo se procesa en un milisegundo, pero lo he preguntado por si acaso.

Razón de la queja: