MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案 - ページ 7

 
fxsaber:

単一のパスは、その入力パラメータを知る必要があります。このような機能が導入される可能性は低いので、どのような方法が考えられるか?WinAPIなら問題ない。

最新の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);
}


応用編

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

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


結果

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
 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MetaTrader 5 build 1640 プラットフォームの新バージョン:独自の金融商品の作成とテスト

fxsaber さん 2017.08.04 19:55

最適化中に、コンピュータをスリープ状態にしないように、何らかの保護機能(少なくとも音声による警告)を作ることは可能でしょうか?

Optimisationが進行中であることをすっかり忘れて、ノートパソコンの蓋を閉めてしまった......。接続が切れていたのが、起床後に復旧し、Optimisationが実行された。しかし、Optimisationが進行中であることを思い知らされたら、蓋を閉めるわけにはいきません。クラウドを利用する際の注意点...

また、Optimization中は、Testerを非表示にしたTerminalでは、Optimization中の表示はアイコン上の緑のバーだけです(ブラウザでファイルをダウンロードするときと同じ)。ターミナルを閉じるときに、最適化中であることを示す警告が表示されない。

 

テスターでbool入力パラメータが表示される不具合を再現しました。

このExpert Advisor

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

double OnTester() { return(i); }


スクリーンショットに示すように最適化します。


パスの1つを選んで実行します。


Parametersでは、falseの代わりにzeroが表示されます。


 

再生方法がわからない。最適化の 結果から単一の実行を実行すると、ログに入力パラメータ値が正しく表示(置換)されることがあります(キャッシュのように、最適化されていない入力も含まれます)。しかし、同時にParametersタブでは、いくつかの入力パラメータが更新されません。


OptimizeからSingleを実行すると、問題ない(Optimizeの結果と一致する)ことがわかりました。

次に、Singleモードに入り、Startボタンで同じ実行を行うと、異なる値が得られます(いくつかの入力が前のステップと異なる値であるため)。

 

原木の大きさがワイルドであることは、すでに述べたとおりです。ログを見るとき、99%はログの最初と最後に興味があるものです。だから、サイズがワイルドな分、冒頭が全然見えないんです。

ログの最初と最後を重複させるのはどうでしょうか?特に、どのような入力パラメータでスタートしたかを確認することです。

 
以前の最適化の結果を見ることができない状況に陥った。唯一の救いは、再起動だった。
 

これが、今のテスターが出すメッセージです。

 
fxsaber:

これが、今、テスターが出しているメッセージです。

テスターは以前にもこのようなメッセージを出したことがあります。オプトファイルのダウンロードが可能になったため。最適 化が実行されると、このopt-fileは上書きされ、最適化が再び開始されることを警告するものです

 
Slava:

最適化実行 の場合、このopt-fileは上書きされます。

名前は一致するのか?