Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1489

 

Muchas gracias por su ayuda.
Ahora tengo otra tarea.

Hay una función que cuenta el beneficio de todas las órdenes cerradas después de un cierto tick.
La hora de cierre de la orden (posición) se ha añadido para la comprobación.
Como todo fue escrito en MQL4, y ahora se está reescribiendo en MQL5, surgió la pregunta de cómo reproducir correctamente y de manera competente esta comprobación.

En pocas palabras, cómo reescribir el código en MQL5)

double CalculateProfitHistory() 
{
   double profit = 0;
   int  i, ototal = OrdersHistoryTotal();

   for(i = ototal-1; i >=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
         if(OrderSymbol() == Symbol() && OrderCloseTime() > 0)
         {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
               if(OrderMagicNumber() == Magic )
               {
                  if (LockTicket !=0)
                  {
                     if (OrderTicket() >= LockTicket)
                     {
                        profit += OrderProfit()+OrderCommission()+OrderSwap();
                     }                  
                  }
               }
            }
         }
      }
   }
   return(profit);
}
 
Maksim Burov #:

Muchas gracias a todos por vuestra ayuda.
Ahora otro reto.

Hay una funcion que cuenta el beneficio de todas las ordenes cerradas despues de un cierto tick.
La hora de cierre de la orden (posicion) fue agregada para la verificacion.
Como todo fue escrito en MQL4, y ahora esta siendo reescrito en MQL5, la pregunta surgio como reproducir correctamente y competentemente esta verificacion.

En pocas palabras, cómo reescribir el código en MQL5)

// сначала выбираем нужный интервал
HistorySelect(TimeStart,TimeCurrent()+10);

// перебираем ордера в интервале
for(i=HistoryOrdersTotal()-1;i>=0;i--)
         {
          ord=HistoryOrderGetTicket(i);

         // далее получаем (или сразу сравниваем) любые свойства ордера, типа
          o_sym=HistoryOrderGetString(ord, ORDER_SYMBOL);
          o_magic=HistoryOrderGetInteger(ord, ORDER_MAGIC);
          ...
         }

Algo como esto

 
Maksim Burov #:

Muchas gracias a todos por vuestra ayuda.
Ahora otro reto.

Hay una funcion que cuenta el beneficio de todas las ordenes cerradas despues de un cierto tick.
La hora de cierre de la orden (posicion) fue agregada para la verificacion.
Como todo fue escrito en MQL4, y ahora esta siendo reescrito en MQL5, la pregunta surgio como reproducir correctamente y competentemente esta verificacion.

En pocas palabras, cómo reescribir el código en MQL5)

Dado que no son órdenes (post anterior), sino tratos lo que se buscará, lo más conveniente es utilizar este código

HistoryPosition - неопубликованный функционал MQL5-языка.
HistoryPosition - неопубликованный функционал MQL5-языка.
  • 2023.11.22
  • www.mql5.com
HistoryPositionsTotal Возвращает количество всех закрытых позиций в истории. HistorySelect() не влияет на результат данной функции. int HistoryPositionsTotal(); Возвращаемое значение Значение типа
 
JRandomTrader #:

Algo así.

He fallado( ¿Puede elaborar un poco más sobre la base de mi código.

 
Maksim Burov #:

He fallado( Puedes explicarlo un poco más basándote en mi código.

Tal vez sería mejor mirar la variante de Aleksandr Slavskii. No he trabajado con MQL4, y con cobertura también.

O prestar atención aquí y, por si acaso, aquí.

 
JRandomTrader #:

Tal vez sería mejor mirar la variante de Aleksandr Slavskii. No he trabajado con MQL4, y no he trabajado con cobertura tampoco.

O prestar atención aquí y, por si acaso, aquí.

No hay nada mejor. Son funciones habituales de fxsaber.

Su variante es bastante aceptable, sólo tiene que sustituir las órdenes con las transacciones. El beneficio, la comisión y el swap se almacenan por operaciones, no por órdenes.

 
Hola, tengo un problema con el VPS. No recibo notificaciones en mi teléfono cuando la MT4 está apagada. Cuando la plataforma está encendida, las notificaciones funcionan. ¿Puede alguien darme algún consejo sobre lo que podría estar mal? Gracias
 

Alexey Viktorov #:

Su variante es bastante aceptable, pero debe sustituir las órdenes por operaciones. El beneficio, la comisión y el swap se almacenan por operaciones, no por órdenes.

Y ten en cuenta que una orden puede generar varias operaciones.

Por lo tanto, o bien seleccionar ofertas para cada orden, o crear una matriz / lista (por el número de órdenes) de las estructuras y llenarlos mediante la selección de ofertas.
 
JRandomTrader #:

Y tener en cuenta que un pedido puede generar varios tratos.

Así que o bien preseleccionar para cada pedido sus tratos, o bien crear un array/lista (por el número de pedidos) de estructuras y rellenarlas buscando tratos.

¿Por qué complicarse la vida? Si usted necesita calcular el beneficio para un cierto período, y en el código fuente esto es lo que se hace, a continuación, sólo tiene que ir a través de las ofertas para este período. La operación IN tiene o puede tener una comisión, la operación OUT puede tener un swap y un beneficio además de la comisión. Así, habiendo resumido todo, obtenemos el resultado deseado.

Otra cosa es si la tarea es recoger el beneficio para cada ID de posición por separado en un array.

 
Buenos días, había una señal con una orden abierta la cual estaba esperando su movimiento pero el administrador la envió al archivo por inactividad como el alega...por favor díganme como sacarla de ahí ahora.... gracias.