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

 

진드기의 기록을 다운로드하는 가장 편리한 방법( 터미널에서 전문가 어드바이저를 실행하세요).

#property description "테스터를 통해 틱을 다운로드합니다."

sinput datetime inFromDate = D'2019.01.01'; // 틱을 업로드할 날짜
sinput bool inAllSymbols = false;           // 모든 문자(참) 또는 현재 문자(거짓) 기준

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

string PrevTesterSettings = NULL;

string GetMyName( void )
{
  return(StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Experts\\")));
}

bool RunMe( const datetime FromDate, const bool AllSymbols = false )
{
  const string Str = "[Tester]" +
                     "\nExpert=" + GetMyName() +
                     "\nSymbol=" + _Symbol +
                     "\nOptimization=" + (AllSymbols ? "3" : "0") +
                     "\nModel=4" +
                     "\nFromDate=" + TimeToString(FromDate, TIME_DATE) +
                     "\nToDate=" + TimeToString(TimeCurrent(), TIME_DATE) +
                     "\nForwardMode=0" +
                     "\nProfitInPips=1" +
                     "\nOptimizationCriterion=0" +
                     "\nVisual=0";
                     
  return(MTTESTER::SetSettings2(Str) && MTTESTER::ClickStart());
}

int OnInit()
{
  bool Res = !MQLInfoInteger(MQL_TESTER) && EventSetTimer(1);

  if (Res = Res && MTTESTER::GetSettings(PrevTesterSettings))
    if (!(Res = RunMe(inFromDate, inAllSymbols)))
      MTTESTER::SetSettings2(PrevTesterSettings);

  return(Res ? INIT_SUCCEEDED : INIT_FAILED);
}

void OnTimer()
{
  if (MTTESTER::IsReady())
  {
    MTTESTER::SetSettings2(PrevTesterSettings);
    
    if (inAllSymbols)
      MTTESTER::CloseNotChart();

    ExpertRemove();
  }
}


그런 다음 터미널에서 틱과 함께 작동하는 스크립트를 실행할 수 있으며 생명의 징후없이 많은 시간을 기다리지 않아도됩니다.

 
Stanislav Korotky:

테스터 통과 설정의 텍스트 형식(기호, 시간 프레임 및 각 줄에서 TesterSettings . Add에 전달할 수 있는 기타 항목 등)을 지원하여 TesterSettings. Add 호출을 위한 자체 MQL5 컨트롤러를 작성할 필요를 없앨 수 있습니다. 그런 다음 단일 매개 변수(설정이 있는 파일)를 입력으로 받고 이를 기반으로 SetTesterSettings를 구현하는 범용 Expert Advisor 컨트롤러(라이브러리에 추가)를 만들면 사용자는 아무것도 프로그래밍할 필요가 없습니다.

결국 저는 이렇게 했습니다. 우리는 ini-파일에서 작업 배치를 형성하고 실행을 위해 전송합니다.

그러나 이전 작업의 결과를 기반으로 작업을 형성해야하는 작업이 종종 있습니다. 따라서 INI 변형이 항상 적합한 것은 아닙니다.


ZY 구현은 여기에 있습니다.

 
테스터 자동화를 연습하는 경우 다음 설정을 살펴보는 것이 좋습니다.
MQL5\Profiles\Tester\Groups\*.txt
MQL5\Profiles\Tester\Symbols\*.txt
 
fxsaber:

틱 기록을 다운로드하는 가장 편리한 방법( 터미널에서 EA 실행).

그런 다음 터미널에서 틱으로 작동하는 스크립트를 실행할 수 있으며 생명의 흔적없이 많은 시간을 기다리지 않아도됩니다.

이는 실제 심볼의 틱 기록에서 사용자 지정 심볼을 만드는 데 유용합니다. 사용자 지정 심볼은 틱과 막대가 완전히 일치한다는 점에서 원래 심볼과 다릅니다. 따라서 테스터의 잘못된 결과(예시) 가 나오지 않습니다.

 
안타깝게도 테스터에서 틱 기록을 다운로드하더라도 터미널에서 몇 년 전의 틱 데이터에 액세스하는 것은 여전히 허용되지 않습니다. 먼저 테스터에서 틱을 파일로 언로드한 다음 터미널을 통해 사용자 지정 심볼에 로드해야 합니다. 다음은 테스터에서 먼저 실제 틱 모드로 실행하여 수집한 다음 터미널에서 사용자 지정 심볼로 로드해야 하는 Expert Advisor의 예입니다.
파일:
 
Evgenii Kuznetsov:
안타깝게도 테스터에서 틱 기록을 다운로드하더라도 터미널에서 몇 년 전의 틱 데이터에 액세스하는 것은 여전히 허용되지 않습니다. 먼저 테스터에서 틱을 파일로 언로드한 다음 터미널을 통해 사용자 지정 심볼에 로드해야 합니다. 다음은 실제 틱 모드에서 테스터에서 먼저 실행하여 수집한 다음 터미널에서 사용자 지정 심볼에 로드해야 하는 Expert Advisor의 예입니다.

터미널에서 Expert Advisor를 실행하여 계획을 구현할 수 있으며, 여기서 MTTester.mqh가 사용됩니다.


저는 수년 동안 틱에서 사용자 지정 기호를 만드는 작업에 직면하지 않았습니다. 1 년 동안 - 문제없이 터미널이 틱을 가져갔습니다. 아마도 당신은 부분적으로 요청하지 않고 큰 간격을 요청할 때 메모리 부족에 주저 할 것입니다.

 
메모리가 부족한 경우 CopyTicksRange는 -1을 반환하고 그에 따라 GetLastError()를 통해 오류를 확인할 수 있지만 제 경우에는 그냥 0을 반환했습니다. 요청은 한 달 간격으로 이루어졌습니다.
 
Evgenii Kuznetsov:
메모리가 부족한 경우 CopyTicksRange는 -1을 반환하고 그에 따라 GetLastError()를 통해 오류를 확인할 수 있지만 제 경우에는 그냥 0을 반환했습니다. 요청은 한 달 간격으로 이루어졌습니다.

재생산할 데이터가 있으면 개발자가 데이터를 보고 수정할 수 있을 것입니다.

 

2013년부터 테스터에서 실제 틱 모드에서 Expert Advisor를 실행하기만 하면 됩니다.

그런 다음 터미널에서 스크립트를 실행하세요:

void OnStart(){
   MqlTick Ticks[];
   Print("!!! ",CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, (ulong)D'2013.01.01' * 1000, (ulong)D'2013.02.01' * 1000));
}
 
Evgenii Kuznetsov:

예, 2013년부터 테스터에서 실제 틱 모드로 EA를 실행하면 됩니다.

그런 다음 터미널에서 스크립트를 실행하세요:

2020.02.12 16:35:03.435 Test6 (USDSEK,M1)       !!! 2370228