(5) 【MQL5】 チャートに線を描く

投稿者: | 2017年9月15日

6,604 views

この記事は最終更新から 2553日 が経過しています。

(1) やりたいこと

チャートに Indicatorを表示させる練習。その第1歩としてチャートに線を描きたい。

参考サイトはこちら(↓)
MQL5: 自分のインディケーターの作成

(2) 仕様

できるだけ小さなプログラムにするため、仕様を単純にする。
チャート上で各足の高値を線で結ぶ。

(3) プログラムのひな形を作成

まずは Wizardを使って Indicatorプログラムのひな形を作成する。
1) MetaEditorを起動する。
2) [New]メニューを選択する。
3) Custom Indicatorを選択する。

4) 名前を付ける。今回はパラメーターは無し。

5) OnCalcurateでは全値を通知させる。OnTimer, OnChartEventは使わない。

6) 今回はチャート上にIndicatorを乗せるので Indicator in separate windowは OFFのまま。Plotsには黄色い線を1本追加する。

7) [完了]ボタンを押すと、こんなプログラムソースコードが自動生成された。

(4) プログラムを書く

上で作成したひな型に独自のコードを書き加えて、前述の仕様を満たすようにする。
今回は仕様が単純なため、自動生成されたコードにたったの3行を追加するだけだった。

具体的には OnCalcurateの中に以下の3行を追加した。
通知された全足の高値データを Indicator用バッファに設定している。
これだけで、#property で指定した通りのIndicatorが表示される仕組みだ。とっても便利。

   for(int i = 0 ; i < rates_total ; i++){
      HighBuffer[i] = high[i];
   }

そして出来上がったプログラムがこちら。
コメント込みで全52行、しかも49行は自動生成されたものだ。

(5) 作った Indicatorをチャートに乗せてみる

[F5]キーを押下、もしくは [Start]ボタンを押下すると、デバッグできる。

チャートにIndicatorが乗った!

何の役にも立たないが、そのうちに意味のあるものが作れるようになるはず。きっと...

(6) 線の装飾を変えてみる

黄色線は上記(3)の Wizard上で選択したもの。
これらの情報は、自動生成されたコード上で、

#property indicator_xxxxxxxx

として出力されていた。

ということは...
これを変更すれば線の装飾を自由に変更できるわけだ。

ではどんな種類があるのか?
以下を参考にいろいろと弄ってみる。
1) 指標プロパティ
2) #property
3) 指標スタイル

装飾#1:線の太さを3倍にしてみる。

#property indicator_width1 3

装飾#2:途切れ線にしてみる。

#property indicator_style1 STYLE_DASH

装飾#3:矢印にしてみる。

#property indicator_type1   DRAW_ARROW


矢印かと思ったら●が表示された。
これは PLOT_ARROW=159(丸)がデフォルトだからとのこと。

これを変えたい場合は PLOT_ARROWの値を関数コールで変える必要がある。
たとえば右向き矢印の文字コードを設定してみる。

PlotIndexSetInteger(0, PLOT_ARROW, 240);


これは何かに使えるかもしれない。
ちなみに上向き矢印は 241, 下向き矢印は 242だ。

装飾#4:線と矢印を少し離す。

線と矢印が重なってしまっているので、少し離したい。
これは PLOT_ARROW_SHIFT の値で調節できる。

PlotIndexSetInteger(0, PLOT_ARROW_SHIFT, -30);


30pixel上にずれた。
値を -30から 30に変えれば、矢印は下方向に 30pixelずれる。

基準位置はプログラム中で HighBuffer に格納した値で判断しているようだ。
今回は高値を設定しているため、高値が基準位置になっている。
ここからのシフト量を指定していることになる。

HighBufferに open, close, lowなど別の値を設定すれば、それぞれが基準位置となる。

ちょっと疲れた...


カテゴリー: MQL

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)