MetaTrader 5 Strategy Tester: bug, errori, suggerimenti per il miglioramento - pagina 7

 
fxsaber:

Un singolo passaggio ha bisogno di conoscere i suoi parametri di ingresso. È improbabile che tale funzionalità venga introdotta, quindi qualche idea su come questo potrebbe essere fatto? WinAPI va bene.

Ottieni le ultime impostazioni di 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);
}


Applicando

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

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


Risultato

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
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Nuova versione della piattaforma MetaTrader 5 build 1640: creare e testare i propri strumenti finanziari

fxsaber, 2017.08.04 19:55

Durante l'ottimizzazione, è possibile fare un qualche tipo di protezione (almeno sotto forma di un avviso con un segnale acustico) contro la messa a riposo del computer?

Ho completamente dimenticato che l'ottimizzazione era in corso, e ho chiuso il coperchio del portatile... La connessione era interrotta, dopo il risveglio è stata ripristinata e l'ottimizzazione è andata avanti. Ma non chiuderei il coperchio se mi venisse ricordato che l'ottimizzazione è in corso. Cosa dire quando si usa la nuvola...

Inoltre, durante l'ottimizzazione, l'unica indicazione che l'ottimizzazione è in corso nel terminale con il Tester nascosto è una barra verde sull'icona (come quando si scaricano i file in un browser). Non c'è nessun avviso quando si chiude il terminale che l'ottimizzazione è in corso.

 

Problema di replay con la visualizzazione dei parametri di input bool nel Tester.

Questo consulente esperto

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

double OnTester() { return(i); }


Ottimizzatelo come mostrato nello screenshot.


Scegliamo di eseguire uno dei passaggi.


In Parameters vediamo zero invece di falso.


 

Non sono sicuro di come riprodurre. A volte, quando si esegue una singola corsa dai risultati dell'ottimizzazione, il registro mostra (e sostituisce) i valori dei parametri di input correttamente (come nella cache, compresi gli input non ottimizzati). Ma allo stesso tempo nella scheda Parametri alcuni parametri di input non vengono aggiornati.


Si scopre che si esegue Single da Optimize - bene (corrisponde al risultato di Optimize).

Poi entrate in modalità singola ed eseguite la stessa corsa tramite il pulsante Start - otterrete valori diversi (perché alcuni input hanno valori diversi rispetto al passo precedente).

 

Si è già detto della dimensione selvaggia dei tronchi. Quando si guarda il log, il 99% delle volte si è interessati all'inizio e alla fine del log. Quindi, a causa delle dimensioni selvagge, non si vede affatto l'inizio.

Che ne dite di duplicare l'inizio e la fine del registro? In particolare, per vedere a quali parametri di input era l'inizio.

 
Mi sono trovato in una situazione in cui era impossibile vedere i risultati delle ottimizzazioni precedenti. L'unica cosa che ha aiutato è stato un riavvio.
 

Questi sono i messaggi che il tester dà ora.

 
fxsaber:

Questo è il messaggio che il tester sta dando ora.

Il tester ha già dato questi messaggi. Dato che ora è possibile scaricare gli opt-file. Questo è un avvertimento che sel'ottimizzazione viene eseguita, questo file opt sarà sovrascritto e l'ottimizzazione inizierà di nuovo

 
Slava:

in caso di esecuzione di un'ottimizzazione, questo file opt sarà sovrascritto

Il nome corrisponderà?

Motivazione: