
GetTickCount関数の働き・役割
【広告↓】

GetTickCount関数は、システムが起動してからの経過時間をミリ秒単位(1/1000秒)で返す関数です。
GetTickCount関数はシステムのパフォーマンス計測やタイミングの取得に有用で、プログラムがどれくらいの時間を要したかを計測するのによく使用されます。
GetTickCount関数の引数について

GetTickCount関数は引数を取らないため、特に指定する必要はありません。
GetTickCount関数の戻り値について

戻り値はuint型で、システムが起動してからの経過時間をミリ秒単位で表します。
GetTickCount関数を使う際の注意点

GetTickCount関数は、システムタイマーの精度に依存するため、最も正確な時間を保証するものではないことに注意が必要です。
また、戻り値は符号なし整数(=uint型)であるため、最大値に制限があり、この最大値に達すると0に戻ります。
49.7日はその最大値に達する時間で、この時間が経過するとカウンターはリセットされ、再び0からカウントを開始します。
この現象をオーバーフローと言い、このため49.7日を超える時間測定にはGetTickCount関数は使用できません。
短期間の測定には有用ですが、長期間正確な時間を測定する場合は、別の方法を検討する必要があります。
GetTickCount関数を使ったサンプルコード

以下のサンプルコードは、40個のフィボナッチ数を計算するのにかかる時間をミリ秒単位で計測しています。
#define MAX_SIZE 40 // 定数MAX_SIZEを定義し、計算するフィボナッチ数列の数を40とする
// 40フィボナッチ数の計算時間を測定するスクリプト
void OnStart() {
uint start = GetTickCount(); // GetTickCount関数を使用して、計算開始の現在時刻をミリ秒で取得
long fib = 0; // フィボナッチ数を格納するための変数を宣言し、0で初期化
// フィボナッチ数列を計算するループ処理
for (int i = 0; i < MAX_SIZE; i++) {
fib = TestFibo(i); // TestFibo関数を呼び出して、i番目のフィボナッチ数を計算し、変数fibに格納
}
uint time = GetTickCount() - start; // 終了時間の現在時刻を取得し、開始時刻からの差分(経過時間)を計算
// 計測した経過時間をエキスパート操作ログに出力
PrintFormat("Calculating %d first Fibonacci numbers took %d ms", MAX_SIZE, time);
}
// フィボナッチ数をシリアル番号で取得する関数
long TestFibo(long n) {
if (n < 2) return (1); // 引数nが2未満の場合は1を返す(フィボナッチ数列の最初の二項は1)
// 再帰を用いてフィボナッチ数を計算
return (TestFibo(n - 2) + TestFibo(n - 1)); // n番目のフィボナッチ数は(n-2)番目と(n-1)番目のフィボナッチ数の和
}
サンプルコードの文法要素解説:
※define命令についての詳細は↓の記事をご参照ください
- void
()
: OnStart関数はMQL5でスクリプトが開始されたときに呼ばれる特別な関数(=イベントハンドラー)です。ここにメインの処理を記述します。 - uint: 符号なし整数型で、0以上の整数値のみを格納できるデータ型です。
- long: 長整数型で、より大きな整数値を格納できるデータ型です。
- forループ: 繰り返し処理を行うために使われます。
i = 0
から始めてi < MAX_SIZE
の間、i
を1ずつ増やしながらループします。
※for文についての詳細は↓の記事をご参照ください
PrintFormat
: フォーマット指定された形式でデータを出力する関数です。ここでは経過時間を表示しています。TestFibo
: フィボナッチ数を計算するためのオリジナルな再帰関数です。再帰関数とは、関数が自分自身を呼び出すことを指します。この場合、フィボナッチ数列の定義に従って計算を行っています。
<参照>
TimeToString関数/UNIXタイム/タイムスタンプdatetime型/iTime関数/StringToTime関数/ENUM_TIMEFRAMES/TimeToStruct関数/TimeCurrent関数/TimeLocal関数

————————————————————————————–
※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる
をメインコンテンツとして展開しています。
第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。
【広告↓】