2016年1月8日金曜日

[MQL超入門] その009 本格的にインジケータを作ってみよう。その1 セパレート型インジケータ作成

プログラムは習うより慣れろが基本です。

そこで、本格的なちゃんと使える(?)インジケータを確認しながら作成していきたいと思います。

MT4では、通常見えている価格の情報以外に価格の更新回数という情報も保持しています。更新回数が多いほど活発に取引されていることを示しています。値段が動きやすいタイミングというのがデータで判別可能です。

これは通常の価格チャートでは表示されていません。MT4には、この情報を表示するためのVolumesというデフォルトのインジケーターが存在しますが、基準値が表示されおらず、で?って感じのインジケータとなってしまっています。
そこで、インジケータの現在値と平均値を同時に表示して活発に取引されているかどうかを判定するインジケータを作成したいと思います。


まず、新しいインジケータを作成してみてください。

[MQL超入門] その005 とりあえずやってみよう!簡単インジケータ作成1
http://mt4program.blogspot.jp/2015/12/mql-005.html

を、参考にTickVolumeという名前のインジケータを作成します。
 ・図005.03 MQLウィザード 名前の決定
にてTickVolumeという名前を入力した後「 ・図005.04 MQLウィザード カスタムイベントハンドラの選択」以降の作業は無視して、すべて[次へ(N)]ボタンを押してウィザードを終了してください。

そうすると次のようなファイルが出来上がります。
これがインジケータ最小限のひな型となります。

//+------------------------------------------------------------------+
//|                                                   TickVolume.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

インジケータウィザード 生成コードを見てみよう
http://mt4program.blogspot.jp/2015/10/blog-post_95.html
時間足の中央値を描画するサンプル
http://mt4program.blogspot.jp/2015/10/blog-post_79.html

でも少し書いてありますが、もう一度、重要な部分だけおさらいしたいと思います。

#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
まず、上から4行ですが、これはプログラムに関する情報です。動作には大きく影響しません。気になる方は修正しましょう。外部に向けて公開するときなどは、著作権情報などを入力します。

#property strict
この一行は、あたらしいMQL形式に対応するという文言ですが、特に気にせず付けます。

#property indicator_chart_window
この一行は、重要です。
indicator_chart_windowは、価格が表示されているチャートの上に描画されるインジケータのことを示しています。
[MQL超入門] その006 とりあえずやってみよう!簡単インジケータ作成2
http://mt4program.blogspot.jp/2015/12/mql-006-2.html

で作成したような形のものです。

さて、TickVolumeというのは価格情報とは異なる値ですので、分割したインジケータとして表示したい情報です。
そこで、ここの値を次のように変更します。
#property indicator_separate_window

この状態で、一度実行してみましょう。

・図009.01 分割したインジケータ
価格情報が表示されている場所とは別の場所に枠が表示されました。これがセパレート型インジケータとなります。

さて、次回は、このチャート上に、価格の更新回数を描画したいと思います。

次の回へ


ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ