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

 
MrBrooklin función OnTick() o después de ella? Si es fundamental, ¿por qué?

Saludos, Vladimir.

Muy bien. No hay ninguna diferencia. Al menos en el archivo del plugin.

 
Artyom Trishkin #:

Bien. No hay diferencia. Puede estar en un archivo plug-in.

Ya veo. Gracias.

Saludos, Vladimir.

 
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.

Artem, probablemente te esté torturando con mi estupidez, pero ¿cuánto tiempo se almacenan en el servidor los datos de una operación? Un día, dos, tres... ¿un año? He leído tanto la literatura como el libro de referencia, y no he encontrado esta información en ninguna parte.

Saludos, Vladimir.

 
MrBrooklin #:

Artem, probablemente te esté aburriendo con mi estupidez, pero ¿durante cuánto tiempo se almacenan los datos de la transacción en el servidor? Un día, dos, tres... ¿un año? He leído la literatura y el manual, y no he encontrado esta información en ninguna parte.

Saludos, Vladimir.

Vladimir, ¿para qué lo necesitas? Estos datos son necesarios sólo para resolver algunos momentos discutibles. Pero si un broker hace algo extravagante, es poco probable que pueda demostrar nada. Y el tiempo concreto de almacenamiento lo fija el propio broker y no hay ninguna regulación al respecto.

 
Alexey Viktorov #:

Vladimir, ¿para qué lo necesitas? Estos datos son necesarios sólo para resolver algunos puntos discutibles. Pero si el broker hace algo extravagante, es poco probable que pueda demostrar nada. Y el tiempo concreto de almacenamiento lo fija el propio broker, y no hay ninguna regulación al respecto.

Hola Alexey, necesito saber esto para autoeducarme y, al mismo tiempo, quiero entenderlo a fondo. Parece que no entiendo nada de estas transacciones. Cuando te escuché, todo parecía estar claro, pero pasó un poco de tiempo y todo se disolvió. Ya estamos otra vez. ¡No entiendo nada!

Saludos, Vladimir.

 

Permítanme darles un ejemplo real. Tengo una posición abierta para el fin de semana. Aquí hay una captura de pantalla de mi cuenta real:


La transacción está hecha, la posición está abierta. Ejecuto el script:

//+------------------------------------------------------------------+
//|1.mq5
//|Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
ulong pos_ticket;
double pos_open;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
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;
        }
     }
  }
//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print("Ticket = ",pos_ticket);
   Print("Price = ",pos_open);
  }
//+------------------------------------------------------------------+

Obtengo el resultado en la pestaña Expertos:

2023.10.21 14:41:47.693 1 (EURUSDrfd,M1)        Ticket = 0
2023.10.21 14:41:47.693 1 (EURUSDrfd,M1)        Price = 0.0

Artyom escribió que la transacción se almacena en el servidor, pero no dijo cuánto tiempo se almacena, y de hecho no es visible ahora. ¿Cómo es eso? Estoy tratando de averiguar hasta el final.

Saludos, Vladimir.

 
MrBrooklin #:

Permítanme darles un ejemplo real. Tengo una posición abierta para el fin de semana. Aquí está una captura de pantalla de mi cuenta real:


La transacción está hecha, la posición está abierta. Ejecutando el script:

Obtengo el resultado en la pestaña Expertos:

Artem escribió que la transacción se almacena en el servidor, pero no me dijo cuánto tiempo se almacena, y de hecho no es visible ahora. ¿Cómo es eso? Estoy intentando averiguarlo hasta el final.

Saludos, Vladimir.

Has ejecutado un script.

void OnStart()
  {
   Print("DateTime = ", TimeCurrent());
  }

Es un EVENTO. Si ejecutó el script ayer, obtuvo la impresión ayer. Y hoy no habrá ninguna impresión con la fecha de ayer y la hora de ayer. Si ejecutas el script hoy, será un evento de nuevo. Y de nuevo obtendrás una impresión con la fecha y hora actuales.

Un golpe en la cabeza, eso es un evento. Y mañana no sentirás nada del TUK de ayer.....

 

Y así es como el script encuentra la posición y los datos que necesito sin problemas:

//+------------------------------------------------------------------+
//|2.mq5
//|Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   for(int i=0; i<PositionsTotal(); i++)
     {
      if(PositionGetTicket(i))
         Print("Ticket = ",PositionGetInteger(POSITION_IDENTIFIER));
         Print("Price = ",PositionGetDouble(POSITION_PRICE_OPEN));
     }
  }
//+------------------------------------------------------------------+

Resultado:

2023.10.21 15:33:49.973 2 (EURUSDrfd,M1)        Ticket = 1029935900
2023.10.21 15:33:49.973 2 (EURUSDrfd,M1)        Price = 1.05...

No importa si el mercado estaba abierto o cerrado, si había un corte de luz o no, si había un corte de internet o no, esta variante funciona sin fallos. Sin embargo, para ello hay que ejecutar un ciclo que, según los expertos, ralentiza la ejecución del programa.

Saludos, Vladimir.

 
Alexey Viktorov #:

Un golpe en la cabeza, eso es un acontecimiento. Y mañana no sentirás nada del tuk tuk de ayer.....

¿Resulta que una operación en el historial se almacena en el servidor sólo hasta el final de la sesión de negociación? ¿Es así?

Saludos, Vladimir.

 

Stop! ¿Y cómo, entonces, después de un día de negociación el Asesor Experto seguía viendo esta operación (es decir, una posición abierta) y trabajaba de acuerdo con el algoritmo? No, ¡es un infierno!

Saludos, Vladimir.