【MQL4テクニック】GetTickCount関数は使わないほうがいい!理由と代替案を詳しく解説します。
GetTickCount()
関数は50日程度でオーバーフローを起こしてしまうため積極的に使用すべきではありません。
どういうことか、以下で詳しく解説します。
GetTickCount関数とは?
GetTickCount()
関数はシステム開始からの経過時間をミリ秒単位で返す関数です。
つまりOS起動時を0msとして、それからの経過時間を返します。
書式は以下の通りです。
uint GetTickCount();
なぜ使わないほうがいいのか
実は、GetTickCount()
関数は型が4バイトのuint型のため、サイズがあまり大きくないです。
ですので、システム開始から約49.7日が経過すると「オーバーフロー」が発生してしまい、カウントが0からに戻ってしまいます。
MT4のEAなどは、性質上長い期間起動し続けていることも多いでしょう。
もし何の対策もせずにGetTickCount()
関数を利用していると思わぬバグが発生してしまう可能性があります。
ですので基本的にはGetTickCount()
関数を使うのはあまりおすすめとは言えません。
オーバーフロー対策にはGetMicrosecondCount関数を使う
GetTickCount()
関数はシステム開始からの経過時間をミリ秒単位で返す関数でした。
対してGetMicrosecondCount()
関数は名前の通りシステム開始からの経過時間を「マイクロ秒単位」で返す関数です。
書式は以下の通りで、型は8バイトのulong型になります。
ulong GetMicrosecondCount();
uint型のGetTickCount()
関数の扱える数が約42億までなのに対し、ulong型のGetMicrosecondCount()
関数が扱える数は42億×42億です。
つまり約42億倍大きい数字を扱えるということです。
ですのでGetMicrosecondCount()
関数を使う場合はオーバーフローが起こることを考えずに使用することが可能です。
仕様上の注意点はマイクロ秒単位であることくらいです。GetTickCount()
関数と同様のミリ秒単位に単位をそろえるためには1,000で割ってあげればいいでしょう。datetime型などと同様の秒単位に合わせたい場合は1,000,000で割る必要があります。