自作インジケーターを作るとき、表示場所には大きく分けてメインチャート上とサブウィンドウの2種類があります。
移動平均線や矢印サインのように価格チャート上へ表示するものはメインチャート、MACDやRSIのように別枠で数値の推移を見たいものはサブウィンドウに表示するのが一般的です。
この記事では、MQL4で自作インジケーターをサブウィンドウに表示する方法を、#property indicator_separate_window の使い方とサンプルコードで解説します。
※ インジケーター作成全体の流れやサインツールの作り方は、 MT4インジケーターの作り方 で解説しています。
- メインチャート表示とサブウィンドウ表示の違い
#property indicator_separate_windowの役割- サブウィンドウ表示に必要な基本設定
- MACDクロス検出をサブウィンドウに表示するサンプルコード
- コンパイル後にMT4チャートで確認する流れ
メインチャート表示とサブウィンドウ表示の違い
MT4のインジケーターは、表示する場所によって使い方が少し変わります。
| 表示場所 | 向いているもの | 代表例 |
|---|---|---|
| メインチャート | 価格チャート上に重ねて見たいもの | 移動平均線、矢印サイン、水平線、トレンドライン |
| サブウィンドウ | 価格とは別枠で数値や状態を見たいもの | MACD、RSI、ストキャスティクス、独自スコア表示 |
メインチャートに表示するインジケーターが増えると、ローソク足が見づらくなることがあります。
そのような場合は、サブウィンドウに分けて表示することで、チャートを見やすく整理できます。
サブウィンドウに表示する基本設定
自作インジケーターをサブウィンドウに表示する方法はシンプルです。
インジケーターの冒頭に、以下の指定を追加します。
#property indicator_separate_windowこの1行を指定すると、インジケーターはメインチャートではなく、チャート下部のサブウィンドウ側に表示されます。
逆に、メインチャート上へ表示したい場合は、以下を使います。
#property indicator_chart_window#property indicator_chart_window:メインチャート上に表示#property indicator_separate_window:サブウィンドウに表示
MACDやRSIのように、価格とは別に値の推移を見たいインジケーターでは、サブウィンドウ表示が使いやすいです。
サブウィンドウ表示に必要なバッファ設定
サブウィンドウに値を表示するには、表示用のバッファを用意します。
たとえば、1本のラインやヒストグラムを表示する場合は、以下のようにバッファ数を指定します。
#property indicator_buffers 1
#property indicator_color1 Red そして、配列を作成し、SetIndexBuffer() で表示用バッファとして登録します。
double CrossSignal[];
int OnInit()
{
SetIndexBuffer(0, CrossSignal);
SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2, clrRed);
SetIndexLabel(0, "MACD Cross");
return(INIT_SUCCEEDED);
} これにより、CrossSignal[] に入れた値がサブウィンドウ上に表示されます。
今回のサンプルでは、MACDクロスの状態を以下のように表示します。
- ゴールデンクロス:+1
- デッドクロス:-1
- それ以外:0
実際のサンプルコード MACDクロス検出をサブウィンドウに表示
以下は、MACDのゴールデンクロス・デッドクロスを検出し、サブウィンドウに数値として表示するサンプルコードです。
※ 学習用のサンプルです。実運用向けに使う場合は、確定足判定、リペイント対策、アラート、表示形式の調整などを追加して検証してください。
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_minimum -1.2
#property indicator_maximum 1.2
input int MACD_FAST_PERIOD = 12;
input int MACD_SLOW_PERIOD = 26;
input int MACD_SIGNAL_PERIOD = 9;
input int BarLimit = 1000;
double CrossSignal[];
//+------------------------------------------------------------------+
//| 初期化 |
//+------------------------------------------------------------------+
int OnInit()
{
SetIndexBuffer(0, CrossSignal);
ArraySetAsSeries(CrossSignal, true);
SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2, clrRed);
SetIndexLabel(0, "MACD Cross");
SetLevelValue(0, 0);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| メイン処理 |
//+------------------------------------------------------------------+
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[])
{
if(rates_total < MACD_SLOW_PERIOD + MACD_SIGNAL_PERIOD + 3)
return(0);
int limit = MathMin(rates_total - 2, BarLimit);
for(int i = limit; i >= 1; i--)
{
CrossSignal[i] = 0;
double macd_now = iMACD(NULL, 0,
MACD_FAST_PERIOD,
MACD_SLOW_PERIOD,
MACD_SIGNAL_PERIOD,
PRICE_CLOSE,
MODE_MAIN,
i);
double sig_now = iMACD(NULL, 0,
MACD_FAST_PERIOD,
MACD_SLOW_PERIOD,
MACD_SIGNAL_PERIOD,
PRICE_CLOSE,
MODE_SIGNAL,
i);
double macd_prev = iMACD(NULL, 0,
MACD_FAST_PERIOD,
MACD_SLOW_PERIOD,
MACD_SIGNAL_PERIOD,
PRICE_CLOSE,
MODE_MAIN,
i + 1);
double sig_prev = iMACD(NULL, 0,
MACD_FAST_PERIOD,
MACD_SLOW_PERIOD,
MACD_SIGNAL_PERIOD,
PRICE_CLOSE,
MODE_SIGNAL,
i + 1);
// MACDがシグナルを下から上へ抜けたら +1
if(macd_prev <= sig_prev && macd_now > sig_now)
{
CrossSignal[i] = 1;
}
// MACDがシグナルを上から下へ抜けたら -1
else if(macd_prev >= sig_prev && macd_now < sig_now)
{
CrossSignal[i] = -1;
}
}
CrossSignal[0] = 0;
return(rates_total);
}このコードでは、MACDとシグナルラインの前回値・現在値を比較し、クロスが発生した位置に +1 または -1 を表示しています。
サブウィンドウに表示することで、メインチャートを邪魔せずに、MACDクロスの状態だけを確認できます。
コード内で重要なポイント
indicator_separate_window
サブウィンドウに表示するための指定です。
#property indicator_separate_windowこれを指定することで、インジケーターが価格チャート上ではなく、別枠に表示されます。
indicator_buffers
表示に使うデータの数を指定します。
#property indicator_buffers 1今回の例では、MACDクロス状態を表示するために1本のバッファを使っています。
SetIndexBuffer
配列をインジケーター表示用のバッファとして登録します。
SetIndexBuffer(0, CrossSignal); この指定により、CrossSignal[] に入れた値がサブウィンドウ上に表示されます。
DRAW_HISTOGRAM
値をヒストグラム形式で表示する指定です。
SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2, clrRed); ライン表示にしたい場合は、DRAW_LINE を使うこともできます。
実際にチャートで確認してみる
コードをMetaEditorに貼り付け、コンパイルしてからMT4チャートに表示します。
コンパイルやチャートへの追加方法が不安な場合は、以下の記事も参考にしてください。

メインチャートを邪魔せず、サブウィンドウ側にMACDクロスの状態を表示できます。
MACDやRSIのように「値の推移を別枠で見たい」ときは、サブウィンドウ表示が便利です。
サブウィンドウ表示が向いているインジケーター
サブウィンドウ表示は、価格チャートとは別に状態や数値を確認したいインジケーターに向いています。
- MACDのようにゼロラインを基準に見たいもの
- RSIのように買われすぎ・売られすぎを数値で見たいもの
- ストキャスティクスのように複数ラインを別枠で見たいもの
- 独自のスコアや判定状態を表示したいもの
- EA化する前に条件成立状態を確認したいもの
一方で、移動平均線や矢印サインのようにローソク足との位置関係を見たいものは、メインチャート表示の方が向いています。
ローソク足と重ねて見たいならメインチャート、数値や状態を別枠で見たいならサブウィンドウが向いています。
インジケーターの目的に合わせて表示場所を選びましょう。
サブウィンドウに表示されない時の確認ポイント
コンパイルできているのにサブウィンドウに表示されない場合は、以下を確認してください。
#property indicator_separate_windowが指定されているか#property indicator_buffersの数が足りているかSetIndexBuffer()で配列を登録しているか- バッファに値が入っているか
- 値がすべて
EMPTY_VALUEになっていないか - MT4のナビゲーターを更新、またはMT4を再起動したか
特に、表示用バッファに値が入っていない場合、サブウィンドウは表示されてもラインやヒストグラムが見えないことがあります。
その場合は、まず CrossSignal[i] = 1; のように固定値を入れて表示されるか確認すると、原因を切り分けやすくなります。
MT4インジケーターのサブウィンドウ表示でよくある質問
MQL4コード内で #property indicator_separate_window を指定します。
さらに、表示用のバッファを用意し、SetIndexBuffer() で登録することで、サブウィンドウ上にラインやヒストグラムを表示できます。
indicator_chart_window はメインチャート上に表示する指定です。
indicator_separate_window はチャート下部のサブウィンドウに表示する指定です。
移動平均線や矢印サインはメインチャート、MACDやRSIのような数値系はサブウィンドウが向いています。
バッファに値が入っていない、SetIndexBuffer() が正しく設定されていない、表示スタイルが合っていない、または条件が一度も成立していない可能性があります。
まずは固定値を入れて表示されるか確認すると、原因を切り分けやすくなります。
はい。EA化する前に、条件が成立しているかをサブウィンドウで確認できます。
ただし、このページではサブウィンドウ表示の基本設定を中心に扱っています。EA作成全体の流れは、EAプログラミングの学習記事で確認してください。
まとめ MT4インジケーターをサブウィンドウに表示する基本
今回は、自作インジケーターをサブウィンドウに表示する方法を解説しました。
#property indicator_separate_windowを指定するとサブウィンドウ表示になる- 表示用バッファを作り、
SetIndexBuffer()で登録する - MACDやRSIのような数値系インジケーターはサブウィンドウ向き
- 移動平均線や矢印サインはメインチャート表示の方が見やすい
- 表示されない場合は、バッファ設定と値の有無を確認する
サブウィンドウ表示は、インジケーター作成の中でも特定の用途に絞った設定です。
インジケーター全体の作り方や、サインツール作成の流れは以下の記事で解説しています。
関連・おすすめ記事
- 👉 ◆ 初心者でもできるEA作成入門
- 👉 ◆ EAバックテストのやり方まとめ
- 👉 ◆ FX自動売買におすすめのVPS比較5選
- 👉 ◆ MT4対応FX業者比較一覧
- 👉 EAダウンロード一覧【無料配布】
- 👉 EAオーダーメイド作成サービス
💡 どのページもEA初心者のステップアップに役立つ内容です。気になるテーマからチェックしてみてください。






コメント