Bibliotecas: MT4Orders - página 69

 
fxsaber #:

El archivo está roto.

---

El archivo contiene la última versión

// 01.06.2021
// Corrección: Compatibilidad con el compilador build 2449 y superiores.
// Fix: Mejora de la sincronización. ByPass.mqh debe ser de la última versión.
// Añadir: OrderLots(true) - tamaño sincronizado de la posición seleccionada, teniendo en cuenta todas las órdenes que cierran esta posición.
 
Vitaly Muzichenko #:

El archivo está roto

Necesita descargar.

 
fxsaber #:

Necesita descargar.

Sí, claro. Es un milagro, diferentes archivos.

Gracias.
 
// Lista de cambios:
// 06.01.2022
// Fix: Definición precisa de los datos de apertura de la posición y del tamaño de la comisión. Funciona correctamente sólo en modo ByPass.
// Añadir: Añadido OrderDealsAmount() - el número de MT5-deals involucrados en la formación de la posición. Funciona correctamente sólo en modo ByPass.

Quien se ocupa de ejecuciones parciales y solapamientos CloseBy, recomiendo esta actualización.

 
fxsaber #:

Quien se ocupa de ejecuciones parciales y solapamientos CloseBy, recomiendo esta actualización.

Compruebe la precisión de los cálculos en el script.

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Modo ByPass para cálculos precisos.
#include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006

// Resumen de todas las operaciones monetarias - estilo MT5.
double GetProfitMT5( void )
{
  double Res = 0;
  
  if (HistorySelect(0, INT_MAX))
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
    {
      const ulong Ticket = HistoryDealGetTicket(i);
      
      Res += HistoryDealGetDouble(Ticket, DEAL_PROFIT) +
             HistoryDealGetDouble(Ticket, DEAL_SWAP) +
             HistoryDealGetDouble(Ticket, DEAL_COMMISSION);
    }
    
  return(Res);
}

// Resumen de todas las operaciones monetarias - estilo MT4.
double GetProfitMT4( void )
{
  double Res = 0;

  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)  
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Res += OrderProfit() + OrderSwap() + OrderCommission();
    
  return(Res);
}

void OnStart()
{
  if (PositionsTotal())
    MessageBox("The script works only if there are no open positions."); // Comprobar sólo si no hay posiciones abiertas.
  else
  {
    const double ProfitMT5 = GetProfitMT5(); // Resumen de todas las operaciones monetarias - estilo MT5.
    const double ProfitMT4 = GetProfitMT4(); // Resumen de todas las operaciones monetarias - estilo MT4.
    
    // Compare las sumas de las transacciones en efectivo calculadas por diferentes métodos.
    Alert("MT5 (" + DoubleToString(ProfitMT5, 8) + ") == MT4 (" + DoubleToString(ProfitMT4, 8) + ") - " +
          (string)(bool)!NormalizeDouble(ProfitMT4 - ProfitMT5, 8));
    Print(__MT4ORDERS__);
  }  
}


El resultado es una línea.

Alert: MT5 (0.00000000) == MT4 (-0.00500000) - false
Alert: MT5 (0.00000000) == MT4 (0.00000000) - true

false - MT4Orders tiene un error en alguna parte. Por favor, compruebe en cuentas complicadas. Si es falso - hágamelo saber.

 
fxsaber #:

Compruebe la exactitud de los cálculos.

Por favor, compruébelo en cuentas complicadas.

La comprobación mostró que la biblioteca con un historial de operaciones muy complejo funciona perfectamente. Fiabilidad 100%.

 

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading

Bibliotecas: MT4Orders

fxsaber, 2022.01.06 03:18 AM

// Lista de cambios:
// 06.01.2022
// Fix: Definición precisa de los datos de apertura de la posición y del tamaño de la comisión. Funciona correctamente sólo en modo ByPass.
// Añadir: Añadido OrderDealsAmount() - el número de MT5-deals involucrados en la formación de la posición. Funciona correctamente sólo en modo ByPass.

Usando CustomReport como ejemplo, déjame mostrarte como se ve

De izquierda a derecha los lugares resaltados.

  • OrderDealsAmount. Hay posiciones que fueron generadas por el correspondiente número de transacciones. En general, éstas pueden ser no sólo operaciones ENTRY_IN, sino también otros tipos de operaciones.
  • Por esta razón los precios de apertura pueden ser tan fraccionarios - el precio medio ponderado por volumen de todas las operaciones que formaron la posición.
  • Tamaño de la comisión en pips. No debe ser muy diferente (si el volumen es grande) en un símbolo. De lo contrario - MT4Orders bug.

El caso en la captura de pantalla es bastante simple. Hay casos mucho más complicados donde OrderDealsAmount se mide en decenas. Por ejemplo, en MT5 puede haber posiciones con la misma entrada que no se solapen en tiempo de vida. MT5-GUI mostrará que es una posición, con la hora de apertura de la primera posición. Y MT4Orders mostrará varias posiciones con diferente hora de apertura (y precio) y OrderTicketOpen (ticket de la operación de apertura).


En resumen, todo es muy preciso y en el MT4-Style habitual. Sólo en modo ByPass.

 
// Lista de cambios:
// 12.01.2022
// Corrección: OrderPrint() emite datos correctos de tipos de órdenes/operaciones MT5 poco comunes.
 
// Lista de cambios:
// 14.01.2022
// Corrección: Aceleración significativa de OrderSelect(index, SELECT_BY_POS, MODE_HISTORY) en modo ByPass.
 

Datos de la prueba de tensión técnica de la biblioteca en la cuenta real.

  • Un terminal MT5 b2958. Cobertura.
  • 16 gráficos, cada uno ejecutando un asesor de trading.
  • Cada Asesor Experto contiene más de 10 TS independientes (lógica y Magic) de media.
  • La negociación se realiza a través de MT4Orders+ByPass+Virtual+Snapshot.
  • Datos de precios vía CopyTicks+SymbolInfoTick.
  • Datos no relacionados con el precio - Calendario vía MQL.
  • Más de 160 TCs trabajan en paralelo. Cada uno acompaña sus propias posiciones y órdenes.
  • OrdersTotal + PositionsTotal > 300.
  • Combinaciones de Rechazos, partial fills y CloseBy.
  • TERMINAL_MEMORIA_UTILIZADA = 4 Gb. El principal consumo es la caché automática del historial de operaciones incorporada en el Terminal para cada ejecución de EX5: HistorialOrdenesTotal+HistorialOrdenesTotal > 100K.
  • 35% de redireccionamientos.
  • Volumen de operaciones diario > 50 millones de dólares.
  • HistoryDealsTotal diario > 1200, HistoryOrdersTotal > 1700.
  • Todos los ajustes del terminal minimizados, ventanas de servicio cerradas, gráficos y terminal minimizados.
  • CPU en modo normal ~ 1%. En el mercado activo picos de hasta decenas de por ciento.
  • Trading API - MT4Style solamente.
  • Hot-swap EX5 (actualización) en tiempo de ejecución.
  • Ping 3 ms.
  • Todas las órdenes de trading son síncronas (no OrderSendAsync). Las funciones OnTrade no se utilizan.

En este modo la librería maneja todas las desincronizaciones de MT5. No se rompió la lógica de MT4.


Se detectaron problemas de rendimiento al trabajar con el historial, lo que motivó la actualización de la biblioteca.

Después de cambiar en caliente EX5, los datos de sincronización son los siguientes.

MT4ORDERS::ByPass: Amount = 486/2336655 = 0.02%, Time(mcs) = 43175/51577570 = 0.08%, TimeAvg = 22 mcs, MaxInterval = 225711 mcs., Bugs = 0

Menos del 0,1% del tiempo de ejecución se dedicó a la sincronización de MT5. El tiempo medio es de 22 microsegundos. El tiempo máximo es de 225 milisegundos. De 2,5 horas de trabajo, 51 segundos se emplearon en llamadas al sincronizador (0,5%).


El índice de fiabilidad de la biblioteca es bastante alto. Se puede recomendar.