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

 

게시물이 잘못된 스레드에 작성되었습니다. 이 스레드에 있어야 합니다:

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

메타트레이더 5 빌드 5200 새 버전: OpenBLAS 확장 및 MQL5의 제어 기능 향상

스타니슬라브 코로트키, 2025.09.05 11:13 AM

왜 31이 아닌 30인가? 헤드 라인은 31일을 위해 설계된 것 같습니다.

uint Buffer[64 + 12 * 30];

그리고 암호화폐라면요?

 
Stanislav Korotky #:

왜 31일이 아니라 30일인가요? 헤드라인은 31일로 되어 있는 것 같습니다.

0에서 30까지의 인덱스는 31입니다.

 
fxsaber #:

0에서 30까지의 인덱스는 31개입니다.

정확히, 0에서 30까지를 포함하여 총 31개입니다.

 
Stanislav Korotky #:

정확히 0에서 30까지, 총 31개입니다.

맞나요?

 
fxsaber #:

제대로 이해하셨나요?

아니요. 파일 헤더에서 제가 볼 수 있는 한 31일 동안의 배열이 예약되어 있으며 이는 논리적으로 맞습니다. 따라서 코드에서는 12*31이 되어야 합니다. 제가 어디가 틀렸나요?

또는 한 달에 (최대) 30일이 있어야 한다고 명시된 tkc 형식 설명에 대한 링크를 제공하세요.

 
Stanislav Korotky #:

아니요. 제가 볼 수 있는 한 파일 헤더는 31일 동안 배열을 예약하고 있습니다.

헤더에 대한 정보가 없습니다. 사용자 정의 문자를 작성하고 어떤 바이트가 변경되는지 살펴보고 있었습니다. 그런 작업을 통해서만 헤더의 특정 바이트가 무엇을 담당하는지 알 수 있었습니다.

따라서 코드에서 12*31이 되어야 합니다. 제가 어디가 틀렸나요?

또는 한 달에 (최대) 30일이 있어야 한다고 명시된 tkc 형식 설명에 대한 링크를 제공하세요.

      uint Buffer[64 + 12 * 30];
      uint Read;

      kernel32::ReadFile(handle, Buffer, sizeof(Buffer), Read, 0);

      if (Read == sizeof(Buffer))
        for (int i = 63; i < (sizeof(Buffer) >> 2); i += 12)
          Res += (int)Buffer[i];

변수 i는 31개의 값을 받습니다.

 
fxsaber #:

헤더에 대한 정보가 없습니다. 사용자 지정 기호를 만들고 어떤 바이트가 변경되는지 관찰했습니다. 이러한 작업을 통해서만 헤더의 특정 바이트가 무엇을 담당하는지 알 수 있었습니다.

변수 i는 31개의 값을 받습니다.

분명히 루프는 63부터 카운트되지만 배열을 설명할 때 헤더에 64가 할당되어 -1부터 시작하는 루프와 동일합니다. 직관적이지는 않지만 수학은 맞습니다.

 
fxsaber #:
비표준 방식으로 달력 월의 틱 수를 구합니다.

기호별로 사용 가능한 과거 틱에 대한 정보를 가져옵니다.

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

string NumToString( ulong Num, const string Delimeter = " " )
{
  string Res = (Num ? NULL : "0");

  while (Num)
  {
    Res = ((Num < 1000) ? (string)(Num % 1000) : ::IntegerToString(Num % 1000, 3, '0')) +
          ((Res == NULL) ? NULL : Delimeter) + Res;

    Num /= 1000;
  }

  return(Res);
}

string TicksDataToString( const string Symb )
{
  datetime From = 0;
  datetime To;
  
  const int Amount = MTTESTER::GetAmountFileTicks(From, To, Symb);
  const string SizeStr = ::DoubleToString((long)Amount * sizeof(MqlTick) / (double)(1 << 20), 3) + " MB";
  
  return(Symb + ": " + NumToString(Amount) +" ticks (MqlTick[] = " + SizeStr + ")" +
         (From ? ", " + ::TimeToString(From) + " - " + ::TimeToString(To) +
                 ", " + GetDiffTime(From, To) // https://www.mql5.com/ru/forum/170952/page308#comment_57872629
               : NULL));  
}

void OnStart()
{
  const int Size = SymbolsTotal(true);
  
  for (int i = 0; i < Size; i++)
    Print(IntegerToString(i + 1, 3, '0') + "/" + IntegerToString(Size, 3, '0') +
          ". " + TicksDataToString(SymbolName(i, true)));
}


결과.

001/045. EURUSD: 473 689 648 ticks (MqlTick[] = 27104.739 MB), 2011.12.01 00:00 - 2025.09.01 00:00, 13 Years 9 Months
002/045. GBPUSD: 508 981 458 ticks (MqlTick[] = 29124.153 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
003/045. USDCAD: 402 756 151 ticks (MqlTick[] = 23045.892 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
004/045. USDCHF: 353 129 808 ticks (MqlTick[] = 20206.250 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
005/045. USDJPY: 482 177 651 ticks (MqlTick[] = 27590.427 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
006/045. AUDCAD: 446 882 461 ticks (MqlTick[] = 25570.820 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months
007/045. AUDCHF: 387 336 224 ticks (MqlTick[] = 22163.557 MB), 2011.12.01 00:00 - 2025.01.01 00:00, 13 Years 1 Months


오류 4004의 원인을 확인할 수 있습니다.

 
MTTester.mqh가 컴파일되지 않습니다. 최근 MT5 빌드에서 갑자기 컴파일되지 않는 항목이 꽤 많기 때문인 것 같습니다. 혹시 해당 라이브러리의 업데이트된 버전을 제공해 주실 수 있나요? 정말 멋진 라이브러리인 것 같습니다.
 
Goesta Torsten Hulden #:
MTTester.mqh가 컴파일되지 않았습니다.

라이브러리의 러시아어 페이지에서만 최신 버전이 제공됩니다.