MetaEditorでカスタムインジケーターを新規作成すると、OnInit()・OnCalculate()・OnDeinit()という3つの空のテンプレートが自動生成されます。この記事では、その作成手順と、テンプレートに何を書き足していけばよいかを順番に解説します。

カスタムインジケーターの作成の流れ

カスタムインジケーターの作成の流れを説明していきます。

メタエディターを起動する

MetaEditor(メタエディタ)をMT4から起動させる方法は以下の通りです。

MQL MT4 カスタムインジケーター 作成

  • ツール→メタエディタ
  • フォルダのアイコン

でメタエディタを起動します。

カスタムインジケーターを選択する

次に新規作成を押して、今回はインジケーターを作成するのでカスタムインディケータを選択しましょう。

MQL MT4 カスタムインジケーター 作成

必要な情報を記入する

必要な情報を記入しましょう。

  • インジケーターの名前
  • 著作者
  • リンク
  • パラメーター

パラメーターは必要なときだけ活用します。

今回は名前はSample1などで良いです。

MQL MT4 カスタムインジケーター 作成

イベントハンドラを選択

イベントハンドラを選択します。もともとOnCalculate()は入っているので、

  • OnTimer()
  • OnChartEvent()

は、必要な時にチェックしましょう。

MQL MT4 カスタムインジケーター 作成

サブウィンドウの設定

サブウィンドウの設定になります。今回は必要ないのでスルーです。そのままfinishを押して終了しましょう。

MQL MT4 カスタムインジケーター 作成

テンプレートが自動で生成される

以下のようにテンプレートが自動生成されます。

MQL MT4 カスタムインジケーター 作成

これが1つの雛形になります。

ソースコードはそのまま以下に記載しておきます。

//+------------------------------------------------------------------+
//|                                                     sample1.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, 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);
  }
//+------------------------------------------------------------------+

テンプレートから記載していくこと

テンプレートから記載していくことを説明していきます。

まずは、ソースコードの全体像を確認します。

MQL MT4 カスタムインジケーター 作成

プロパティを記述する

プロパティについて詳しくはこちら

パラメーターを記述する

パラメーターについて詳しくはこちら

バッファを記述する

バッファとは、数値を入れておく箱のようなものです。

MQLでインジケーターはバッファで管理されることが多いです。

チャート上に線や矢印などの設定をしたい場合は、バッファの存在をMT4に通知する必要があります。
バッファについて詳しくはこちら

イベントハンドラ関数内にプログラムを記述する

イベントハンドラ関数内にプログラムを記述していきます。

基本的にカスタムインジケーターで記載する必要があるのは、

  • OnInit()
  • OnCalculate()
  • OnDeinit()

の3つです。

OnDeinit()は綴りに注意してください。「OnDeInit」のように大文字と小文字を間違えると、MQL4はこの関数を標準のイベントハンドラとして認識しません。コンパイル自体は通ってしまうため気づきにくいのですが、インジケーターを外すときに呼ばれるはずの後始末(タイマーの解除、チャート上に作ったオブジェクトの削除など)が実行されず、意図しない状態が残ってしまいます。
イベントハンドラについて詳しくはこちら

ソースコードを書き終わったら

ソースコードを書き終わったら何をするかを説明します。

MQL MT4 カスタムインジケーター 作成

ソースコードをコンパイルする

プログラムを記述した後に、コンパイルという作業が必要になります。

プログラムをコンパイルすることにより、

メタトレーダーのインジケーターやEAとして使用することができるようになります。

MQL MT4 カスタムインジケーター 作成

実際にチャートに表示する

作成したカスタムインジケーターをチャートに表示して実際に使います。

もしバグなどがあればデバッグ作業を行いましょう。

バグもなければこれでカスタムインジケーターの作成が完了です。

メタエディタ(MetaEditor)の様々なテクニック

メタエディタ(MetaEditor)の様々なテクニックをご紹介します。

インデントを効率化するテクニック

インデントを部分的に修正したい時は複数行を選択して

  • Tabを押すと右に動く
  • Tab+Shiftを押すと左に動く

Tools – Styler を選択すると全てが自動で適切な配置にインデントされ一括整形できます(行の選択は不要)。

関数リファレンスを見るテクニック

調べたい関数の上にカーソルを置いて「F1」を押すと関数リファレンスを見ることができます。

パラメータヒントを見るテクニック

関数の引数入力中に「Ctrl」+「Shift」+「Space」を押すとパラメータのヒントが出るので、

これを参考にすると何を入力すれば良いか分かります。

入力補完を効率化するテクニック

Tools – Options を選択し、Generalタブの List names after に「1」を入力すると、

入力補完の選択肢発生が初期設定の3文字目から1文字目になります。

まとめ

今回はカスタムインジケーターの作成の流れをご紹介しました。一度理解すればあとはプログラミングする際に同じような手順を進めれば良いです。とくにOnDeinit()の綴りだけは、コンパイルエラーにならず気づきにくいので注意しましょう。

関連記事