【MQL5】EventSetMillisecondTimer関数について

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

EventSetMillisecondTimer関数の役割・働き

EventSetMillisecondTimer関数EventSetTimer関数と同様に、特定の間隔ごとにタイマーイベントを生成するようMetaTrader5クライアント端末に指示する関数です。

ただ、EventSetTimer関数が秒単位でタイマーイベントの指定をするのに対し、EventSetMillisecondTimer関数はミリ秒、すなわち1/1000秒単位(=0.001秒)でタイマーイベントの指定をします。

したがって、より高速でタイマーイベントを処理する必要があるエキスパートアドバイザーインジケータに適しています。

EventSetTimer関数についての詳細は↓の記事をご参照ください

EventSetMillisecondTimer関数の引数について

EventSetMillisecondTimer関数int型引数を1つ指定します。

bool  EventSetMillisecondTimer(
  int  milliseconds      // ミリ秒数
  );

この引数タイマーイベントの発生頻度をミリ秒単位で指定します。

例えば「100」と記述すると100ミリ秒(0.1秒)間隔でタイマーイベントを発生させるよう指示している事を意味します。

EventSetMillisecondTimer関数の戻り値について

EventSetMillisecondTimer関数は成功した場合にtrueを、失敗した場合にはfalseを返します。

従って戻り値データ型bool型です。

エラーが発生した場合、GetLastError関数を使用してエラーコードを取得できます。

GetLastError関数についての詳細は↓の記事をご参照ください

EventSetMillisecondTimer関数を使う際の注意事項

EventSetMillisecondTimer関数は通常、OnInit関数またはクラスコンストラクタ内で呼び出されます。

EventSetMillisecondTimer関数が通常、OnInit関数またはクラスのコンストラクタ内で呼び出される理由

EventSetMillisecondTimer関数が通常、OnInit関数またはクラスコンストラクタ内で呼び出される理由は、これらの部分がプログラムの初期化段階で実行されるためです。

OnInit関数エキスパートアドバイザーカスタムインジケ-タがチャートに読み込まれたとき、またはMT5が起動する時に自動的に呼び出されます。

OnInit関数内でEventSetMillisecondTimer関数を呼び出すことで、必要なタイマーイベントがプログラムの生存期間全体で活動することが保証されます。

タイマーイベントを設定することは、定期的な操作や監視を自動化する基本的なステップであり、これを最初に設定することはプログラムの構造上、理にかなっているという訳です。

OnInit関数についての詳細は↓の記事をご参照ください

また、クラスコンストラクタインスタンスが生成される時に自動的に実行されるため、タイマーイベントを設定することが適切です。

これにより、そのインスタンスが活動を開始すると同時に必要なタイマーイベントも設定されます。

コンストラクタについての詳細は↓の記事をご参照ください

インスタンスについての詳細は↓の記事をご参照ください

また、タイマーイベントの間隔が非常に短い場合、ハードウェアの限界により実際の間隔が指定した値よりも長くなる可能性があります。

なお、MQL5プログラムでは、一度に一つのタイマーイベントしか実行できません。

つまり、あるプログラムで一つのタイマーイベントが既に動作している場合、別のタイマーイベントを同時に動かすことはできないということです。

MQL5アプリケーションやチャートは、イベントが保管される「イベントキュー」と呼ばれる場所を持っています。これは、イベントが順番に処理される待ち行列のようなものです。

もしタイマーイベントがすでにキューに存在しているか、処理中の場合、新しいタイマーイベントはキューに追加されません。

これは、同じタイプのイベントが重複してキューに入るのを防ぐためです。

簡単に言えば、プログラムがすでに何かを一定の間隔で行うように設定されている場合、その設定を変える前に現在のタイマーイベントを停止する必要がある、ということです。

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

// OnInit関数でタイマーを0.1秒間隔で設定します
int OnInit() {
    Comment("");  // コメントをクリア
    EventSetMillisecondTimer(100);  // 100ミリ秒ごとにタイマーイベントを生成
    
    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("このエキスパートアドバイザーはチャートから削除されました。");
        
    
        
    }
}

上記のは、EventSetMillisecondTimer関数を使用したサンプルコードです。OnInit関数タイマーイベントを設定し、OnTimer関数で現在のサーバー時刻を計算し表示する方法を示しています。この例では0.1秒ごとにタイマーイベントが発生します。

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

TimeCurrent関数についての詳細は↓の記事をご参照ください

TimeToString関数についての詳細は↓の記事をご参照ください

OnDeinit関数についての詳細は↓の記事をご参照ください

EventKillTimer関数タイマーイベントを停止する関数です。

EventKillTimer関数に関する詳細は↓の記事をご参照ください

Comment関数:チャートの左上にテキストを表示するために使用します。この例では、エキスパートアドバイザーがチャートから削除されたときにメッセージを表示しています。

Comment関数についての詳細は↓の記事をご参照ください

<参照>

OnTimer関数/GetLastError関数/OnInit関数/コンストラクタ/EventSetTimer関数EventKillTimer関数/TimeCurrent関数/OnDeinit関数

※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる

<MQL5でEAを作ろう講座>

をメインコンテンツとして展開しています。

【言語基礎編】

【中級実際にEAを作ろう編】

【発展編・MT5用EAを作る工程をカスタマイズしていく】

第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。

コメント

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