マーケット情報を表示させる

 MetaTrade4(MT4)の「チャートウィンドウ」上に、以下のマーケット情報を表示するオブジェクトの作成方法について解説します。

  • Bid値
  • Ask値
  • スプレッド
  • サーバー時間
  • PC時間
Market Information
チャートウィンドウ上にマーケット情報を表示させる

 なお、具体例は、インジケーター(Market Information.mq4)として作成しています。

  1. 全体像
  2. #property命令の記述
  3. オブジェクトの生成
  4. オブジェクトの削除
  5. ティックごとの動作
  6. 関連ツール

1.全体像

 MT4でインジケーターの一部としてメインウィンドウにオブジェクトを描画させるには、以下の手順でプログラムを書いていくことになります。

  1. #property命令を記述する。
  2. init()関数内にオブジェクトを生成するプログラムを記述する。
  3. deinit()関数内にオブジェクトを削除するプログラムを記述する。
  4. start()関数内にティックごとに動作するプログラムを記述する。

 具体的には、以下のようになります。

Download (PDF, 1.02MB)

>>目次に戻る

2.#property命令の記述

 #property命令とは、インジケーターの色、ラインの太さ、インジケーターを表示する場所などの、プログラム全体にかかわる設定を行うものです。

 #property命令の詳細については「こちら」を参照してください。

 「Market Information.mq4」は、メインウィンドウ上にマーケット情報をオブジェクトとして描画させるので、#property命令は、以下のように記述しています。

#property indicator_chart_window

>>目次に戻る

3.オブジェクトの生成

 「Market Information.mq4」では、以下のオブジェクトを生成する必要があります。

  • Bidという文字列を描画させるオブジェクト
  • Bid値」(数値)を描画させるオブジェクト
  • Askという文字列を描画させるオブジェクト
  • Ask値」(数値)を描画させるオブジェクト
  • Spreadという文字列を描画させるオブジェクト
  • スプレッド値」(数値)を描画させるオブジェクト
  • Server Timeという文字列を描画させるオブジェクト
  • サーバー時間」(数値)を描画させるオブジェクト
  • Local Timeという文字列を描画させるオブジェクト
  • PC時間」(数値)を描画させるオブジェクト

 したがって、init()関数内に、以下のようなコードを記述して、それぞれ、ObjectCreate()関数(詳細は「こちら」を参照してください。)によって、ラベルオブジェクトを生成しています。

int init()
{
 //Bid(テキスト)
 ObjectCreate(“Bid_Text”,OBJ_LABEL,0,0,0);
 
 //Bid(値)
 ObjectCreate(“Bid_Value”,OBJ_LABEL,0,0,0);
 
 //Ask(テキスト)
 ObjectCreate(“Ask_Text”,OBJ_LABEL,0,0,0);
 
 //Ask(値)
 ObjectCreate(“Ask_Value”,OBJ_LABEL,0,0,0);
 
 //Spread(テキスト)
 ObjectCreate(“Spread_Text”,OBJ_LABEL,0,0,0);
 
 //Spread(値)
 ObjectCreate(“Spread_Value”,OBJ_LABEL,0,0,0);
 
 //サーバー時間(テキスト)
 ObjectCreate(“Server_Time_Text”,OBJ_LABEL,0,0,0);
 
 //サーバー時間(値)
 ObjectCreate(“Server_Time_Value”,OBJ_LABEL,0,0,0);
 
 //PC時間(テキスト)
 ObjectCreate(“Local_Time_Text”,OBJ_LABEL,0,0,0);
 
 //PC時間(値)
 ObjectCreate(“Local_Time_Value”,OBJ_LABEL,0,0,0);
 
 return(0);
}

>>目次に戻る

4.オブジェクトの削除

 「Market Information.mq4」では、以下のように、init()関数で生成した各オブジェクトに対して、deinit()関数内で、ObjectDelete()関数(詳細は「こちら」を参照してください。)を実行することによって削除するコードを記述しています。

int deinit()
{
 //Bid
 ObjectDelete(“Bid_Text”);
 ObjectDelete(“Bid_Value”);
 
 //Ask
 ObjectDelete(“Ask_Text”);
 ObjectDelete(“Ask_Value”);
 
 //スプレッド
 ObjectDelete(“Spread_Text”);
 ObjectDelete(“Spread_Value”);
 
 //サーバー時間
 ObjectDelete(“Server_Time_Text”);
 ObjectDelete(“Server_Time_Value”);
 
 //PC時間
 ObjectDelete(“Local_Time_Text”);
 ObjectDelete(“Local_Time_Value”);
 
 return(0);
}

 deinit()関数は、プログラムを終了する際に、最後に一度だけ実行される関数です。

 したがって、deinit()関数内に、init()関数で生成したオブジェクトを削除するコードを記述していなければ、チャートに適用したインジケーターを当該チャートから削除しても、生成したオブジェクトが、そのまま当該チャート上に残り続けることになります。

 そこで、チャートに適用したインジケーターを当該チャートから削除した場合に、インジケーターと共にinit()関数で生成したオブジェクトも当該チャート上から削除するために、deinit()関数内に、init()関数で生成したオブジェクトを削除するコードを記述しています。

>>目次に戻る

5.ティックごとの動作

 「Market Information.mq4」におけるstart()関数内に記述したコードについて解説します。

Download (PDF, 833KB)

⑴ Bid(テキスト)の記述

ア 原点を設定する

 「Bid」という文字列を描画させるオブジェクトの位置を設定するために、ObjectSet()関数(詳細は「こちら」を参照してください。)を使用して、基準となる原点をチャートウインドウの右上に設定しています。

イ X軸の位置を設定する

 「Bid」という文字列を描画させるオブジェクトを、ObjectSet()関数(詳細は「こちら」を参照してください。)を使用して、原点からX軸上の130ピクセルの位置にくるように設定しています。

ウ Y軸の位置を設定する

 「Bid」という文字列を描画させるオブジェクトを、ObjectSet()関数(詳細は「こちら」を参照してください。)を使用して、原点からY軸上の10ピクセルの位置にくるように設定しています。

エ 描画されるテキストを設定する

 「ア」~「ウ」で設定した位置に、「Bid」という文字列を描画させるために、ObjectSetText()関数(詳細は「こちら」を参照してください。)を使用して、init()関数で生成したBid_TextというラベルオブジェクトにBidという文字列を描画させるように設定しています。

⑵ Bid(値)の記述

 上述の⑴と同様です。

⑶ Ask(テキスト)の記述

 上述の⑴と同様です。

⑷ Ask(値)の記述

 上述の⑴と同様です。

⑸ スプレッド(テキスト)の記述

 上述の⑴と同様です。

⑹ スプレッド(値)の記述

 上述の⑴と同様です。

⑺ サーバー時間(テキスト)の記述

 上述の⑴と同様です。

⑻ サーバー時間(値)の記述

 上述の⑴と同様です。

⑼ PC時間(テキスト)の記述

 上述の⑴と同様です。

⑽ PC時間(値)の記述

 上述の⑴と同様です。

※1について

 ObjectSetText()関数(詳細は「こちら」を参照してください。)の第二引数は「string」型なので、DoublToStr()関数(詳細は「こちら」を参照してください。)を使用して、実数を文字列に変換しています。

※2について

 MarketInfo()関数(詳細は「こちら」を参照してください。)で取得されるスプレッドの値の単位はPoint(詳細は「こちら」を参照してください。)なので、これをpips単位で描画されるようにするために、MarketInfo()関数で取得される値を「10」で割るようにしています。

 なお、当該処理は提示レートの小数点以下の桁数が桁又は桁の業者のMT4を使用する場合に必要なものなので、提示レートの小数点以下の桁数が「2」桁又は「4」桁の業者のMT4を使用する場合には必要ありません。

※3について

  ObjectSetText()関数(詳細は「こちら」を参照してください。)の第二引数は「string」型なので、TimeToStr()関数(詳細は「こちら」を参照してください。)を使用して、「datetime」型の値を文字列に変換しています。

>>目次に戻る

6.関連ツール

インジケーターつくーる
インジケーターつくーる
インジケーターつくーる | fx-on.com

インジケーターつくーる
インジケーターつくーる | fx-on.com

 上記ツール(インジケーターつくーるインジケーターつくーる | fx-on.com)の詳細については「こちらインジケーターつくーる | fx-on.com」を参照してください。

>>目次に戻る


MT4の使い方からプログラミングまで、わかりやすく解説