【MQL5】GetMicrosecondCount関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

GetMicrosecondCount関数の働き・役割

GetMicrosecondCount関数は、MQL5プログラムの開始から経過したマイクロ秒数を返します。
これは高精度の時間計測に利用でき、エキスパートアドバイザースクリプトのパフォーマンス測定に役立ちます。

マイクロ秒とは何か?

マイクロ秒は、1秒の100万分の1に相当する時間単位です。

1マイクロ秒 = 0.000001秒、1秒 = 1,000,000マイクロ秒となります。

身近な例としては、カメラのシャッタースピードで1/1000秒よりも速い速度を表す際にマイクロ秒が使われることがあります。

非常に短い時間を測定するために使用され、精度が高い時間計測を必要とする場合に役立ちます。

MQL5プログラムの開始から経過したマイクロ秒数とは何か?

MQL5プログラムが開始されてから経過したマイクロ秒数は、プログラムが起動してから現在までの時間をマイクロ秒単位で計測したものです。

これは、例えばスクリプトをMT5のチャートに挿入してから経過した時間を意味します。これにより、プログラムの実行時間や特定の操作にかかる時間を高精度で測定することができます。

GetMicrosecondCount関数の引数

GetMicrosecondCount関数引数を取りません。

ulong GetMicrosecondCount();

GetMicrosecondCount関数の戻り値

GetMicrosecondCount関数は、MQL5プログラムが開始されてから経過したマイクロ秒数を示す ulong型の値を返します。 ulongはマイナスの値を持たない64ビットの整数型で、非常に大きな数値範囲を扱うことができます。

GetMicrosecondCount関数を使ったサンプルコード

以下のコードは、GetMicrosecondCount関数を使用して、指定されたループの実行時間を計測する例です。

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart() 
{
    // 文字列を定義します
    string s;
    
    // StringReserveを使用しない場合の動作速度をチェックします
    ulong t0 = GetMicrosecondCount();
    for (int i = 0; i < 1024; i++) 
    {
        s += " " + (string)i;
    }
    ulong msc_no_reserve = GetMicrosecondCount() - t0;
    s = NULL; // 文字列をリセットします
    
    // StringReserveを使用する場合の動作速度をチェックします
    StringReserve(s, 1024 * 3);
    t0 = GetMicrosecondCount();
    for (int i = 0; i < 1024; i++) 
    {
        s += " " + (string)i;
    }
    ulong msc_reserve = GetMicrosecondCount() - t0;
    
    // 結果をエキスパートログに表示します
    Print("StringReserveを使用した場合のテスト時間: " + (string)msc_reserve + " マイクロ秒");
    Print("StringReserveを使用しない場合のテスト時間: " + (string)msc_no_reserve + " マイクロ秒");
    
    /*
    結果:
    StringReserveを使用した場合のテスト時間: 50 マイクロ秒
    StringReserveを使用しない場合のテスト時間: 121 マイクロ秒
    */
}

なぜループ範囲を1024にしているのか?

このサンプルコードでは、ループ範囲を1024に設定しています。これは、パフォーマンステストのために十分な回数の文字列操作を行うためです。

  • パフォーマンス評価: 1024回の操作は、メモリ割り当てと再割り当ての影響を観察するのに適した数です。少なすぎると、メモリ割り当ての影響が不明瞭になる可能性があり、多すぎると処理時間が長くなりすぎます。
  • 適切な負荷: 適度な回数のループを設定することで、プログラムの負荷を評価しやすくなります。これにより、StringReserve関数を使用した場合と使用しない場合のパフォーマンスの違いを明確に示すことができます。
  • 2の累乗: 1024は2の累乗(2の10乗)であるため、コンピュータのメモリ管理において効率的に扱われます。2の累乗の値は、メモリ割り当てやバッファ管理において最適化されやすい特徴があります。

キャスト(型変換)について

キャストとは、あるデータ型の値を別のデータ型に変換することを指します。このサンプルコードでは、整数型の変数iを文字列型に変換するためにキャストを使用しています。

s += " " + (string)i;

この部分のコードでは、以下の操作が行われています:

  1. i は整数型の変数です。これを string型キャスト型変換)することで、整数を文字列に変換しています。
  2. 変換後の文字列" "(スペース)を結合し、文字列 s に追加しています。

キャストを使用することで、異なるデータ型の値を適切に操作・結合することができます。

キャストの利点

  • 異なるデータ型の変換: 異なるデータ型変数を変換して操作する際に便利です。
  • 型安全性の確保: 必要な型に変換することで、型エラーを防ぎ、安全にデータを操作できます。

キャストの詳細は↓の記事をご参照ください。

その他サンプルコードに使われた関数や文法要素の簡単な解説

OnStart関数: スクリプトが実行されるときに自動的に呼び出されます。

StringReserve関数: 指定されたサイズのバッファ文字列のために確保します。これにより、文字列操作のパフォーマンスを向上させることができます。

Print関数: 指定された文字列をエキスパートログに出力します。デバッグや情報の確認に使用されます。

GetMicrosecondCount関数: 現在のマイクロ秒(=100万分の1秒。1マイクロ秒 = 0.000001秒、1秒 = 1,000,000マイクロ秒)カウントを取得します。これにより、処理時間の計測が可能です。

ulong: 符号なし64ビット整数型です(マイナスの値を持たない整数で、0から18446744073709551615までの範囲の値を持つデータ型)。大きな数値を扱う際に使用されます。

+=: 複合代入演算子。左辺の変数に右辺の値を加え、その結果を左辺の変数代入します。複合代入演算子を使用することで、コードを簡潔に記述できます。

複合代入演算子については下記の記事リンクをご参照ください。

<参照>

StringAdd関数/StringBufferLen関数/StringCompare関数/StringLen関数/StringConcatenate関数/StringFill関数/StringInit関数/StringFind関数/StringGetCharacter関数/StringSetLength関数/StringReplace関数/StringReserve関数

コメント

タイトルとURLをコピーしました