MT4チャートを表示する際、「チャートの右端をシフト」を有効にして使っている人も多いのではないでしょうか?
今回は、チャート現在足の右側(未来時間)に垂直線やラベルオブジェクトを表示させる方法を紹介します。
ただ、X軸、Y軸を指定して表示させるのではなく、時間や価格に応じてオブジェクトの位置を変更する方法です。
これにより、現在終値の値を表示させたり、時間を表示させたりすることで、常に変化する値を素早く確認できるメリットもあるかと思います。
カスタムインジケーターを作成
まずはカスタムインジケーターを新規作成します。
OnCalculate 内に記述していきます。
オブジェクトの生成はそんなに難しくないかと思いますが、未来の時間を指定するにはどうしたら良いのか分からないといった声が多いです。
未来の時間をどう表現するかというと、以下の通りです。
int n = 5; datetime label_time = Time[0] + ChartPeriod(0) * 60 * n;
上記は、現在足から5本分右側(未来時間)にずらしたコードとなり、「n」の値を変更すれば、任意の本数分ずらすことが出来ます。
これにより垂直位置となる時間を指定することが出来るようになります。
並行位置については現在終値としましょう。
double CurrentClose = Close[0];
これはそんな難しい事ではありませんよね。
この2つの情報があれば、ObjectCreateを使ってオブジェクトを生成することが出来ます。
ObjectCreate(0,"LABEL_Right",OBJ_VLINE,0,label_time,CurrentClose);
これは垂直線を生成するためのコードとなりますので、「OBJ_VLINE」を指定しています。
しかし、こちらオブジェクトは生成されますが、ティック更新時に現在の時間や終値の位置に動いてくれません。
オブジェクトを動かす必要があります。
ObjectMove(0,"LABEL_Right",OBJ_VLINE,label_time,CurrentClose);
これで常に現在時間にあった位置で表示されるようになります。
ラベル生成して現在終値を表示させるようにするには以下のようにします。
ObjectCreate("CurrentOBJText", OBJ_TEXT,0,0,0); ObjectMove("CurrentOBJText",0,label_time,CurrentClose); ObjectSet("CurrentOBJText", OBJPROP_COLOR, clrWhite); ObjectSet("CurrentOBJText", OBJPROP_SELECTABLE, false); ObjectSet("CurrentOBJText", OBJPROP_ANCHOR, ANCHOR_LEFT); ObjectSetText("CurrentOBJText", DoubleToStr(CurrentClose,2)+" Point", 8, "Arial Bold", clrWhite);
完成
オブジェクトの生成より、未来時間を指定する方法が分からないと悩む人が多いのではないかと思います。
なぜこのコードで表現できるのかは、ぜひコードを研究して読み解いてみてください!
全体のコードは以下の感じです。
【YouTube動画公開】
このテクニックを使って前日高安値のラインを引くインジケーターを作成しています。
良かったらチェックしてみてください。
コメント