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

 
fxsaber:

이제 테스터를 완전히 자유롭게 자동화할 수 있습니다.

실제 적용 예시 중 하나(모든 것이 자동으로 수행됨)

  1. 모든 심볼을 가져와서 각 심볼에 대해 다음 단계를 수행합니다.
  2. 최적화를 시작합니다.
  3. 최적화가 끝나면 데이터를 가져와서 최적화를 위한 몇 가지 작업(입력 매개변수 범위 설정)을 구성합니다.
  4. 항목 3의 모든 최적화가 수행됩니다.
  5. 항목 4의 모든 최적화에서 최상의 패스를 가져와 포트폴리오 거래를 위해 세트로 저장합니다.


이는 매우 강력한 시장 스캐너이자 TS 조정기로 밝혀졌습니다. 이러한 조작에는 TC 소스가 필요하지 않습니다.

 
// 테스터에 세트 파일을 로드하는 예제입니다.
#property script_show_inputs

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

input string inFileName = "SetFile.set"; // 설정 파일

string FileToString( const string FileName )
{
  ushort Buffer[];
  
  return(FileLoad(FileName, Buffer) ? ShortArrayToString(Buffer) : NULL);
}

void OnStart()
{  
  MTTESTER::SetSettings("[TesterInputs]\n" + FileToString(inFileName));
}
테스터의 ini 파일도 마찬가지입니다.
 
감사합니다
 
라이브러리가 MT5 빌드 2209+용으로 업데이트되었습니다.
 
fxsaber:

매우 강력한 시장 스캐너이자 TS 조정기로 밝혀졌습니다.

#property script_show_inputs

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

input bool OnlyCustomSymbols = true; // 사용자 지정 문자만 해당
input bool AllSymbols = false;       // 모든 문자 또는 현재

void Add( const string SymbName )
{
  TesterSettings.Add(NULL, SymbName, 0, 0, 0, TASK::InitBase, TASK::DeinitBase);

  for (int i = 0; i < ::inAmount; i++)
    TesterSettings.Add(NULL, NULL, 0, 0, 0, TASK::InitSub, TASK::DeinitSub);
}

// 이 함수는 작업 목록 생성을 담당합니다.
void SetTesterSettings()
{
  if (AllSymbols)
    // 마켓 워치에서 모든 심볼을 검색합니다.
    for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
    {
      const string Name = SymbolName(i, true);

      if (!OnlyCustomSymbols || SymbolInfoInteger(Name, SYMBOL_CUSTOM))
        Add(Name);
    }
  else if (!OnlyCustomSymbols || SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM))
    Add(_Symbol);
}


전문가 어드바이저는 다음을 갖춰야 합니다.

sinput int inMinTrades = 500; // 최소 거래 수(포지션).
sinput int inMaxTrades = 90000; // 최대 거래 수(포지션).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}
 
몇 가지 함정을 해결했습니다. 업데이트되었습니다.
 

이전 버전에 대해서는 잘 모르겠습니다. 하지만 최신 버전에서는 동일한 기기에 대한 테스트를 여러 번 실행할 수 있습니다.

로그에 완료가 표시된 다음 비어 있고 (시작이 표시되지 않음) 터미널이 동시에 새 패스를 시작했습니다. 그렇지 않은 경우 (IsRun = (Init = TesterSettings.Init(Pos)) && TesterSettings.Run(Pos))이 거짓을 반환하기 때문에, TesterSettings.Run(Pos)이 거짓을 반환합니다. 그리고 다음 타이머 전달에서 (MTTESTER::IsReady())가 false를 반환하면 대기 상태가 반복됩니다. TesterSettings.Run(Pos)) 자체가 거짓을 반환하면 시간 초과로 인해 기다리지 않고 종료되므로 사소한 문제인 것 같습니다.

 

traveller00:

TesterSettings.Run(Pos))가 거짓을 반환하는 것은 시간 초과로 인해 기다리지 않고 종료되는 사소한 문제인 것 같습니다.

그렇다면 이 숫자를 늘려보세요.

  static bool ClickStart( const bool Check = true, const int Attempts = 5 )

시작 버튼이 눌려진 후 오랫동안 중지 버튼으로 바뀌지 않는 경우는 한 번도 없었습니다.


예제3을 100자 동안 실행했는데 모든 것이 정상적으로 작동했습니다.

 
네, 저도 그렇게 해서 50으로 늘렸습니다. 하지만 다른 사람도 비슷한 문제를 겪거나 일반 버전에서 조정하고 싶을 경우를 대비해서요.
 
traveller00:
네, 저도 그렇게 해서 50으로 늘렸습니다. 하지만 다른 사용자도 비슷한 문제가 있거나 일반 버전에서 조정하고 싶을 경우를 대비해서요.

버튼의 상태를 변경하는 데 걸린 시도 횟수를 기록합니다. 흥미로운 결과입니다.


ZY 아마도이 버그가 여전히 영향을 미칠 수 있습니다.