Probador de Estrategias de MetaTrader 5: errores, fallos, sugerencias de mejora - página 57

 

Las teclas de control de velocidad no funcionan en el Visor.



ZS Está funcionando. Al parecer, se trata de algún tipo de error complicado.

 
Habiendo probado el Asesor Experto en ticks reales con diferentes brokers en MT5 con la calidad de modelado de 99-100% con los mismos parámetros de entrada obtuve resultados absolutamente diferentes: desde ganancias cósmicas hasta pérdidas. Antes de eso, dejé a propósito MT4 porque es más difícil lograr la misma calidad de modelado allí. ¿Cuál fue el resultado? ¿Cómo se comportaría el Asesor Experto en el comercio real? ¿Tal vez alguien me dé un buen consejo?
 
ganri:
Habiendo probado el Asesor Experto en ticks reales en diferentes brokers usando MT5 con la calidad de modelado de 99-100% con los mismos parámetros de entrada, obtuve resultados absolutamente diferentes: desde una ganancia cósmica hasta una pérdida. Antes de eso, dejé a propósito MT4 porque es más difícil lograr la misma calidad de modelado allí. ¿Cuál fue el resultado? ¿Cómo se comportaría el Asesor Experto en el comercio real? ¿Tal vez alguien me dé un buen consejo?

El probador+asesor es una función matemática que asigna un número (beneficio) a cada vector (serie de números - comillas).

En consecuencia, (en general) diferentes vectores significan diferentes beneficios. Y estos beneficios no tienen que obedecer a ninguna regla (por ejemplo, ser positivos).


Diferentes corredores significan diferentes vectores (cotizaciones). No importa si son garrapatas, barras o cualquier otra cosa. Lo que importa es que los vectores son diferentes.

 
fxsaber:

El probador+asesor es una función matemática que asigna un número (beneficio) a cada vector (serie de números - comillas).

En consecuencia, (en general) diferentes vectores significan diferentes beneficios. Y estos beneficios no tienen que obedecer a ninguna regla (por ejemplo, ser positivos).


Diferentes corredores significan diferentes vectores (cotizaciones). No importa si son garrapatas, barras o cualquier otra cosa. Lo principal es que los vectores son diferentes.

Por lo que tengo entendido, en esta situación, debemos elegir el broker que tenga mejores resultados en las pruebas del EA y trabajar con él. Gracias.

 

En ME es lógico separar estos ajustes de depuración.

Por ejemplo, debe depurar en la Terminal en EURUSD, y en el Probador en EURUSD_Custom. Ahora es imposible configurarlo así.

Tal vez, tenga sentido crear para el Probador un campo de texto de ajustes donde podamos introducir dichos ajustes.

[Tester]
Period=M1
Optimization=0
Model=0
FromDate=2019.07.22
ToDate=2019.07.24
ForwardMode=0
Deposit=10000
Currency=USD
ProfitInPips=0
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=1

Entonces tendremos una flexibilidad total de ajustes. La interfaz gráfica de usuario no está sobrecargada.

Cadena de búsqueda: Uluchshenie 001.

 
Sólo se habilita un Agente. Su ventana de visualización, una vez realizada, no se cierra. En el Probador, se selecciona e inicia la Optimización.
2020.02.15 11:23:01.818 Tester  complete optimization started
2020.02.15 11:23:01.855 Core 1  agent still started in visual mode

El botón rojo de Stop permanece encendido aunque se cierre el Visor. No pasa nada, hay que pulsar manualmente Stop. Después de lo cual se rinde.

2020.02.15 11:25:52.278 Tester  optimization finished, total passes 0
2020.02.15 11:25:52.278 Statistics      optimization done in 2 minutes 51 seconds
2020.02.15 11:25:52.279 Tester  stopped by user

E incluso crea un archivo opt con cero pases.


Probablemente hay que corregir el comportamiento aquí.

Cadena de búsqueda: Uluchshenie 002.
 

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

Probador de Estrategias de MetaTrader 5: errores, fallos, sugerencias de mejora

fxsaber, 2020.02.11 01:58

Se buscó durante mucho tiempo la causa del extraño comportamiento del probador en las garrapatas reales. Lo encontré.
const bool Init = EventSetTimer(1);

void Func()
{
  static datetime PrevTime = 0;
  
  const datetime time = TimeTradeServer();
  
  if (time < PrevTime)
    DebugBreak(); // Срабатывает
  
  PrevTime = time;
}

void OnTick()
{
  Func();
}

void OnTimer()
{
  Func();
}

El tiempo del servidor se adelanta y luego regresa. Ocurre en el servidor de comercio real, pero he conseguido crear la reproducción en el símbolo personalizado.


Ejecutar

sinput datetime inDateFrom = D'2020.01.01';

void OnStart()
{
  const string Name = "TEMP12345";                                                           // Имя кастомного символа
  const string SymbOrig = "EURUSD";                                                          // Имя оригинального символа

  MqlTick Ticks[];
  
  const int Size = CopyTicksRange(SymbOrig, Ticks, COPY_TICKS_ALL, (long)inDateFrom * 1000); // Считали EURUSD-тики.
    
  if ((Size > 0) && CustomSymbolCreate(Name, NULL, SymbOrig) && SymbolSelect(Name, true))    // Создали символ на основе EURUSD.
  {
    CustomTicksReplace(Name, 0, LONG_MAX, Ticks);                                            // Поместили в него историю EURUSD.        
    
    CustomRatesDelete(Name, D'2020.01.03 23:00', D'2020.01.04 00:00');                       // Удалили несколько баров.
  }
}


Se creará un símbolo con historial de ticks, pero con varias barras eliminadas. A continuación, empezamos a depurar el EA anterior en este modo.

[Tester]
Symbol=TEMP12345
Period=M1
Optimization=0
Model=4
FromDate=2020.01.01
ToDate=2020.01.08
ForwardMode=0
Deposit=100000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6


Se detiene.

Podemos ver que el tiempo ha pasado un segundo bucle de tiempo.

Cadena de búsqueda: Oshibka 002.

 

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

Probador de Estrategias de MetaTrader 5: errores, fallos, sugerencias de mejora

fxsaber, 2020.02.01 13:43

Incluso este EA es más del doble de lento que Virtual en modo pips.

input int inFakeRange = 0;
sinput int inOffset = 10000;

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
}

¿Por qué ocurre esto? Todo el Asesor Experto está en el primer tick estableciendo BuyLimit. Nada más.

Cadena de búsqueda: Uluchshenie 003.
 
¡Genial!
2020.02.18 13:24:06.618 Core 1  pass 0 returned result 0 in 0:00:05.288 + history synchronization 0:00:03.098
 

No es posible establecer el tamaño del tick a menos o igual a uno.

Si se prescribe y se vuelve a introducir, el valor es cero. Para valores superiores a uno, todo está bien.

Cadena de búsqueda: Uluchshenie 004.