Testeur de stratégie MetaTrader 5 : bugs, anomalies, suggestions d'amélioration - page 7

 
fxsaber:

Une seule passe doit connaître ses paramètres d'entrée. Il est peu probable qu'une telle fonctionnalité soit introduite, alors avez-vous des idées sur la façon dont cela pourrait être fait ? WinAPI serait parfait.

Obtenez les derniers paramètres du testeur MT5.

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


Appliquer

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

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


Résultat

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 sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Nouvelle version de la plateforme MetaTrader 5 build 1640 : créer et tester vos propres instruments financiers

fxsaber, 2017.08.04 19:55

Pendant l'optimisation, est-il possible de créer une sorte de protection (au moins sous la forme d'un avertissement avec un signal sonore) contre la mise en veille de l'ordinateur ?

J'ai complètement oublié que l'optimisation était en cours, et j'ai fermé le couvercle de l'ordinateur portable... La connexion était interrompue, après le réveil elle a été rétablie et l'optimisation a continué. Mais je ne fermerais pas le couvercle si on me rappelait que l'optimisation est en cours. Que dire quand on utilise le Cloud...

De plus, pendant l'optimisation, la seule indication que l'optimisation est en cours dans le Terminal avec le Testeur caché est une barre verte sur l'icône (comme lors du téléchargement de fichiers dans un navigateur). Lors de la fermeture du terminal, il n'y a pas d'avertissement indiquant que l'optimisation est en cours.

 

Problème d'affichage des paramètres d'entrée bool dans le testeur.

Ce conseiller expert

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

double OnTester() { return(i); }


Optimisez-le comme indiqué sur la capture d'écran.


Nous choisissons d'exécuter l'une des passes.


Dans les paramètres, nous voyons zéro au lieu de faux.


 

Je ne sais pas comment le reproduire. Parfois, lors d'une exécution unique à partir des résultats de l'optimisation, le journal affiche (et substitue) les valeurs des paramètres d'entrée correctement (comme dans le cache, y compris les entrées non optimisées). Mais en même temps, dans l'onglet Paramètres, certains paramètres d'entrée ne sont pas mis à jour.


Il s'avère que vous exécutez Single à partir d'Optimize - bien (correspond au résultat d'Optimize).

Ensuite, entrez dans le mode Single et exécutez le même cycle via le bouton Start - vous obtenez des valeurs différentes (parce que certaines entrées ont des valeurs différentes de celles de l'étape précédente).

 

On a déjà parlé de la taille sauvage des bûches. Lorsque vous regardez le journal, 99 % du temps, vous êtes intéressé par le début et la fin du journal. Donc, à cause de la taille sauvage, on ne voit pas du tout le début.

Pourquoi ne pas dupliquer le début et la fin du journal ? En particulier, pour voir à partir de quels paramètres d'entrée on a commencé.

 
Je me suis retrouvé dans une situation où il était impossible de voir les résultats des optimisations précédentes. La seule chose qui a aidé a été un redémarrage.
 

Ce sont les messages que le testeur émet maintenant.

 
fxsaber:

C'est le message que le testeur délivre maintenant.

Le testeur a déjà donné ces messages auparavant. Puisqu'il est désormais possible de télécharger les fichiers opt-files. Il s'agit d'un avertissement indiquant que sil'optimisation est lancée, ce fichier opt sera écrasé et l'optimisation recommencera.

 
Slava:

en cas d'optimisation, ce fichier opt sera écrasé.

Le nom correspondra-t-il ?

Raison: