MetaTrader 5 Strategy Tester: Bugs, Bugs, Verbesserungsvorschläge - Seite 7

 
fxsaber:

Ein einzelner Durchlauf muss seine Eingabeparameter kennen. Es ist unwahrscheinlich, dass eine solche Funktion eingeführt wird, haben Sie also eine Idee, wie dies geschehen könnte? WinAPI wäre in Ordnung.

Holen Sie sich die neuesten Einstellungen des MT5-Testers.

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


Die Anwendung

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

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


Ergebnis

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 zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Neue Version der Plattform MetaTrader 5 build 1640: Erstellen und Testen eigener Finanzinstrumente

fxsaber, 2017.08.04 19:55

Ist es möglich, während der Optimierung eine Art Schutz (zumindest in Form einer Warnung mit einem akustischen Signal) gegen das Versetzen des Computers in den Ruhezustand einzurichten?

Ich vergaß völlig, dass die Optimierung im Gange war, und schloss den Laptop-Deckel... Die Verbindung war unterbrochen, nach dem Aufwachen wurde sie wiederhergestellt und die Optimierung ging weiter. Aber ich würde den Deckel nicht schließen, wenn ich daran erinnert würde, dass die Optimierung im Gange ist. Was man bei der Nutzung der Cloud sagen sollte...

Während der Optimierung ist die einzige Anzeige, dass die Optimierung im Terminal läuft, wenn der Tester ausgeblendet ist, ein grüner Balken auf dem Symbol (wie beim Herunterladen von Dateien in einem Browser). Beim Schließen des Terminals wird keine Warnung angezeigt, dass die Optimierung im Gange ist.

 

Replay-Problem bei der Anzeige von boolschen Eingabeparametern im Tester.

Dieser Expert Advisor

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

double OnTester() { return(i); }


Optimieren Sie es wie auf dem Screenshot gezeigt.


Wir entscheiden uns für einen der Pässe.


Bei den Parametern sehen wir Null anstelle von Falsch.


 

Ich bin nicht sicher, wie man das reproduzieren kann. Wenn ein einzelner Lauf aus den Optimierungsergebnissen ausgeführt wird, zeigt das Protokoll manchmal die Eingabeparameterwerte korrekt an (und ersetzt sie) (wie im Cache, einschließlich nicht optimierter Eingaben). Gleichzeitig werden aber auf der Registerkarte Parameter einige Eingabeparameter nicht aktualisiert.


Es stellt sich heraus, dass Sie Single aus Optimize ausführen - gut (entspricht Optimize-Ergebnis).

Wechseln Sie dann in den Einzelmodus und führen Sie denselben Lauf über die Schaltfläche "Start" aus - Sie erhalten andere Werte (weil einige Eingaben andere Werte haben als im vorherigen Schritt).

 

Es wurde bereits über die wilde Größe der Stämme gesprochen. Wenn Sie sich das Protokoll ansehen, sind Sie in 99 % der Fälle am Anfang und am Ende des Protokolls interessiert. Wegen der wilden Größe ist der Anfang also gar nicht zu sehen.

Wie wäre es, den Anfang und das Ende des Protokolls zu duplizieren? Insbesondere, um zu sehen, bei welchen Eingabeparametern der Start erfolgte.

 
Ich kam in eine Situation, in der es unmöglich war, die Ergebnisse früherer Optimierungen zu sehen. Das Einzige, was geholfen hat, war ein Neustart.
 

Dies sind die Meldungen, die das Prüfgerät jetzt ausgibt.

 
fxsaber:

Dies ist die Meldung, die der Tester jetzt ausgibt.

Der Prüfer hat diese Meldungen schon einmal abgegeben. Da es jetzt möglich ist, opt-Dateien herunterzuladen. Dies ist eine Warnung, dass, wenn dieOptimierung ausgeführt wird, diese opt-Datei überschrieben wird und die Optimierung erneut beginnt

 
Slava:

im Falle eines Optimierungslaufs wird diese opt-Datei überschrieben

Wird der Name passen?

Grund der Beschwerde: