Bibliotecas: MT4Orders - página 41

 
noChangepromise:

No está bien. compilado un montón de errores

 
fxsaber :

.


sin nombre de función

¿sin nombre de función? tu ordenador tiene ruso, así que puede que funcione bien. pero para nuestros no rusos tiene un gran problema con unicode

 
noChangepromise:

Su ordenador tiene ruso, por lo que puede funcionar bien. pero para nuestros no rusos tiene un gran problema con unicode

Es la primera vez que se expresa un problema de este tipo. Intenta descargar el archivo en sí en lugar de hacer copy-paste.

 
noChangepromise:

¿Podría dar un ejemplo de cómo convertir iMA () o iCustom ()

No hago conversiones.

 
// Lista de cambios:
// 02.11.2019
// Fix: Ajuste de lote, comisión y precio de cierre para posiciones CloseBy.


En MT4, es bastante fácil calcular el valor medio de los lotes negociados y la comisión pagada.

void OnStart()
{
  double AvgLots = 0;       // Lote medio de una posición cerrada.
  double AvgCommission = 0; // Comisión media por posición cerrada.
  
  int AmountPositions = 0;  // Número de posiciones cerradas.
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) && OrderLots())
    {
      AvgLots += OrderLots();
      AvgCommission += OrderCommission();
      
      AmountPositions++;
    }
    
  if (AmountPositions)
  {
    AvgLots /= AmountPositions;
    AvgCommission /= AmountPositions;
  }
}

La pieza resaltada es responsable de ignorar las posiciones cerradas por CloseBy. Ya que no se negocian y en realidad son falsas.

Resultó que un código tan simple (no doy otros ejemplos) no funcionaba correctamente en MT5 con la versión antigua de la librería. Ahora todo va bien.


ZЫ La primera vez que encontré un uso para la propiedad ORDER_POSITION_BY_ID.

 
fxsaber:

El enlace resaltado es un problema sin resolver. Si a alguien se le ocurre alguna solución, que me lo comunique.

Muleta solución.

bool IsSynchronized( void )
{
  static ulong Orders[];
  
  bool Res = true;
  
  for (int i = ArraySize(Orders) - 1; (i >= 0) && Res; i--)
    if (Orders[i])
      Res = OrderSelect(Orders[i]) || HistoryOrderSelect(Orders[i]);
    
  if (Res)
    for (int i = ArrayResize(Orders, OrdersTotal()) - 1; i >= 0; i--)      
      Orders[i] = OrderGetTicket(i);
      
  return(Res);  
}

#include <MT4Orders.mqh>

void OnTick()
{
  if (!IsSynchronized())
  {
    Alert("Hello World!");
    
    return;
  }
  
  // ....
}
 

Sería muy conveniente especificar al menos en la cabecera del comentario fuente que MT4ORDERS_FASTHISTORY_OFF no sólo acelera el trabajo con matrices de historial, sino que también afecta a la integridad del soporte funcional, en particular, sin esta opción es imposible seleccionar la orden de mercado previamente abierta y cerrada a través de OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY), porque el ticket transferido pertenece a la operación de entrada (que se descarta en IsMT4Deal).porque el ticket transferido pertenece a la operación de entrada (que se descarta en IsMT4Deal), y la búsqueda de la salida correspondiente sólo está cubierta por la compilación condicional en MT4ORDERS_FASTHISTORY_OFF (en GetPositionDealOut).

 
Stanislav Korotky:

Sería muy conveniente especificar al menos en la cabecera del comentario fuente que MT4ORDERS_FASTHISTORY_OFF no sólo acelera el trabajo con matrices de historial, sino que también afecta a la integridad del soporte funcional, en particular, sin esta opción es imposible seleccionar la orden de mercado previamente abierta y cerrada a través de OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY), porque el ticket transferido pertenece a la operación de entrada (que se descarta en IsMT4Deal).porque el ticket transferido pertenece a la operación de entrada (que se descarta en IsMT4Deal), y la búsqueda de la salida correspondiente sólo está cubierta por la compilación condicional en MT4ORDERS_FASTHISTORY_OFF (en GetPositionDealOut).

No se me ocurrió que este modo lento lo usaría otro. Ya ha pasado tanta agua que no hay manera de intentar mantenerlo.

 
fxsaber:

No se me ocurrió que este modo lento sería utilizado por nadie más. Ya ha pasado tanta agua que no hay forma de intentar mantenerlo.

No me gustan las dependencias peludas si no afectan a la funcionalidad, así que lo desactivé. ;-) Si se dijera que algunas funcionalidades no funcionan, por supuesto que las hubiera dejado.