MT4-Tester VS MT5-Tester - página 3

 
fxsaber:
Prueba

Esto no es una prueba.

Se equivoca.

Mi afirmación se mantiene: dicho experto sólo está probando el acceso al historial de transacciones.
 
Renat Fatkhullin:

Esto no es una prueba.

Te equivocas.

¿Cuál es su error? Incluso lo he comprobado yo mismo poniendo BreakPoints allí donde hay una función de historial y ejecutando CTRL+F5 para depurar. Todo funcionó limpiamente.
Renat Fatkhullin:
Mi afirmación se mantiene: dicho experto está probando sólo el acceso al historial de transacciones.

Has sacado conclusiones precipitadas.

 

No estoy seguro de que esas comparaciones tengan sentido: la computación en la nube anula todas las ventajas de velocidad del probador de MT4.

Y, además, en este caso, efectivamente, el EA está probando únicamente la velocidad de acceso a los datos. Pero no creo que esto sea un cuello de botella para la mayoría de los EA.

Después de la introducción de cuentas con posiciones de cobertura en MT5 - personalmente no veo ninguna ventaja de MT4 para mí en absoluto. Utilizo librerías multiplataforma sólo porque tengo MT4 en mis cuentas reales.

Lo único que personalmente echo en falta: punteros o referencias a arrays. No necesito copiar los datos en los indicadores por un tiempo extra. MQL5 tiene todo lo demás.

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 
fxsaber:
Has sacado conclusiones precipitadas.
¿Qué más hay? Consulta de datos y volcado en un archivo. No hay otras acciones - ¿qué crees que está probando este EA?
 
fxsaber:

ZS No todas las carreras coinciden perfectamente. Así que uno de los tres está definitivamente mintiendo (MT4+TDS, MT5, MT4Orders). Tendremos que buscarlo.

Gracias al submarino se ha encontrado al culpable, siempre ocurre cuando hay posibilidad de comparar.

Asesor Experto mostrando el error

// MQL4&5-code

#property strict

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

#define  PRINT(A) Print(#A + " = " + (string)(A));

void OnTick()
{
  static bool FirstRun = true;
  
  static const double PrevBid = Bid;
  static const double PrevAsk = Ask;
  
  if (FirstRun)
  {
    PRINT((PrevBid != Bid) || (PrevAsk != Ask))
    
    FirstRun = false;
  }
}


MT4

2017.05.08 10:57:33.056 2017.04.10 00:00:08  TDS_Test EURUSD,M1: (PrevBid!=Bid)||(PrevAsk!=Ask) = false


MT5

2017.05.08 11:01:31.266 2017.04.10 00:00:08   (PrevBid!=Bid)||(PrevAsk!=Ask) = true
 
George Merts:
¿Qué más hay? La solicitud de datos y su almacenamiento en un archivo. No hay otras operaciones: ¿qué es exactamente lo que está probando este EA?
Te sugiero que leas todo el debate, así ni siquiera se plantearán esas preguntas.
George Merts:

Tras la introducción de las cuentas con posiciones de cobertura en MT5, personalmente no veo ni una sola ventaja de MT4.

Este hilo destaca un poco por su concentración de contenido constructivo. Así que es mejor discutir aquí las preferencias personales, por ejemplo.

 
fxsaber:
¿Dónde está el error? Incluso lo he comprobado yo mismo, he puesto puntos de ruptura en todos los lugares donde hay funciones del historial, y he ejecutado la depuración mediante CTRL+F5. Todo funcionó limpiamente.

Has sacado conclusiones precipitadas.

En definitiva:

  1. el trabajo con la historia está en pleno desarrollo, las operaciones se cierran después de la exploración de la historia
  2. usar MT4Orders.mqh - esto es el fin de la pureza del experimento. librería monstruosa con una sobrecarga, escrita asquerosamente e ilegible. alguien ha demostrado severamente su pereza
  3. escribir for(i=200 000; i>=0; i--) OrderSelect en cada tic no es más que una locura y un intento de repetir el chiste de la sierra japonesa y los hombres rusos exclusivamente
       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);
    
  4. toda la prueba fue escrita únicamente para el ciclo del punto 3

    Aproximadamente tomamos 1 800 000 ticks en la prueba, donde se abren 200 000 operaciones en 5 días. Simplifiquémoslo a 900 000 ticks, donde se escanean 100 000 órdenes en el historial y obtenemos 900 000 000 * 100 000 = 900 000 000 000 000 llamadas a OrderSelect (con desbordamiento de la biblioteca). Son exactamente 900 mil millones de llamadas a OrderSelect las que se prueban.

    Y de ellas, el 99,99% de las llamadas son absolutamente innecesarias y se hicieron sólo para demostrar los "retrasos".


Si quieres hacer una prueba limpia, escribe dos ejemplos limpios idénticos sin bibliotecas. Esto garantizará la limpieza y la ausencia de sobrecarga incorporada en aras de la compatibilidad.

Hemos optimizado el acceso al historial y anulado completamente esta demostración. Se escribió así a propósito.

 
Renat Fatkhullin:

En definitiva:

  1. El trabajo de la historia está en pleno apogeo, las operaciones se cierran después del escaneo de la historia
¿Dónde?
  1. usar MT4Orders.mqh - es acabar con la pureza del experimento. Es una librería horrible con sobrecarga escrita de forma asquerosa e ilegible.
Ese era yo.
  1. escribir for(i=200 000; i>=0; i--) OrderSelect en cada tic no es más que una locura y un intento de repetir el chiste de la sierra japonesa y los hombres rusos exclusivamente
Se ha olvidado por completo de MQL4. Aquí no hay ninguna referencia a la historia.
  1. toda la prueba fue escrita únicamente para el bucle del punto 3

    El 99,99% de las impugnaciones son completamente innecesarias y se hicieron puramente para demostrar los "frenos".
El ejemplo no es inventado, hay un enlace al original en la fuente. Este es uno de los más conocidos y antiguos revendedores.

Si quieres hacer una prueba limpia, escribe dos ejemplos limpios idénticos sin bibliotecas. De este modo, se garantizará la limpieza y no se incorporará ninguna sobrecarga en aras de la compatibilidad.

Quiero poder comparar los dos probadores. Vea los pros y los contras de cada uno. Además, la comparación es una de las formas más eficaces de identificar errores.

El hilo comienza con la demostración de la identidad de los datos en bruto de ambos probadores. Esta es la base, sin la cual no podemos hacer nada. Luego cada uno puede elegir un Asesor Experto para la prueba.

Hemos optimizado el acceso al historial y anulado completamente esta manifestación. Se escribió así a propósito.

Gracias a la aplicación de otra persona, la SDlo hizo. La crítica constructiva es algo bueno.
 

El trabajo con el historial es OrderSelect y comandos similares de OrderXXXX. No finjas que no lo entiendes. Especialmente si ha escrito la biblioteca.

No me he olvidado de MQL4 y allí también funciona con el historial.

¿Escribir un escáner de historia para 200 000 operaciones en profundidad en cada tick y olvidar la condición de una salida razonable del bucle? Esto se llama - para jugar a propósito los hombres rusos.

Y no te refieras a algunos revendedores. El bucle se escribió de forma tan estúpida a propósito. E incluso a los 5 días de la prueba no había más que cientos de miles de millones de funciones OrderXXX que se estaban probando, de las cuales el 99,99% no necesitaban ser llamadas.


El problema es que has empezado a argumentar con la afirmación absolutamente correcta "Todo el ejemplo de Asesor Experto está escrito de manera que sólo hace una cosa: escanear todo el historial de operaciones en cada tick", aunque sabías muy bien por qué has escrito la prueba de manera tan intencionada. Al fin y al cabo, podrías eliminar el 99,99% de la estúpida exploración con un movimiento de tu mano, pero entonces la prueba fallaría.
 
Renat Fatkhullin:

El trabajo con el historial es OrderSelect y comandos similares de OrderXXXX. No finjas que no lo entiendes. Especialmente si ha escrito la biblioteca.

No me he olvidado de MQL4 y allí también funciona con el historial.

¿Escribir un escáner de historia para 200 000 operaciones en profundidad en cada tick y olvidar la condición de una salida razonable del bucle? Esto se llama - para jugar a propósito los hombres rusos.

Y no hagas referencia a algunos revendedores. El bucle fue escrito a propósito. E incluso a los 5 días de la prueba no probó más que cientos de miles de millones de funciones OrderXXXXX, el 99,99% de las cuales no necesitaban ser llamadas.

No voy a discutir. Pido a los usuarios del foro que estén familiarizados con MQL4 que revisen este breve código fuente y expliquen lo que significa Renat.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

MT4-Tester VS MT5-Tester

fxsaber, 2017.05.08 01:11

EA

// 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); 
}

Debo estar equivocado, pero no veo por dónde va el trabajo del historial en MT4. Por favor, ayuda.

Razón de la queja: