Discusión sobre el artículo "Transacciones comerciales. Estructuras de solicitud y respuesta, descripción y registro." - página 4

 
MrBrooklin cerrar la posición hay un corte de energía y digamos que mi ordenador se apaga, o simplemente cierro el terminal MT5 por alguna razón, entonces ¿dónde se almacenará la información sobre esta operación? ¿Y se almacenará esta información en algún sitio?

¿Puede explicarme estos momentos incomprensibles con más detalle?

Saludos, Vladimir.

Los datos se almacenan en el servidor. El terminal los recibe en su entorno y luego el Asesor Experto los utiliza.

 
Artyom Trishkin #:

Los datos se almacenan en el servidor. El terminal los recibe en su entorno y el Asesor Experto los utiliza a continuación.

Entonces es extraño ¿por qué hoy el EA no ha encontrado la operación abierta ayer? Antes lo hacía. Aquí está el código:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // estructura de las transacciones comerciales
   const MqlTradeRequest&        request, // estructura de la solicitud
   const MqlTradeResult&         result   // estructura de la respuesta
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

Una pequeña adición. ¿Puede el rollover influir de alguna manera en la entrada de una operación abierta, es decir, cambiarla?

Saludos, Vladimir.

 
MrBrooklin #:

Entonces es extraño por qué hoy el Asesor Experto no encontró la operación abierta ayer. Solía hacerlo. Aquí está el código:

Una pequeña adición. ¿Puede el rollover influir de alguna manera en la entrada de una operación abierta, es decir, cambiarla?

Saludos, Vladimir.

Puedes encontrar todas sus operaciones y órdenes por el ID de una posición abierta.

 
MrBrooklin #:

Entonces es extraño por qué hoy el Asesor Experto no encontró la operación abierta ayer. Solía hacerlo. Aquí está el código:

Una pequeña adición. ¿Puede el rollover influir de alguna manera en la entrada de una operación abierta, es decir, cambiarla?

Saludos, Vladimir.

Al realizar una operación, el servidor envía un "mensaje" al terminal de que la operación se ha realizado y se olvida de él. Al servidor no le importa si el terminal lo recibió o no. Por lo tanto, si el terminal está apagado en el momento de hacer un trato, sólo se puede saber del trato leyendo el historial desde el momento del cierre del terminal hasta el momento actual.

 
Alexey Viktorov #:
Por lo tanto, si el terminal está apagado en el momento de una operación, usted puede aprender acerca de la operación sólo mediante la lectura de la historia desde el momento en que el terminal está cerrado hasta el momento actual.

Hola Alexey, en el momento de la operación, es decir, en el momento de la apertura de una posición, el terminal estaba encendido, porque el Asesor Experto lo abrió.

Saludos, Vladimir.

 
Artyom Trishkin #:

Puede encontrar todas sus operaciones y órdenes por el ID de la posición abierta.

Ya veo. Voy a estudiar el Manual más a fondo.

Saludos, Vladimir.

 
MrBrooklin #:

Hola Alexey, en el momento de la operación, es decir, en el momento de la apertura de la posición, el terminal estaba encendido, porque el Asesor Experto lo estaba abriendo.

Saludos, Vladimir.

Como entender esto

Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading.

Discusión del artículo "Transacciones comerciales. Estructuras de solicitudes y respuestas, descripción y salida de registro"

MrBrooklin, 2023.10.17 16:48

Entonces es extraño por qué hoy el Asesor Experto no encontró el acuerdo abierto ayer? Anteriormente lo hizo. Aquí está el código:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // estructura de las transacciones comerciales
   const MqlTradeRequest&        request, // estructura de la solicitud
   const MqlTradeResult&         result   // estructura de la respuesta
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

Una pequeña adición. ¿Puede el rollover influir de alguna manera en la entrada de una operación abierta, es decir, cambiarla?

Saludos, Vladimir.

Así que ayer lo encontró. Y hoy el tren ya está en camino...

Si ayer había una orden, una orden pendiente, y hoy ya hay una posición, que es de lo que yo hablaba, entonces la operación estaba en el momento en que se cerró el terminal... En consecuencia, búscala por el ID de la posición, que es de lo que habla Artem.

 
Alexey Viktorov #:
En consecuencia, búscalo por ID de posición, que es de lo que habla Artem.

Alexei, ¿ya te hemos cambiado? ))

Sí, ya he entendido lo del ID de posición. Intentaré resolverlo yo mismo con ayuda:

long position_ID=HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);

Saludos, Vladimir.

 
MrBrooklin #:

Entonces es extraño ¿por qué hoy el EA no encontró la operación abierta ayer?

Alexey, tal vez es difícil expresar mi pensamiento, pero la esencia del mismo es la siguiente: ayer el EA abrió una posición, es decir, realizó una operación, no abrió una operación, como escribí anteriormente. Hoy, según el algoritmo, el Asesor Experto debería haber visto la posición abierta ayer y haber realizado ciertas manipulaciones. Pero el EA, por razones que aún no entiendo, no vio la posición abierta ayer y, en consecuencia, no realizó ninguna acción. Espero haber expresado mi pensamiento más claramente ahora.

Saludos, Vladimir.

 
MrBrooklin #:

Alexey, tal vez sea difícil expresar mi pensamiento, pero la esencia del mismo es la siguiente: ayer el Asesor Experto abrió una posición, es decir, realizó una operación, no abrió una transacción, como escribí anteriormente. Hoy, según el algoritmo, el Asesor Experto debería haber visto la posición abierta ayer y haber realizado ciertas manipulaciones. Pero el EA, por razones que aún no entiendo, no vio la posición abierta ayer y, en consecuencia, no realizó ninguna acción. Espero haber expresado mi pensamiento más claramente ahora?

Saludos, Vladimir.

Volodya, tú y yo hemos hablado mucho sobre esta voz. Lo he explicado lo mejor que he podido, parecías entenderlo todo, pero aquí vamos de nuevo...

La función OnTradeTransaction es una función de procesamiento de eventos. La transacción es un evento que ocurrió ayer. La función OnTradeTransaction debería haber funcionado ayer, pero hoy no. Hoy no hay ningún evento de ESTA transacción... Hoy había y probablemente seguirá habiendo, pero diferentes.