プログラムからチャートに水平線を引く。MT4のオブジェクトを扱う方法を解説

トレード時にはMT4のチャート上に、トレンドラインやフィボナッチを表示させて活用していることと思います。テキストや図形も表示できますね。

このようなものを「オブジェクト」といいます。難しく考えず一つの機能を持った部品と考えても差し支えありません。

ラインを引こうと思ったら、いつもメニューからオブジェクト選んでチャートをドラッグして描画しますね。

今回は手動ではなく、プログラムからオブジェクトを使って自動でチャート上に表示させてみようという試みです。

画面へ表示させるだけですので実用性は皆無ですが、水平線を例にプログラムでオブジェクトを使う方法を解説します。

プログラムからチャートへ水平線を引く

チャート分析にラインは欠かせません。扱い方も簡単ですので水平線を引いてみましょう。

面白みはありませんが、水平線を現在のレートに引くだけのプログラムです。このプログラムからオブジェクトの作成・設定・削除の流れがわかるかと思います。

現在レートに水平線を引くプログラム

19行の短いコードですが、この中で水平線の準備・表示・後始末を行っています。それでは順番にみていきましょう。

1行目:#propety命令

#property indicator_chart_window

「チャートウィンドウへ表示する」との意味に感じますが、「サブウィンドウを作成しない」という意味になります。

サブウィンドウは使わないのでこの命令を入れておきます。

全体の処理の流れ

全体では3つのブロックから構成されています。関数というのですが、1つの決まった処理を行うものと考えておいてください。今は関数とは何かなんて無視です。

  • init():初期化などを行って前準備をする場所。今回は水平線を使う準備
  • start():実際の処理を行う場所。結果を画面に表示するようなメインとなる部分
  • deinit():終了処理、後片付けに相当します。今回だと表示したラインを消します

オブジェクトは「準備→使う→後始末」という手順を踏みますので

  • オブジェクトの作成準備:ObjectCreate()→init()関数で
  • オブジェクトを設定して画面へ表示:ObjectSet()→start()関数で
  • オブジェクトを削除:ObjectDelete()→deinit()関数で

のようになっています。

オブジェクトの種類を指定する

今回は水平線1本なのですが、複数のラインがあると個別に操作したい場合に区別がつきません。そこでオブジェクトは関数の最初のパラメータで指定した「オブジェクト名」で区別します。

ObjectCreate("Line", OBJ_HLINE, 0, 0, 0);
ObjectSet("Line", OBJPROP_PRICE1, close[0]);
ObjectDelete("Line");

「”Line”」と名づけたものがオブジェクト名です。オブジェクトの区別に使うため、わかりやすい名前を自由につけておくとよいでしょう。

オブジェクトの操作方法

次に、オブジェクトの操作方法へ進みましょう。

ObjectCreate()関数でオブジェクトを作成する

ObjectCreate("Line", OBJ_HLINE, 0, 0, 0);

オブジェクトの種類を指定するのは2つ目のパラメータです。このパラメータはオブジェクトごとに決まっており、水平線を使いたいので「OBJ_HLINE」を指定します。

ここを変更することで水平線以外のオブジェクトを扱うことができるわけです。

そして、3つめのパラメータは表示するウィンドウ番号です。チャートウィンドウは常に0番です。水平線はチャートウィンドウへ表示したいので「0」を指定します。

4つ目、5つ目のパラメータはオブジェクトの種類により指定する値が異なります。今回はどちらも「0」を指定します。

ObjectSet()関数でオブジェクトを設定する

作ったオブジェクトに、どのような振る舞いを与えるか設定しましょう。

今回は、「水平線を現在レートへ引くこと」なのでその設定を行います。

ObjectSet("Line", OBJPROP_PRICE1, close[0]);

2つ目のパラメータへ「OBJPROP_PRICE1」を指定します。これで水平線の表示位置が現在レートへ変更されます。

3つ目のパラメータが水平線を表示する価格です。ここに指定した値へ水平線が引かれることになります。「close[0]」を指定していますが、これは現在値のことです。

ObjectDelete()関数で後始末する

ObjectDelete("Line");

オブジェクトを削除する関数です。これにより水平線がチャート画面から削除されます。

この関数を入れ忘れると、プログラムをチャートから削除しても水平線が画面上に残ったままとなります。

その場合は手動でラインを消せば済むことですが、後始末は忘れないようにしましょう。

コメント