ライブラリ: マルチテスター - ページ 50

 

私の投稿は間違ったスレッドに作成されました:

取引、自動取引システム、取引戦略のテストに関するフォーラム

MetaTrader 5ビルド5200の新バージョン:OpenBLAS拡張とMQL5でのコントロールの向上

Stanislav Korotky, 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になるはずだ。どこが間違っていますか?

あるいは、tkcフォーマットの説明のリンクを教えてください。

 
Stanislav Korotky #:

いや、私が見る限り、ファイルヘッダは31日分の配列を予約している。

ヘッダーに関する情報は何も持っていない。カスタム・キャラクタをやっていて、どのバイトが変更されているかを見ていた。ヘッダーの特定のバイトが何を担当しているかは、その行動から初めてわかったんだ。

だから、コードでは12*31になるはずだ。どこが間違っているのでしょうか?

もしくは、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/ja/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はコンパイルされていません。

最新版はライブラリのロシア語 ページにのみあります。