チャート上にトレード情報を表示するインジケーターを作っていきます。
コピペしてそのままコンパイルできる形で紹介します。
・Comment・MarketInfoを使った情報表示の作り方
・コンパイルエラーになりやすい箇所と直し方
・インジケーター全体のソースコード
このインジケーターで表示する3つの情報
以下の3つの情報をチャートウインドウに表示するインジケーターを作っていきます。
- 通貨ペア
- 売値BID
- 買値ASK
trade-infoインジケーターを作る準備
実際にコードを書く前に、MetaEditorでインジケーターのひな形を用意します。
メタエディタを開く
メタエディタ(MetaEditor)を立ち上げましょう。操作は以下に記載しています。

今回は名前を「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",の後ろに//を付け忘れて、
日本語のコメントがコードの中にそのまま混ざっていないか確認してください。
//が抜けると、コメントのつもりで書いた文字が「未定義の識別子」としてエラーになります。
コンパイルして動作確認する
コードが書けたら、実際にコンパイルして表示を確認します。
コンパイルする
コンパイルしましょう。インジケーターを表示して左上に表示されていたら完了です。

ソースコード全体
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】チャート上にトレード情報を表示するインジケーター【初級編】:まとめ
簡単にトレード情報を表示させることができましたね。
情報を追記して作成したら、
より細かく様々なデータを表示させることができるので試してみてください。
コメント