라이브러리: 멀티 테스터 - 페이지 45

 

트레이딩, 자동매매 시스템 및 트레이딩 전략 테스트 포럼

메타트레이더 5 빌드 3081 새 버전: MQL5 서비스 개선 및 디자인 업데이트

fxsaber, 2021.10.15 12:33 오후

스크립트는 파일 관리자에서 문제없이 생성되는 파일 이름 길이에 대한 이해할 수없는 제한을 보여줍니다.

void CheckFile( string FileName )
{
  uchar Bytes[1];  
  
  FileName = "TempFolder\\" + FileName + "\\" + FileName + "\\" + FileName;
  Print(StringLen(FileName)); // 313

  Print(FileSave(FileName, Bytes)); //false
  Print(_LastError); // err_too_long_파일명 (5003)
}

void OnStart()
{
  CheckFile("ExpertNameExpertName.EURUSDEURUSDEURUSD.M1.20210701.20211009.41.BAA0EE191CCD66EB8291EC4D6434A6C8.opt");
}

파일 이름의 길이를 해결해 주세요. 실제로는 여기에서 사용해야 합니다.


다음 함수를 사용하면 긴 경로(MAX_PATH 이상)로 작업할 수 있습니다.

MTTESTER::FileSave
MTTESTER::FileLoad
MTTESTER::FileCopy
MTTESTER::FileMove
MTTESTER::FileIsExist


위의 예제는 표준 함수를 대체하면 작동합니다.

Print(MTTESTER::FileSave(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Files\\" + FileName, Bytes)); //true


또한 하위 폴더를 포함하여 마스크별로 파일 목록을 가져오는 함수도 추가했습니다( 이와 유사).

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ko/code/26132

void OnStart()
{
  string FileNames[];
  
  // 터미널 폴더에 있는 모든 로그 파일을 가져옵니다. 긴 경로(> MAX_PATH)를 지원합니다.
  MTTESTER::GetFileNames(FileNames, TerminalInfoString(TERMINAL_DATA_PATH) + "\\*.log");

  ArrayPrint(FileNames);
}


표준 함수에서 파일 경로 길이에 대한 제한이 자주 발생했습니다. 구현을 보면 표준 함수에 경로가 긴 파일에 대한 지원을 추가하는 것은 MQ 측에서도 간단해 보입니다.

 
코드를 디버깅할 때 이전 세션과의 혼동을 피하기 위해 활성 인쇄 전에 로그를 지우는 경우가 많습니다.
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ko/code/26132

void OnStart()
{
  MTTESTER::TerminalJournalClear(); // 전문가 저널 정리하기.
  
  Print("First Print.");
}
 

파일 이름과 그 내용에 추가 정보를 추가했습니다. 그렇지 않으면 언제, 무엇이 실행되었는지 이해하기 어려웠습니다(저는 자동 계산을 많이 합니다).

// bool에 의해 생성됨 MTTESTER::CheckInputs(const bool): https://www.mql5.com/ko/code/26132
// 링크: https://www.mql5.com/ru/blogs/post/760770

// [테스터].
// Expert=HelloWorld.ex5
// 심볼=EURUSD
// 기간=M1
// FromDate=2024.11.04.
// 예치금=10000.0
// 통화=EUR
// Leverage=500
// 서버 이름 = 메타쿼츠 데모
// [TesterInputs]

inRange1=3
; GroupName
inRange2=3



이제 이러한 데이터를 클립보드에 복사(CTRL+C)하고 테스터의 설정 탭(CTRL+V)으로 전송할 수 있습니다. 그런 다음 알람 조합을 한 번 실행합니다.

 
fxsaber #:
코드를 디버깅할 때 이전 세션과의 혼동을 피하기 위해 활성 인쇄 전에 로그 지우기를 자주 사용합니다.

이 함수는 TerminalJournalClear라고 하지만 로그를 지우지는 않고 전문가 탭만 지웁니다.

 
Andrei Iakovlev #:

이 함수는 터미널저널클리어라고 하지만 저널을 지우지는 않고 전문가 탭만 지웁니다.

용어상의 어려움이 있나요? 전문가 탭 지우기 - 스크립트가 있습니다. 로그 탭 - 생각해보지 못했습니다.

 
안녕하세요, 2025년 6월 6일 새로운 5100 빌드 푸시로 MTTester.mqh 라이브러리가 더 이상 사용되지 않는지 확인할 수 있는 사람이 있나요?
 
Muhammad Fahad #:
안녕하세요, 2025년 6월 6일 새로운 5100 빌드 푸시로 MTTester.mqh 라이브러리가 더 이상 사용되지 않는지 확인할 수 있는 사람이 있나요?
'MTTester.mqh'
WinAPI.mqh                      
windef.mqh                      
winnt.mqh                       
fileapi.mqh                     
winbase.mqh                     
winuser.mqh                     
wingdi.mqh                      
winreg.mqh                      
handleapi.mqh                   
processthreadsapi.mqh                   
securitybaseapi.mqh                     
errhandlingapi.mqh                      
sysinfoapi.mqh                  
processenv.mqh                  
libloaderapi.mqh                        
memoryapi.mqh                   
0 errors, 0 warnings, 193 msec elapsed, cpu='X64 Regular'
 

트레이딩, 자동매매 시스템 및 트레이딩 전략 테스트 포럼

라이브러리: 멀티테스터

fxsaber, 2022.09.01 10:26 AM

터미널 라이브업데이트 관리.
// 터미널 라이브업데이트 상태 전환하기.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ko/code/26132

void OnStart()
{
  const bool IsLiveUpdate = MTTESTER::IsTerminalLiveUpdate();
                     
  if (MessageBox("Current LiveUpdate - " + (IsLiveUpdate ? "ON" : "OFF") + ".\n\nWant to switch?",
                 "LiveUpdate Status", MB_YESNO) == IDYES)
   MessageBox("Current LiveUpdate - " + ((IsLiveUpdate ? !MTTESTER::TerminalLiveUpdateOFF() : MTTESTER::TerminalLiveUpdateON()) ? "ON." : "OFF."));
}

업데이트를 허용하지 않는 서비스.

#property service

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ko/code/26132

void OnStart()
{
  while (!IsStopped())
  {
    MTTESTER::TerminalLiveUpdateOFF();
    
    Sleep(5000);
  }
}

 
안녕하세요. 라이브러리를 이용해 주셔서 대단히 감사합니다! 무차별 대입 최적화 기준을 구현하는 방법을 알려주실 수 있나요?
 
parameter convertion type 'short[260]' to 'ushort[] &' is not allowed	MTTester.mqh	135	39
   int user32::GetClassNameW(long,ushort&[],int)	winuser.mqh	1414	37
'ReadFile' - no one of the overloads can be applied to the function call	MTTester.mqh	1283	21
   in template 'int MTTESTER::FileLoad(const string,T&[])' specified with [T=short]	MTTester.mqh	1270	14
   see template instantiation 'MTTESTER::FileLoad<short>'	MTTester.mqh	1569	23
could be one of 3 function(s)	MTTester.mqh	1283	21
   int kernel32::ReadFile(long,ushort&[],uint,uint&,OVERLAPPED&)	fileapi.mqh	124	8
   int kernel32::ReadFile(long,ushort&[],uint,uint&,long)	fileapi.mqh	125	8
   int kernel32::ReadFile(long,uchar&[],uint,uint&,long)	MTTester.mqh	60	7
2 errors, 0 warnings		2	0
текущий MTTester.mqh не  проходит проверку при компиляции себя же самого в 5100

이번 업데이트에서 2대의 다른 컴퓨터에서 - 멀티테스터

업데이트: 2025.06.06 08:04