Librerías: MultiTester - página 35

 
fxsaber #:

¡Gracias por su ayuda en las pruebas! Actualizado MTTester.mqh publicado.

Muchas gracias por la biblioteca

 
MTTester.mqh ha sido actualizado de nuevo. Esta vez te voy a decir lo que era la lucha con.
#include <fxsaber\Benchmark\Benchmark.mqh>  // https://www.mql5.com/es/code/31279
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/es/code/26132

const bool Init = EventSetTimer(3);

void OnTimer()
{
  if (MTTESTER::IsReady()) // Si el botón de inicio está listo para ser pulsado
    Print(_B(MTTESTER::ClickStart(), 1)); // Si se ha pulsado el botón de inicio y cuánto tiempo ha tardado.
}

Este Asesor Experto presiona el botón Start cada tres segundos, si no es Stop. Me las arreglé para presionarlo - verdadero, de lo contrario - falso.


Situación estándar.

Presionado Inicio - el cálculo comenzó.

Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 125248 mcs.
true
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 123327 mcs.
true

Esta acción tarda ~125 ms.


No es raro.

Pulse Inicio - se inicia el cálculo instantáneo o el Comprobador informa de que no puede realizar el cálculo (por ejemplo, FromDate >= ToDate).

Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1001401 mcs.
true
Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1004102 mcs.
true

Esta acción dura aproximadamente un segundo. La librería se alertará, pero devolverá true - el botón fue presionado.


Situación poco frecuente.

No se ha pulsado Start. Esto sólo puede solucionarse reiniciando el Terminal.

No tengo registros de esta situación. Tomará <10 segundos identificar tal situación. Habrá una alerta como esta.

problem with Start-button!

Devuelve false - el botón no fue presionado.

 
Actualizado MTTester.mqh.
 
fxsaber #:

Es una situación rara.

No se pulsa Start. Esto sólo se puede curar reiniciando el Terminal.

Una máquina WinServer remota estaba continuamente haciendo cientos de pasadas individuales sin ningún fallo.


Tan pronto como me conecté (RDP) a esta máquina, el botón de Inicio dejó de pulsarse. La cura, como siempre, es reiniciar la Terminal.

Parece que este comportamiento tiene algo que ver con inicios de sesión similares en la máquina. Puedes iniciar sesión a través de RDP docenas de veces - todo funciona bien. Pero algún inicio de sesión se vuelve fatal para el Probador.


Los que se encuentran con el Start-bug - prestar atención a la relación entre el inicio de sesión en la máquina y el botón Inicio.


ZY Coincidencia o no, WinServer ofreció comprobar sus actualizaciones durante este inicio de sesión en la máquina.

 

Buena biblioteca.
¿Es posible especificar qué archivo *.set con ajustes de parámetros se debe pasar mediante programación para la prueba?

Por defecto sólo se utilizan los mismos ajustes, lo que no es muy conveniente.

 
sergego18 #:

¿Es posible especificar qué archivo *.set con la configuración de parámetros se debe pasar mediante programación para la prueba?

Ejemplo.
 
fxsaber #:
Ejemplo.

Gracias.
¿Es mejor pasar Configuración en una sola línea con filas separadas por el carácter \n.

o un array de filas como en el ejemplo?

Y es posible modificar en

clase MTTester el método estático Run

static bool Run( const string ExpertName = NULL,

const string Symb = NULL,

const ENUM_TIMEFRAMES period = PERIOD_CURRENT,

const datetime iBeginTime = 0,

const datetime iEndTime = 0 )

¿añadir una cadena de parámetros ( o una matriz de cadenas ) que especifique *.set EA settings?

 
sergego18 #:

Gracias.
¿Es mejor pasar Ajustes en una sola línea con filas separadas por el carácter \n?

¿O en un array de filas como en el ejemplo?

GetSettings es CTRL+C en Tester.

SetSettings es CTRL+V en Tester.

Vea con qué datos funciona CTRL+C/V.


Y si es posible modificar en

método estático de la clase MTTester Run

Yo no uso este método. Se queda como historia.


El ejemplo muestra todos los métodos MTTESTER que se necesitan.

 
sergego18 #:

¿Es posible especificar qué archivo *.set con la configuración de parámetros se debe pasar mediante programación para la prueba?

Validate trabaja con archivos ini completos del Comprobador y una versión reducida - archivos set para el Comprobador.

Si necesitas ejecutar muchos archivos ini/set, Validate lo hace de inmediato. Utilícelo.

 
fxsaber #:

Validate funciona con los archivos ini completos de Tester y con una versión simplificada: set-files para Tester.

Si necesitas ejecutar muchos archivos ini/set, Validate lo hace de inmediato. Utilícelo.

Gracias.
Encontré una solución a partir de este comentario donde el archivo set se carga en el formato requerido como una matriz de cadenas.

https://www.mql5.com/ru/forum/318305/page34#comment_51842356

También he sustituido

typedef bool (*INITDEINIT)( void );

puntero de llamadas de retorno en la inicialización y desinicialización de cada ejecución

a la interfaz

interfaz InitDeInit {

bool RunInit();

bool RunDeInit();

};

que se implementa en un heredero

de una clase similar a la estructura SETTINGS

y así en el método RunInit().

Cargo el fichero set de la herramienta requerida.

typedef bool (*INITDEINIT)( void ); - este puntero no permite saber que herramienta se está inicializando/desinicializando, por lo que es mejor utilizar un puntero a la interfaz, ya que los punteros a métodos aún no están soportados por MQL.

Con este enfoque no hay necesidad de modificar el método MTTester::Run.



Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
  • 2024.01.21
  • Yuriy Bykov
  • www.mql5.com
You can add this draft function for reading settings from file to string array. автоматическим торговым системам и тестированию торговых стратегий. Validate умеет запускать последовательно много ini-задайний