EventSetTimer関数の働き・役割
EventSetTimer関数は、特定の秒数ごとにタイマーイベントを生成するようMetaTrader5クライアント端末に指示します。
タイマーイベントとは?
タイマーイベントとは、プログラムが定期的に特定の時間間隔で動作を行うために発生するイベントのことです。
タイマーイベントを利用することで、エキスパートアドバイザーやインジケータなどのMQL5プログラムが、予定された時間ごとに自動的に特定のコードを実行できるようになります。
例えば、毎秒または数ミリ秒ごとに市場データを分析する処理を行うことができます。
EventSetTimer関数は、エキスパートアドバイザーやインジケータが定期的に特定の動作を行うために使用される関数であり、イベントハンドラーであるOnTimer関数を利用する際に必ず用いられるものとなります。
EventSetTimer関数の引数について
EventSetTimer関数は単一の引数を取ります。この引数はタイマーイベントが発生する頻度を秒単位で指定します。従ってデータ型はint型です。
EventSetTimer関数の戻り値について
EventSetTimer関数は成功した場合にtrue
を、失敗した場合にはfalse
を返します。
エラーが発生した場合、GetLastError関数を使用してエラーコードを取得できます。
※GetLastError関数についての詳細は↓の記事をご参照ください
EventSetTimer関数を使う際の注意点
EventSetTimer関数は通常、OnInit関数またはクラスのコンストラクタ内で呼び出されます。
EventSetTimer関数が通常、OnInit関数またはクラスのコンストラクタ内で呼び出される理由
EventSetTimer関数が通常、OnInit関数またはクラスのコンストラクタ内で呼び出される理由は、これらの部分がプログラムの初期化段階で実行されるためです。
OnInit関数はエキスパートアドバイザーやカスタムインジケ-タがチャートに読み込まれたとき、またはMT5が起動する時に自動的に呼び出されます。
OnInit関数内でEventSetTimer関数を呼び出すことで、必要なタイマーがプログラムの生存期間全体で活動することが保証されます。
タイマーを設定することは、定期的な操作や監視を自動化する基本的なステップであり、これを最初に設定することはプログラムの構造上、理にかなっているという訳です。
※OnInit関数についての詳細は↓の記事をご参照ください
また、クラスのコンストラクタはインスタンスが生成される時に自動的に実行されるため、タイマーを設定することが適切です。これにより、そのインスタンスが活動を開始すると同時に必要なタイマーも設定されます。
※コンストラクタについての詳細は↓の記事をご参照ください
※インスタンスについての詳細は↓の記事をご参照ください
記事冒頭にも書きましたが、タイマーイベントを処理するためには、イベントハンドラーであるOnTimer関数が必要です。
※OnTimer関数についての詳細は↓の記事をご参照ください
また、各プログラムは一つのタイマーのみを持つことができ、そのタイマーはプログラムが終了する際に、明示的に停止させなければ強制的に破棄されます。
※ここでいう「タイマー」とは、特定の時間間隔ごとにイベントを発生させるために設定される機能の事を指します。
※タイマーの明示的な破棄を行うにあたってはEventKillTimer関数を用います。
EventKillTimer関数についての詳細は↓の記事をご参照ください
EventSetTimer関数を使ったサンプルコード
// OnInit関数でタイマーを1分間隔で設定します
int OnInit() {
Comment(""); // コメントをクリア
EventSetTimer(60); // 60秒ごとにタイマーイベントを生成
return(INIT_SUCCEEDED);
}
// OnTimer関数でタイマーイベントが発生するたびに呼ばれます
void OnTimer() {
datetime serverTime = TimeCurrent(); // サーバーの現在時刻を取得
// サーバー時刻をコンソールに出力
Print("サーバーの現在時刻: ", TimeToString(serverTime, TIME_DATE|TIME_MINUTES));
}
// ファイルがチャートから削除される時に実行される関数
void OnDeinit(const int reason) {
EventKillTimer(); // タイマーを停止します
// チャートから削除されたことをユーザーに通知
if (reason == REASON_REMOVE) {
Comment("このエキスパートアドバイザーはチャートから削除されました。");
}
}
上記のサンプルコードでは、OnInit関数でタイマーを設定し、OnTimer関数で現在のサーバー時刻を計算し表示する方法を示しています。この例では60秒ごとにタイマーイベントが発生します。
サンプルコードに使われた関数や文法要素の解説
- OnInit関数: エキスパートアドバイザーが初期化されるときに呼び出される関数です。
- EventSetTimer関数:今回解説した、 指定された秒数ごとにタイマーイベントを生成するよう設定する関数です
- OnTimer
関数
: タイマーイベントが発生するたびに自動的に呼び出されるイベントハンドラーです。 - TimeCurrent関数: サーバーの最後に知られている時刻を取得します。
※TimeCurrent関数についての詳細は↓の記事をご参照ください
- TimeToString関数: dateTime型の時刻を文字列に変換します(タイプキャスト)
※TimeToString関数についての詳細は↓の記事をご参照ください
- OnDeinit関数:エキスパートアドバイザーやインジケータがチャートから削除されるとき、またはMetaTrader5が閉じるときに呼び出されます。
※OnDeinit関数についての詳細は↓の記事をご参照ください
・EventKillTimer関数:タイマーイベントを停止する関数です。
・Comment関数:チャートの左上にテキストを表示するために使用します。この例では、エキスパートアドバイザーがチャートから削除されたときにメッセージを表示しています。
※Comment関数についての詳細は↓の記事をご参照ください
<参照>
EventSetMillisecondTimer関数/OnTimer関数/GetLastError関数/OnInit関数/コンストラクタ/EventKillTimer関数/TimeCurrent関数/OnDeinit関数
※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる
をメインコンテンツとして展開しています。