「自作したオリジナルインジケータを、MACDのようにサブウィンドウ側に表示したい!」
そんな時に役立つのが #property indicator_separate_window です。
この記事では、サブウィンドウにインジケータを表示させるための基本コードと、実際に動作するサンプルソースをわかりやすく解説します。
サブウィンドウに表示する方法
方法はとてもシンプルです。
オリジナルインジケータの冒頭に以下の1行を追加するだけで、メインチャートではなくサブウィンドウに表示されるようになります。
#property indicator_separate_windowこの指定をしないと、インジケータはデフォルトでメインチャート上に表示されてしまいます。
「チャートがごちゃごちゃして見づらい」と感じる時には、サブウィンドウを活用するのが便利です。
実際のサンプルコード(MACDクロス検出)
以下は「MACDのゴールデンクロス/デッドクロスを検出して表示する」インジケータの簡単なサンプルコードです。
- ゴールデンクロス → +1
- デッドクロス → -1
- それ以外 → 0
という数値をサブウィンドウに出力します。
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
input int MACD_FE_PERIOD = 12;
input int MACD_SE_PERIOD = 26;
input int MACD_SS_PERIOD = 9;
int BarLimit = 1000;
double CrossJyoutai[];
// 初期化
int init()
{
ArrayResize(CrossJyoutai, Bars); // バッファ確保
ArrayInitialize(CrossJyoutai, EMPTY_VALUE);
SetIndexBuffer(0, CrossJyoutai);
SetIndexStyle(0, DRAW_SECTION);
SetLevelValue(0, 0);
return(INIT_SUCCEEDED);
}
// メイン処理
int start()
{
int limit = MathMin(Bars-2, BarLimit); // n+1参照するので -2
for(int i=limit; i>=0; i--)
{
if(getMACDSign(3,1,i)) CrossJyoutai[i] = 1;
else if(getMACDSign(4,1,i)) CrossJyoutai[i] = -1;
else CrossJyoutai[i] = 0;
}
return(0);
}
// MACDクロス判定
bool getMACDSign(int type, int limit, int i)
{
bool sign = false;
double MACD_1, Signal_1, MACD_2, Signal_2;
int start = i + 1;
int end = i + limit;
for(int n=start; n<=end; n++) // <=に修正
{
MACD_1 = iMACD(NULL,0,MACD_FE_PERIOD,MACD_SE_PERIOD,MACD_SS_PERIOD,PRICE_CLOSE,MODE_MAIN,n);
Signal_1 = iMACD(NULL,0,MACD_FE_PERIOD,MACD_SE_PERIOD,MACD_SS_PERIOD,PRICE_CLOSE,MODE_SIGNAL,n);
MACD_2 = iMACD(NULL,0,MACD_FE_PERIOD,MACD_SE_PERIOD,MACD_SS_PERIOD,PRICE_CLOSE,MODE_MAIN,n+1);
Signal_2 = iMACD(NULL,0,MACD_FE_PERIOD,MACD_SE_PERIOD,MACD_SS_PERIOD,PRICE_CLOSE,MODE_SIGNAL,n+1);
double eps = Point*0.1;
if(type==1 || type==3){ // 下から上
if(MACD_2 < Signal_2 - eps && MACD_1 >= Signal_1 - eps){
if(type==3 && MACD_1 > -eps) continue; // マイナス域限定
sign = true; break;
}
}
else if(type==2 || type==4){ // 上から下
if(MACD_2 > Signal_2 + eps && MACD_1 <= Signal_1 + eps){
if(type==4 && MACD_1 < eps) continue; // プラス域限定
sign = true; break;
}
}
}
return sign;
}
このように、サブウィンドウ指定を追加するだけで簡単に分離表示が可能になります。
実際にチャートで確認してみる
修正したインジケータをMT4にコンパイルし、チャートに挿入すると…

✅ メインチャートを邪魔せず、サブウィンドウ側に数値が表示されるようになります。
MACDやRSIのように「値の推移を別枠で見たい」ときにとても便利です。
まとめ
今回は 「オリジナルインジケータをサブウィンドウに表示する方法」 を解説しました。
#property indicator_separate_windowを追加するだけでサブウィンドウ表示が可能- チャートの見やすさが改善され、裁量判断やEA作成にも応用できる
自作インジケータをメインチャートに置いたら「ごちゃごちゃして見づらいな…」と思った方は、ぜひ今回の方法を試してみてください。















コメント