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

 
fxsaber:

Una sola pasada necesita conocer sus parámetros de entrada. Es poco probable que se introduzca esta funcionalidad, así que ¿alguna idea de cómo podría hacerse? WinAPI estaría bien.

Obtenga la última configuración de MT5 Tester.

#include <WinAPI\fileapi.mqh>
#include <WinAPI\handleapi.mqh>

// Получает имя файла настроек последнего запуска MT5-Тестера.
string GetTesterINIFileName( ulong &Size )
{
  string Str = NULL;
  const string Path = ::TerminalInfoString(TERMINAL_PATH)+ "\\MQL5\\Profiles\\Tester\\";
  
  FIND_DATAW FindData;
  const HANDLE handle = kernel32::FindFirstFileW(Path + "*.ini", FindData);
  
  if (handle != INVALID_HANDLE)
  {     
    ulong MaxTime = 0;
    Size = 0;
    
    do
    {
      const ulong TempTime = ((ulong)FindData.ftLastWriteTime.dwHighDateTime << 32) + FindData.ftLastWriteTime.dwLowDateTime;
      
      if (TempTime > MaxTime)
      {
        MaxTime = TempTime;
        
        Str = ::ShortArrayToString(FindData.cFileName);
        Size = ((ulong)FindData.nFileSizeHigh << 32) + FindData.nFileSizeLow;;
      }      
    }
    while (kernel32::FindNextFileW(handle, FindData));    
    
    kernel32::FindClose(handle);
  }
  
  return((Str == NULL) ? NULL : Path + Str);   
}

#define  GENERIC_READ  0x80000000
#define  SHARE_READ    1
#define  OPEN_EXISTING 3

// Получает настройки последнего запуска MT5-Тестера.
string GetTesterINI( void )
{
  string Str = NULL;
  
  ulong Size;
  const string FileName = GetTesterINIFileName(Size);
  
  if (FileName != NULL)
  {
    const HANDLE handle = kernel32::CreateFileW(FileName, GENERIC_READ, SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    
    if (handle != INVALID_HANDLE)
    {
      uint Read;
      ushort Buffer[];
      
      ::ArrayResize(Buffer, (int)Size / sizeof(ushort));
            
      if (kernel32::ReadFile(handle, Buffer, (int)Size, Read, 0))      
        Str = ::ShortArrayToString(Buffer);
      
      kernel32::CloseHandle(handle);        
    }
  }
  
  return(Str);
}


Aplicando

// Советник при запуске одиночного прогона возвращает свои настройки.
input int inInput1 = 1;
input int inInput2 = 2;

int OnInit()
{
  if (MQLInfoInteger(MQL_TESTER) && !MQLInfoInteger(MQL_OPTIMIZATION))
    Print(GetTesterINI());
  
  return(INIT_FAILED);
}


Resultado

2019.04.01 00:00:00   ;Одиночный тест советника: Test9, EURUSD M1, цены открытия, 2019.04.01 - 2019.09.18
2019.04.01 00:00:00   [Tester]
2019.04.01 00:00:00   Expert=Test9.ex5
2019.04.01 00:00:00   Symbol=EURUSD
2019.04.01 00:00:00   Period=M1
2019.04.01 00:00:00   Optimization=0
2019.04.01 00:00:00   Model=2
2019.04.01 00:00:00   FromDate=2019.04.01
2019.04.01 00:00:00   ToDate=2019.09.18
2019.04.01 00:00:00   ForwardMode=0
2019.04.01 00:00:00   Deposit=10000
2019.04.01 00:00:00   Currency=EUR
2019.04.01 00:00:00   ProfitInPips=1
2019.04.01 00:00:00   Leverage=100
2019.04.01 00:00:00   ExecutionMode=0
2019.04.01 00:00:00   OptimizationCriterion=6
2019.04.01 00:00:00   Visual=0
2019.04.01 00:00:00   [TesterInputs]
2019.04.01 00:00:00   inInput1=123||1||1||10||N
2019.04.01 00:00:00   inInput2=2||2||1||20||N
 

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Nueva versión de la plataforma MetaTrader 5 build 1640: crear y probar sus propios instrumentos financieros

fxsaber, 2017.08.04 19:55

Durante la optimización, ¿es posible hacer algún tipo de protección (al menos en forma de aviso con una señal sonora) para no llevar el ordenador a la suspensión?

Olvidé por completo que la optimización estaba en curso, y cerré la tapa del portátil... La conexión se rompió, después de despertarse se restableció y la optimización continuó. Pero no cerraría la tapa si me recordaran que la optimización está en marcha. Qué decir cuando se utiliza la nube...

Además, durante la optimización, la única indicación de que la optimización está en curso en el terminal con el comprobador oculto es una barra verde en el icono (como cuando se descargan archivos en un navegador). Al cerrar el Terminal no se advierte que la Optimización está en curso.

 

Problema de repetición con los parámetros de entrada bool que se muestran en el Probador.

Este Asesor Experto

input int i = 0;
input bool b = false;

double OnTester() { return(i); }


Optimícelo como se muestra en la captura de pantalla.


Elegimos ejecutar uno de los pases.


En Parámetros vemos cero en lugar de falso.


 

No estoy seguro de cómo reproducirlo. A veces, cuando se ejecuta una única ejecución desde los resultados de la optimización, el registro muestra (y sustituye) los valores de los parámetros de entrada correctamente (como en la caché, incluyendo las entradas no optimizadas). Pero al mismo tiempo en la pestaña de Parámetros algunos parámetros de entrada no se actualizan.


Resulta que se ejecuta Single desde Optimize - bien (coincide con el resultado de Optimize).

A continuación, entre en el modo individual y ejecute la misma ejecución mediante el botón de inicio - obtendrá valores diferentes (porque algunas entradas tienen valores diferentes a los del paso anterior).

 

Ya se ha mencionado el tamaño salvaje de los troncos. Cuando miras el registro, el 99% de las veces te interesa el principio y el final del registro. Así que debido al tamaño salvaje, el principio no se puede ver en absoluto.

¿Qué tal si duplicamos el principio y el final del registro? En particular, para ver en qué parámetros de entrada fue el inicio.

 
Me encontré con una situación en la que era imposible ver los resultados de las optimizaciones anteriores. Lo único que ayudó fue un reinicio.
 

Estos son los mensajes que emite ahora el probador.

 
fxsaber:

Este es el mensaje que emite ahora el probador.

El probador ha dado estos mensajes antes. Ya que ahora es posible descargar los archivos opt. Esto es una advertencia de que sise ejecuta la optim ización, este archivo opt se sobrescribirá y la optimización comenzará de nuevo

 
Slava:

en caso de que se ejecute una optimización, este archivo opt se sobrescribirá

¿Coincidirá el nombre?

Razón de la queja: