FX自動売買基礎と応用

MQLプログラミング言語のOnTimer関数を利用するための準備


OnTimer関数を利用するための準備


この記事では、Timer関数について説明していきます。Timer関数を利用すると、ティックの動きに関係なく、一定時間毎に処理を実行することが可能です。

まずメタエディターを開き「新規作成ボタン」をクリックします。すると「MQL4ウィザード」が立ち上がるので、「カスタムインディケータ」にチェックを入れて「次へ」を押します。今回はTimer関数を定義するのでファイル名を「TimerTest」とし、「カスタムインディケータのイベントハンドラ」では「OnTimer」を選択します。「カスタムインディケータの描画プロパティ」では何もせず、そのまま「完了」をクリックしましょう。

「カスタムインディケータのイベントハンドラ」画面

作成したひな形を確認すると、既にOnTimer関数が記述されていますが、これを機能させるにはOnInit関数内で「EventSetTimer」または「EventSetMillisecondTimer」を宣言する必要があります。今回はEventSetMillisecondTimerを使います。

EventSetMillisecondTimerは、カッコ内に指定した数字の秒数に従って計算が繰り返される関数です。単位はミリ秒で、「1000」と入力すると1秒間隔を表します。ここでは「100」とし、0.1秒間隔で処理を実行するように指定します。


EventSetMillisecondTimer(100);

なお、この関数を利用するときの決まりとして、OnDeinit関数内でタイマーを消す処理もセットで定義する必要があります。タイマーを消す関数として、「EventKillTimer」を宣言します。


void OnDeinit(const int reason)
{
   EventKillTimer();
}

これでOnTimer関数の準備が整いました。


Comment関数で簡易時計を作成


それでは、テストとしてComment関数を用いてチャートに時間を表示させてみましょう。Comment関数は、カッコ内に指定した数字をチャートの左上に小さく表示することができます。今回はPCの現在の時間を示す「TimeLocal」をセットします。


Comment(TimeLocal());

これでコンパイルすれば、チャート左上に現在の時間が表示されるようになります。

チャート左上に現在の時間が表示

単純に時間を表示させるだけでなく、さまざまなアレンジを加えることが可能です。例えば、現在時間の下にサーバー時間を併せて表示し、両者の時間差をその下に出してみましょう。サーバー時間を表示する関数は「TimeCurrent」です。単位は秒なので、時間単位に変換するために日本時間からサーバー時間を引いたものを3600で割ります。


Comment(TimeLocal(),"¥n",TimeCurrent(),"¥n",int(TimeLocal() - TimeCurrent()) / 3600);

これでコンパイルすると、チャート左上にPCの現在時間、サーバー時間、両者の時差の三つが表示されます。


ローソク足確定までの残り時間を表示


続いて、ローソク足が確定するまでの残り時間を表示してみましょう。

残り時間を表示するのに必要となるのは足1本あたりの時間で、「PeriodSeconds」を使います。PeriodSecondsは、表示しているチャートのローソク足1本あたりが何秒かを数値で示します。例えば1分足なら、60という数値を返してくれます。


int countDown = PeriodSeconds() - (int)TimeLocal() % PeriodSeconds();

上記の「TimeLocal() % PeriodSeconds()」は、TimeLocalをPeriodSecondsで割った余りという計算式になります。60から今の秒数を引くことで、残り時間が表示されるというわけです。また、TimeLocalの前にある「(int)」は時間の型を整数型に変換するためのもので、これを追加することにより小さなエラー(型変換によるデータ損失の可能性)が出なくなります。


Labelオブジェクトを使って表示する方法


ここではコメントではなく、Labelオブジェクトを使って表示する方法を紹介します。Labelオブジェクトは、MT4画面のメニューの「挿入」→「テキストラベル」で表示できるオブジェクトです。

使用するのは「LabelCreate」関数で、例によってMQL4リファレンスからサンプルコードをコピーして利用します。MQL4リファレンスの目次にある「Constants, Enumerations and Structures」→「Object Constants」→「Object Types」→「OBJ_LABEL」を開き、ここからLabelCreate関数をコピーして、ファイル内の任意の箇所に貼り付けましょう。

LabelCreate関数

そしてOnTimer関数の中で、このLabelCreate関数を呼び出します。カッコ内のパラメーターは、ここでは次のように指定します。


LabelCreate(0, "Clock", 0, 100, 100, CORNER_LEFT_UPPER, (string)countDown, "Arial Bold", 30, clrWhite);

まずチャートの番号は、現在表示しているチャートを指定するので「0」にします。名前は「Clock」としていますが、任意のもので構いません。サブウィンドウの指定は、メインウィンドウに表示するので「0」とします。

表示位置に関して、ここではX座標とY座標を共に「100」、コーナー基準位置を「左上」とします。表示する文字は「countDown」という残り時間を計算する変数を文字列に変換したもので指定します。フォントは「Arial」を選び、太字にするよう「Bold」を指定。サイズは「30」、カラーは「白」としています。これでコンパイルすると、指定した通りに数字が表示されます。

指定した通りに数字が表示

上記で解説した方法の場合、数字はカウントダウンの動きをしません。以下のコンテンツで、LabelCreate関数を使い数字をカウントダウンさせる方法を詳しく解説します。

LabelCreate関数を使い数字をカウントダウンさせる方法


本記事の監修者・HT FX


2013年にFXを開始し、その後専業トレーダーへ。2014年からMT4/MT5のカスタムインジケーターの開発に取り組む。ブログでは100本を超えるインジケーターを無料公開。投資スタイルは自作の秒足インジケーターを利用したスキャルピング。


本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。



この記事をシェアする

ホーム » FX自動売買基礎と応用 » MQLプログラミング言語のOnTimer関数を利用するための準備