MetaTrader 5 전략 테스터: 오류, 버그, 개선 제안 - 페이지 7

 
fxsaber :

단일 패스에서 입력 매개변수를 찾아야 합니다. 그러한 기능이 도입될 가능성은 거의 없습니다. 따라서 이를 수행할 수 있는 방법에 대한 귀하의 생각을 공유해 주십시오. WinAPI가 수행합니다.

최신 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);
}


애플리케이션

 // Советник при запуске одиночного прогона возвращает свои настройки.
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 플랫폼 빌드 1640의 새 버전: 자신의 금융 상품 생성 및 테스트

fxsaber , 2017.08.04 19:55

최적화하는 동안 컴퓨터가 절전 모드로 전환되는 것을 방지할 수 있습니까?

최적화가 진행되고 있다는 사실을 까맣게 잊고 노트북 뚜껑을 닫고... 연결이 끊어졌다가 깨어나면 복구가 되고 최적화가 진행되었습니다. 하지만 최적화가 진행 중이라는 알림을 받으면 뚜껑을 닫지 않을 것입니다. 클라우드를 사용할 때 무엇을 말할 수 있습니까 ...

또한 최적화 중에 테스터가 숨겨져 있는 터미널에서 최적화가 진행 중이라는 유일한 표시는 아이콘의 녹색 막대입니다(브라우저에서 파일을 다운로드할 때와 같이). 터미널을 닫으면 최적화가 진행 중이라는 경고가 표시되지 않습니다.

 

Tester에서 bool-input 매개변수를 표시하는 문제를 재현합니다.

이 고문

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

double OnTester () { return (i); }


화면과 같이 최적화합니다.


우리는 패스 중 하나를 시작하기로 선택합니다.


매개변수에서 거짓 대신 0을 봅니다.


 

재생산 방법을 모르겠습니다. 때로는 단일 실행을 시작할 때 로그 의 최적화 결과 에서 입력 매개변수의 값이 올바르게 표시(및 대체)됩니다(캐시에서와 같이 최적화되지 않은 입력을 포함하여). 그러나 동시에 매개변수 탭에서 일부 입력이 업데이트되지 않습니다.


최적화에서 하나를 실행하는 것으로 나타났습니다 - 우수합니다(최적화 결과와 일치).

그런 다음 단일 모드로 들어가 시작 버튼을 통해 동일한 패스를 실행합니다. 다른 값을 얻습니다(일부 입력은 이전 단계와 다른 값을 갖기 때문에).

 

넓은 갈매기의 야생 크기에 대해서는 이미 이야기했습니다. 로그를 볼 때 99%의 경우 항목이 맨 처음과 끝에서 관심을 받습니다. 그래서 야생의 크기 때문에 시작이 전혀 보이지 않습니다.

마지막에 로그의 시작 부분을 복제할 수 있습니까? 특히, 어떤 입력 매개변수에서 시작되었는지 확인합니다.

 
이전 최적화의 결과를 볼 수 없는 상황에 이르렀습니다. 재부팅 만 도움이되었습니다.
 

테스터가 현재 발행하는 메시지입니다.

 
fxsaber :

테스터가 현재 발행하는 메시지입니다.

테스터는 전에 그러한 메시지를 보냈습니다. 옵트 파일을 업로드할 수 있게 되었기 때문입니다. 최적화가 시작 되면 이 옵트 파일을 덮어쓰고 최적화가 다시 시작된다는 경고입니다.

 
Slava :

최적화가 시작 되면 이 옵트 파일을 덮어씁니다.

이름이 일치합니까?