MT4-Tester VS MT5-Tester

 
Finalmente he realizado una vieja idea

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

Discussion on "Los EAs listos de MQL5 Wizard funcionan en MetaTrader 4"

fxsaber, 2017.03.09 13:02

Sugiero tomar la prueba de Tick Data Suite (Compatible: MT4 build 940 - 1052) para comparar.

En el probador de MT5 seleccione el modo "por ticks reales". Guárdelos y aliméntelos en el probador de MT4 a través de TDS.

Entonces las cotizaciones en ambos probadores coincidirán al 100%, lo que permitirá compararlos no sólo en operaciones, sino también en velocidad.

De este modo, sería posible comparar la conversión/creación de EAs en ambas direcciones.

MT4 build 1072, MT5 build 1596 servidor de trading Alpari-MT5.

Configuración del probador de MT4 en la captura de pantalla

La moneda en ambos probadores es el USD. Esto permite en el mismo probador MT5 para EURUSD no tirar otro tick de símbolo de conversión.


Ahora ejecutamos el siguiente Asesor Experto multiplataforma en ambos probadores

// MQL4&5-code

#property strict

class FILE
{
private:
  const int handle;
  
  static string TickToString( const MqlTick &Tick, const string Delimeter = " " )
  {
    return(::DoubleToString(Tick.ask, _Digits) + Delimeter + ::DoubleToString(Tick.bid, _Digits));
  }
public:  
  FILE( const string FileName ) : handle(::FileOpen(FileName, FILE_WRITE | FILE_TXT | FILE_ANSI))
  {
  }
  
  ~FILE( void )
  {
    if (this.handle != INVALID_HANDLE)
      ::FileClose(handle);       
  }
  
  bool Write( const MqlTick &Tick ) const
  {
    return((this.handle != INVALID_HANDLE) && ::FileWriteString(this.handle, FILE::TickToString(Tick) + "\n"));
  }
};

const FILE File(::MQLInfoString(MQL_PROGRAM_NAME) + ".txt");

void OnTick()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    File.Write(Tick);
}


Registro de MT4-tester

2017.05.07 23:25:36.155 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:02.528 (total time 0:00:03.292)


Registro del probador MT5

2017.05.07 23:26:01.016 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:01.918 (including ticks preprocessing 0:00:00.203).

Confirmamos que los archivos recibidos de cada probador son idénticos: las marcas de los probadores coinciden.


En este punto, la preparación de ambos probadores para el nuevo servicio está lista.

 

Asesor experto

// MQL4&5-code

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#ifdef __MQL5__
  #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
  #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))
#endif // __MQL5__

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3; 
input int Limit = 18;
input double Lots = 0.1;

int PriceToInteger( const double Price )
{
  return((int)(Price / _Point + 0.1));
}

void OnTick()
{
  static int PrevBid = PriceToInteger(Bid);
  static int PrevAsk = PriceToInteger(Ask);    

  const int IntBid = PriceToInteger(Bid);
  const int IntAsk = PriceToInteger(Ask);
  
  const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps
  
  if (TradeTime && (IntAsk - IntBid < Limit))
  {
    if ((IntBid - PrevBid >= Shift)) 
      OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
    
    if (PrevAsk - IntAsk >= Shift) 
      OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--) 
    if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) ||
        ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
        ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) 
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); 
}


Los resultados


Informe de MT4

Strategy Tester Report
Lucky
MetaQuotes-Demo (Build 1072)

SímboloEURUSD (Euro vs. Dólar)
Periodo1 minuto (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16)
ModeloTodos los ticks (método más preciso basado en todos los plazos más pequeños disponibles)
ParámetrosDesplazamiento=3; Límite=18; Lotes=0,1;
Bares en la historia7292Garrapatas modeladas1865515Calidad de los modelos99.00%
Errores de concordancia de los gráficos0
Depósito inicial100000.00DifundirVariable
Beneficio neto-10863.90Beneficio total2528.70Pérdida total-13392.60
Rentabilidad0.19Remuneración esperada-0.49
Reducción absoluta10864.70Reducción máxima10864.70 (10.86%)Reducción relativa10.86% (10864.70)
Total de operaciones21954Posiciones cortas (% de ganancias)12016 (68.60%)Posiciones largas (% de ganancias)9938 (67.03%)
Operaciones rentables (% del total)14904 (67.89%)Operaciones con pérdidas (% del total)7050 (32.11%)
El más grandecomercio rentable3.00transacción perdedora-4.40
Mediaacuerdo rentable0.17comercio perdedor-1.90
Número máximovictorias continuas (beneficios)155 (46.60)Pérdidas continuas (pérdida)115 (-210.10)
Max.beneficios continuos (número de victorias)46.60 (155)pérdida continua (número de pérdidas)-210.10 (115)
Mediaganancias continuas5pérdida continua2


Informe MT5

Informe de comprobación de la estrategia
Alpari-MT5 (Build 1596)
Ajustes
Asesor experto:Lucky
Símbolo:EURUSD
Período:M1 (2017.04.10 - 2017.04.16)
Parámetros:Turno=3
Límite=18
Lotes=0,1
Agente de bolsa:Alpari International Limited
La moneda:USD
Depósito inicial:100 000.00
Apalancamiento:1:100
Backtest
La calidad de la historia:n/a
Bares:7192Tiki:1865415Personajes:1
Beneficio neto:-10 863.90Disminución absoluta del balance:10 863.90Disposición absoluta de fondos:10 864.70
Beneficio total:2 528.70Disposición máxima del saldo:10 863.90 (10.86%)Disposición máxima de fondos:10 864.70 (10.86%)
Pérdida total:-13 392.60Reducción relativa del balance:10.86% (10 863.90)Disminución relativa de los fondos:10.86% (10 864.70)
Rentabilidad:0.19La recompensa esperada:-0.49Nivel de margen:863.58%
Factor de recuperación:-1.00Ratio de Sharpe:-0.50Puntuación Z:-52.22 (99.74%)
AHPR:1.0000 (-0.00%)Correlación LR:-1.00Resultado de OnTester:0
GHPR:1.0000 (-0.00%)Error estándar LR:149.82
Total de intercambios:21954Operaciones cortas (% de ganadores):12016 (68.60%)Operaciones largas (% de ganancias):9938 (67.03%)
Total de intercambios:43908Operaciones rentables (% de todas las operaciones):14904 (67.89%)Operaciones con pérdidas (% de todas las operaciones)7050 (32.11%)
La operación más rentable3.00La mayor operación perdedora-4.40
Operación rentable media:0.17Operación perdedora media:-1.90
Número máximo de victorias consecutivas (beneficio):155 (46.60)Número máximo de pérdidas continuas (pérdida):115 (-210.10)
Beneficios máximos continuos (número de victorias):46.60 (155)Pérdida continua máxima (número de pérdidas):-210.10 (115)
Ganancias medias continuas:5Pérdidas medias continuas:2


Los resultados coinciden.


Rendimiento

MT4-log
2017.05.08 01:45:42.765 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:03.682 (total time 0:00:04.400)


MT5-log

2017.05.08 02:04:53.278 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:12.309 (including ticks preprocessing 0:00:00.203).


MT4-tester ha conseguido ser 3 veces más rápido que MT5-tester. Si hay alguna duda de que el registro de MT5 es causado por el uso de una biblioteca de terceros, aquellos que lo deseen pueden reescribir la simple lógica de MT4 de este Asesor Experto en MQL5 a su manera y comprobar la hipótesis.


HZ el probador MT5 estaba trabajando mucho más lento, hasta que limpié todas las carpetas de Bases a mano. Los resultados se dan teniendo en cuenta esto.

 

En el servidor Alpari-MT5-Demo en la nueva build (que saldrá en una semana) con acceso rápido al historial de operaciones lo he conseguido:

EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0:00:05.578.

MT5 tiene una sobrecarga del sistema para transferir los datos y la propia tarea a un proceso de agente externo, que en tareas pequeñas (segundos) introduce un gran error en comparación.

Y la complejidad y calidad del probador en MT5 es mucho mayor: modelado sincrónico de muchos instrumentos con una precisión de milisegundos, deslizamientos/retrasos reales durante el desplazamiento de los cambios del mundo y muchas más funciones menores. No es que haya un bucle for.


Más lento por órdenes de magnitud - ¿no te confundes con la inicialización/sincronización y la carga de todos los datos? Todo está escrito en los registros. Los archivos del disco no deben tocarse en ningún caso.

Recomiendo poner el directorio %userdata%\MetaQuotes (como C:\sers\%username%\AppData\Roaming\MetaQuotes) en el pase del antivirus. Aquí es donde se encuentran los datos y añadir el antivirus a la pasada mejora drásticamente la velocidad de acceso a los datos del terminal y del probador.

De lo contrario, se emocionan mucho cuando ven que metatester[64].exe se ejecuta, abriendo el puerto de red y un montón de archivos de datos grandes, escritos por el terminal y el probador. El probador de algunos comerciantes llega a caer, porque el antivirus no tiene tiempo de comprobar el archivo metatester[64].exe ni siquiera en unos segundos y el terminal no puede acceder a él.

 
Renat Fatkhullin:

la complejidad y la calidad del probador en MT5 es un orden de magnitud superior: modelado sincrónico de múltiples instrumentos con una precisión de milisegundos, deslizamientos/retrasos honestos mientras se desplaza por los cambios del mundo y un montón de características más pequeñas.

El paquete MT4+TDS también lo tiene. Además de algunas funciones más de las que carece MT5... Pero, por supuesto, no hay multimoneda.

Más lento por órdenes de magnitud.

Al principio pensé que el TDS ralentizaba deliberadamente la MT5, así que limpié su memoria. También he limpiado las carpetas de Bases (me estaba quedando sin espacio en el disco). Después de eso MT5 fue dos órdenes de magnitud más rápido para una sola ejecución (los reinicios no ayudaron antes). La hipótesis sobre los bloques TDS no se ha podido confirmar, aunque lo he intentado. No he tenido ningún antivirus en mi ordenador.

El servidor Alpari-MT5 es real.


ZZY ejecutó MT4-optimizer en ejecución completa - 14 minutos. MT5 (sólo queda un agente) - parece que serán muchas horas. Publicaremos el total por la mañana/tarde.

 

¿De dónde proceden los resbalones?

Tienes algo completamente diferente en mente. Juega con el campo de retardo en el probador de MT5 y verás que es algo totalmente distinto. Incluso el habitual Sleep(2500) en el código MQL5, cuando se ejecuta en el probador, dará un retraso en el código cuando todo el mundo sigue simulando. El campo de retardo de ejecución muestra efectivamente cómo se ejecutarán las operaciones si se pone ahí el ping de 100ms al servidor.

No puede haber un orden de magnitud de retraso. Y por qué habría complementos para MT5 cuando funciona bien por sí mismo.

En cuanto a la sobrecarga, no hay ajustes ni límites.
 

Sobre la falta de antivirus - desde hace mucho tiempo, todas las versiones desde el 7 tienen un Windows Defender interno y discreto, que hace un buen trabajo de escaneo de todos los archivos.

A veces genera retrasos notables en las operaciones de archivos incluso en discos SSD.

 

Overkill (100.000 USD al inicio)


Deslizamientos en MT4 (los milisegundos en el historial de ticks funciona como debería) y otras bondades


 
Renat Fatkhullin:

Sobre la falta de antivirus - desde hace mucho tiempo, todas las versiones a partir de la 7 tienen un Windows Defender interno y discreto, que escanea todos los archivos.

Desactivado. Ya tengo todos los datos para ver fuertes ralentizaciones de MT5 en la optimización. Publicaré los resultados de la optimización comparativa cuando la MT5 esté terminada.
 
No entiendo la idea de los duplicados

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

Bichos, errores, preguntas

fxsaber, 2017.05.07 21:55

Servidor comercial Alpari-MT5

¿Por qué hay ticks duplicados (bid y ask son iguales) en el historial de ticks de FOREX?

El probador está compitiendo con EAs en duplicados y hay la mitad de ellos. ¿Es necesario para obtener el rendimiento adecuado bajar a la mitad?

 

Sigues sin entender los deslices de los que hablo. En principio no funciona en MT4.

No en ticks, sino en el proceso del programa mcl5, cuando se detiene y los ticks siguen y el mundo da vueltas. Escriba Sleep(3000) y el programa esperará 3 segundos y durante este tiempo los ticks estarán tickeando, el mercado estará simulando.

Si establece el campo Retraso de Ejecución en 200ms en el probador, se simulará una latencia neta de 200 al ejecutar las operaciones, lo que dará lugar a deslizamientos de mercado o recotizaciones.

Se trata de otro potente nivel de modelización del proceso de mercado, y dentro de un sistema multidivisa. Y lo que es más importante, en un proceso alienado a distancia. Por ejemplo, un agente de 10.000 km recibe de repente una solicitud dinámica de acceso a los símbolos que faltan en el código al realizar una tarea y es capaz de solicitar estos datos al maestro, incrustarlos en el mundo del mercado y seguir girando.

 
Renat Fatkhullin:

Sigues sin entender los deslices de los que hablo. En principio no funciona en MT4.

No en ticks, sino en el proceso del programa mcl5, cuando se detiene y los ticks siguen y el mundo da vueltas. Escribe Sleep(3000) y el programa esperará 3 segundos y en ese tiempo los ticks estarán tickeando, el mercado estará simulando.

Esto no funciona ahora en MT4.

Si establece el campo Retraso de Ejecución en 200ms en el probador, simulará una latencia neta de 200 al ejecutar las operaciones, lo que dará lugar a deslizamientos del mercado o recotizaciones.

Esto funciona ahora en MT4.

Se trata de otro potente nivel de modelización del proceso de mercado, y dentro de un sistema multidivisa. Y lo que es más importante, en un proceso alienado a distancia. Por ejemplo, un agente de 10.000 km recibe de repente una solicitud dinámica de acceso a los símbolos que faltan en el código al realizar una tarea y es capaz de solicitar estos datos al maestro, incrustarlos en el mundo del mercado y seguir girando.

No pretendo denigrar la MT5. Sólo estoy haciendo una comparación reproducible. Por supuesto, el probador de MT5 es inalcanzable por algunos parámetros, pero el probador de MT4 es capaz de dar las cosas, que no están presentes en MT5, pero que son realmente demandadas. Hemos visto que una prueba precisa en ticks reales personalizados en MT4 es 100% verdadera. Bueno, y la regulación de todo tipo de ajustes (comisión, sangrías, reglas de activación de órdenes pendientes, etc.) del probador está ahí. En general, hay cosas que aún no están implementadas en MT5.
Razón de la queja: