チャート上にトレード情報を表示するインジケーターを作っていきます。

コピペしてそのままコンパイルできる形で紹介します。

この記事で分かること
・Comment・MarketInfoを使った情報表示の作り方
・コンパイルエラーになりやすい箇所と直し方
・インジケーター全体のソースコード

このインジケーターで表示する3つの情報

以下の3つの情報をチャートウインドウに表示するインジケーターを作っていきます。

  • 通貨ペア
  • 売値BID
  • 買値ASK

trade-infoインジケーターを作る準備

実際にコードを書く前に、MetaEditorでインジケーターのひな形を用意します。

メタエディタを開く

メタエディタ(MetaEditor)を立ち上げましょう。操作は以下に記載しています。

【MQL】カスタムインジケーターを作成の流れについてわかりやすく説明してみた
カスタムインジケーターの作成の流れカスタムインジケーターの作成の流れを説明していきます。メタエディターを起動するMetaEditor(メタエディタ)をMT4から起動させる方法は以下の通りです。 ツール→メタエディタ フォルダのアイコンでメタ…

今回は名前を「trade-info」で作成します。

OnDeinit・OnTick関数のコードを書く

ひな形ができたら、

Comment・MarketInfoを使った実際のコードを書いていきます。

OnDeinit()関数の記述する

OnDeinit()関数の記述しましょう。

今回はCommentを活用するので削除する際もCommentを活用します。

Comment("");//チャート削除後

OnTick()関数を記述する

OnTick()関数を記述していきます。

基本的に

  • Comment
  • MarketInfo

の2つを活用すればすぐにできてしまいます。

MarketInfoで通貨ペアを取得しましょう。

通貨ペアはint型ではないので、(int)を使い、無理やりint型に変更しています。

これは、Chart_digitもint型なので同じ箱にしかいれることができないからです。

MODE_DIGITSとは有効桁数を取得します。

レートの少数点が4桁なら4、小数点が5桁なら5などです。

int Chart_digit = (int)MarketInfo(Symbol(), MODE_DIGITS);

Commentで通貨ペアにはSymbol()を表示させます。\n”は改行を意味しています。

通貨ペア=", Symbol(), "\n"

NormalizeDoubleというのは、

指定された精度で丸められた浮動小数点数を返しています。

MarketInfoで通貨ペアのBidとAskを取得しています。

売値(BID)=", NormalizeDouble(MarketInfo(Symbol(), MODE_BID), Chart_digit), "\n",
買値(ASK)=", NormalizeDouble(MarketInfo(Symbol(), MODE_ASK), Chart_digit), "\n",

これでOnTick()関数の記述は完了です。

   int Chart_digit = (int)MarketInfo(Symbol(), MODE_DIGITS);//通貨のペアの小数点取得
Comment("------ チャート上の通貨ペアの情報 -----------------------------------------", "\n",
          "│ 通貨ペア=", Symbol(), "\n",//通貨ペアを表示
          "│ 売値(BID)=", NormalizeDouble(MarketInfo(Symbol(), MODE_BID), Chart_digit), "\n",//Bidを表示
          "│ 買値(ASK)=", NormalizeDouble(MarketInfo(Symbol(), MODE_ASK), Chart_digit), "\n",//Askを表示
          "-----------------------------------------------------------------------------------", "\n"
         );

コピペしてコンパイルが通らないときに確認すること

もしこの部分でコンパイルエラーが出た場合、

"\n",の後ろに//を付け忘れて、

日本語のコメントがコードの中にそのまま混ざっていないか確認してください。

//が抜けると、コメントのつもりで書いた文字が「未定義の識別子」としてエラーになります。

コンパイルして動作確認する

コードが書けたら、実際にコンパイルして表示を確認します。

コンパイルする

コンパイルしましょう。インジケーターを表示して左上に表示されていたら完了です。

MQL MT4 インジケーター トレード情報

ソースコード全体

trade-infoのソースコード全体は以下に記載しています。

//+------------------------------------------------------------------+
//|                                                   trade-info.mq4 |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.01"
#property strict
#property indicator_chart_window

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
    Comment("");//チャート削除後
  } 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int Chart_digit = (int)MarketInfo(Symbol(), MODE_DIGITS);//通貨のペアの小数点取得
   Comment("------ チャート上の通貨ペアの情報 -----------------------------------------", "\n",
             "│ 通貨ペア=", Symbol(), "\n",//通貨ペアを表示
             "│ 売値(BID)=", NormalizeDouble(MarketInfo(Symbol(), MODE_BID), Chart_digit), "\n",//Bidを表示
             "│ 買値(ASK)=", NormalizeDouble(MarketInfo(Symbol(), MODE_ASK), Chart_digit), "\n",//Askを表示
             "-----------------------------------------------------------------------------------", "\n"
            );
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

あわせて読みたい: 【MQL】前日の高値・安値を表示するインジケーター【初級編】

よくある質問

trade-infoインジケーターについて、よくある疑問に回答します。

用語の整理
・Comment(): チャート左上に文字を表示する関数
・MarketInfo(): シンボルの価格等の情報を取得する関数
・MODE_DIGITS: 通貨ペアの小数点以下の桁数を取得する定数

表示する情報を増やせますか?

はい。MarketInfo()で取得できる他の項目(スプレッド等)を、

同じComment()の中に追加すれば表示項目を増やせます。

表示位置を左上から変更できますか?

Comment()は仕様上チャート左上に固定されます。

表示位置を自由に変えたい場合は、

ObjectCreateのOBJ_LABELを使う設計に変更してください。

【MQL】チャート上にトレード情報を表示するインジケーター【初級編】:まとめ

簡単にトレード情報を表示させることができましたね。

情報を追記して作成したら、

より細かく様々なデータを表示させることができるので試してみてください。

関連記事