MT4インジケーターの作り方 MQL4でサインツールを自作する基本手順

MT4インジケーターの作り方とMQL4でサインツールを自作する基本手順を解説したアイキャッチ画像
MT4ノウハウ・インジケータ

MT4では、標準インジケーターだけでなく、MQL4を使って自分専用のインジケーターを作ることができます。

たとえば、チャート上に情報を表示したり、条件を満たした場所にサインを出したり、EA化する前に売買条件を見える化したりできます。

本記事では、MT4インジケーターの作り方を、MQL4初心者向けに解説します。
MetaEditorでの新規作成、サンプルコード、コンパイル、チャート表示、サインツール作成の考え方まで順番に確認していきましょう。

この記事でわかること
  • MT4インジケーターを自作する基本の流れ
  • MetaEditorでカスタムインジケーターを新規作成する方法
  • チャート上に情報を表示する簡単なサンプルコード
  • 矢印サインツールを作る基本の考え方
  • コンパイルしてMT4に表示する手順
  • 自作インジケーターをEA作成に活かす考え方

※ 既存の外部インジケーターをMT4に入れる方法を知りたい方は、 MT4にインジケータを追加する方法 を参考にしてください。


MT4インジケーターは無料で自作できる?

MT4インジケーターは、MT4に付属しているMetaEditorを使えば無料で作成できます。

特別なインジケーター作成ソフトを用意しなくても、MT4とMetaEditorがあれば、MQL4で自作インジケーターを作れます。

  • チャート上に文字や数値を表示する
  • 条件を満たした場所に矢印を表示する
  • サブウィンドウにラインやヒストグラムを表示する
  • EA化する前に売買条件を見える化する

最初から複雑なものを作る必要はありません。
まずは、チャート上に情報を表示する簡単なインジケーターから始めるのがおすすめです。

初心者は「表示するだけ」から始める

いきなり売買サインを作ろうとすると難しく感じます。
まずは、Comment()でチャート上に文字を表示する簡単なインジケーターから作ると、MQL4の流れを理解しやすくなります。


自作インジケーターとEAの違い

MT4では、インジケーターとEAはどちらもMQL4で作れますが、役割が違います。

種類主な役割できること
インジケーター分析・表示補助ライン、矢印、文字、サイン、ヒストグラムなどを表示する
EA自動売買条件に応じて注文・決済・ポジション管理を行う

インジケーターは、基本的に売買を実行しません。
あくまで、チャート上に情報を表示したり、条件を見やすくしたりするものです。

一方、EAは条件に応じて注文や決済を行います。

そのため、EAを作る前にインジケーターで条件を見える化しておくと、売買ロジックを整理しやすくなります。


サインツールとは 条件を満たした場所を見える化するインジケーター

サインツールとは、一定の条件を満たした場所に、矢印やマークを表示するインジケーターです。

たとえば、以下のような使い方があります。

  • 移動平均線がクロスした場所に矢印を表示する
  • RSIが30以下になった場所に買いサインを表示する
  • ストキャスティクスが反転した場所にサインを表示する
  • エントリー条件が成立したローソク足にマークを出す

サインツールは、EA化する前の確認にも役立ちます。

いきなり自動売買にするのではなく、まずチャート上にサインを表示し、条件が想定どおりに出ているか確認する流れです。

EA化する前にサインで確認する

サインツールで条件を見える化しておくと、「どこでエントリー条件が成立しているか」を視覚的に確認できます。
その後、同じ条件をEAに組み込むと、自動売買化の流れが理解しやすくなります。


MetaEditorでカスタムインジケーターを新規作成する

ここから、実際にMT4でインジケーターを新規作成する手順を解説します。

1. MetaEditorを開く

MT4の画面上部にある MetaEditor ボタンをクリックして、MetaEditorを開きます。

MT4の画面からMetaEditorを起動するボタン

2. 新規作成を選択する

MetaEditorが開いたら、「ファイル」→「新規作成」を選択します。

MetaEditorで新規作成を選択する画面

3. カスタムインディケータを選ぶ

一覧から「カスタムインディケータ」を選んで「次へ」をクリックします。

MetaEditorでカスタムインディケータを選択する画面

4. 名前や著作者情報を入力する

インジケーター名、著作者、リンク先などを入力します。

例:

  • 名前:CHK_swap
  • 著作者:Copyright 2020, fx-prog
  • リンク:https://fx-prog.com/
カスタムインジケーター名と著作者情報を入力する画面

そのまま「次へ」をクリックします。

カスタムインジケーター作成ウィザードで次へ進む画面

最後に「完了」をクリックします。

カスタムインジケーター作成ウィザードの完了画面

完了すると、インジケーター用のソースコードが表示されます。


まずはチャート上に文字を表示する簡単なサンプル

最初のサンプルとして、チャート上にスワップタイプを表示する簡単なインジケーターを作ります。

このサンプルは、売買サインを出すものではありません。
まずは、MQL4で情報を取得し、チャート上に表示する流れを理解するための練習です。

//+------------------------------------------------------------------+
//|                                                   CHK_swap.mq4    |
//|                                      https://fx-prog.com/         |
//+------------------------------------------------------------------+
#property strict
#property indicator_chart_window

int OnInit()
{
   return(INIT_SUCCEEDED);
}

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[])
{
   int swap_type = (int)MarketInfo(Symbol(), MODE_SWAPTYPE);

   string type_text = "";

   if(swap_type == 0)
      type_text = "pips";
   else if(swap_type == 1)
      type_text = "決済通貨";
   else if(swap_type == 2)
      type_text = "金利";
   else if(swap_type == 3)
      type_text = "証拠金通貨";
   else
      type_text = "不明";

   Comment("スワップタイプは ", swap_type, "(", type_text, ")です。");

   return(rates_total);
}

このコードでは、MarketInfo() を使ってスワップタイプを取得し、Comment() でチャート左上に表示しています。

このように、まずは「チャート上に情報を表示する」ことから始めると、MQL4の基本的な流れをつかみやすくなります。


初心者向け 簡単なサインツール作成の考え方

次に、サインツールの考え方を確認しておきましょう。

サインツールでは、次のような流れで矢印やマークを表示します。

  1. 条件を決める
  2. 条件が成立したローソク足を探す
  3. その場所に矢印やマークを表示する

たとえば、移動平均線のクロスを使う場合は、

  • 短期移動平均線が長期移動平均線を上抜けたら買いサイン
  • 短期移動平均線が長期移動平均線を下抜けたら売りサイン

というように条件を作れます。

サインツールはEAの前段階

サインツールで条件を見える化できれば、次はその条件をEAのエントリーロジックに使えます。
つまり、インジケーター作成はEA作成の練習にもなります。

矢印サインを表示する簡易サンプル

以下は、短期移動平均線と長期移動平均線のクロスで、チャート上に矢印を表示する簡易サンプルです。

※ 学習用の簡易サンプルです。実運用向けに使う場合は、リペイント対策、確定足判定、アラート、パラメータ調整などを追加して検証してください。

//+------------------------------------------------------------------+
//|                                             Simple_MA_Sign.mq4    |
//|                                      https://fx-prog.com/         |
//+------------------------------------------------------------------+
#property strict
#property indicator_chart_window
#property indicator_buffers 2

double BuyArrow[];
double SellArrow[];

input int FastMAPeriod = 5;
input int SlowMAPeriod = 20;
input int ArrowGapPips = 5;

int OnInit()
{
   SetIndexBuffer(0, BuyArrow);
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID, 1, clrBlue);
   SetIndexArrow(0, 233);
   SetIndexLabel(0, "Buy Sign");

   SetIndexBuffer(1, SellArrow);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 1, clrRed);
   SetIndexArrow(1, 234);
   SetIndexLabel(1, "Sell Sign");

   return(INIT_SUCCEEDED);
}

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[])
{
   if(rates_total < SlowMAPeriod + 3)
      return(0);

   int start = rates_total - SlowMAPeriod - 2;

   for(int i = start; i >= 1; i--)
   {
      BuyArrow[i] = EMPTY_VALUE;
      SellArrow[i] = EMPTY_VALUE;

      double fast_now  = iMA(NULL, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
      double fast_prev = iMA(NULL, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i + 1);

      double slow_now  = iMA(NULL, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
      double slow_prev = iMA(NULL, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i + 1);

      double gap = ArrowGapPips * Point;

      // 短期MAが長期MAを上抜けたら買いサイン
      if(fast_prev <= slow_prev && fast_now > slow_now)
      {
         BuyArrow[i] = Low[i] - gap;
      }

      // 短期MAが長期MAを下抜けたら売りサイン
      if(fast_prev >= slow_prev && fast_now < slow_now)
      {
         SellArrow[i] = High[i] + gap;
      }
   }

   return(rates_total);
}

このサンプルでは、移動平均線のクロスを判定し、条件が成立したローソク足に買い矢印・売り矢印を表示します。

MT4チャート上に移動平均線クロスの買いサインと売りサインを矢印で表示したサインツールの例
移動平均線クロスを条件に、買いサイン・売りサインをチャート上へ表示した例

このように、サインツールでは条件が成立した場所を矢印で見える化できます。
EA化する前に「どこでエントリー条件が出ているか」を確認できるため、売買条件の整理にも役立ちます。

このようなサイン表示を作れるようになると、EAに入れる前の条件確認がしやすくなります。


メインチャート表示とサブウィンドウ表示の違い

インジケーターには、チャート上に直接表示するタイプと、チャート下のサブウィンドウに表示するタイプがあります。

  • メインチャート表示:移動平均線、矢印サイン、水平線など
  • サブウィンドウ表示:RSI、MACD、ストキャスティクスなど

今回のサンプルでは、#property indicator_chart_window を使って、メインチャート上に表示しています。

サブウィンドウに表示したい場合は、設定の考え方が少し変わります。
詳しくは以下の記事で解説しています。

サブウィンドウ表示を詳しく見る

RSIやMACDのように、チャート下の別ウィンドウへ表示するインジケーターを作りたい方はこちらを参考にしてください。

オリジナルインジケータをサブウィンドウに表示する方法


自作インジケーターをコンパイルする

コードを入力できたら、MetaEditor上部の「コンパイル」ボタンをクリックします。

コンパイル後、画面下部にエラーが出ていないことを確認します。

MetaEditorでインジケーターをコンパイルしエラーがない状態

エラーが出ている場合は、エラー行やスペルミス、カッコの閉じ忘れなどを確認してください。

MetaEditorでコンパイルエラーが表示されている画面

コンパイルが成功すると、MT4で実行できる .ex4ファイル が作成されます。

mq4とex4の違い
  • .mq4:編集用のソースコードファイル
  • .ex4:MT4で実行されるコンパイル後のファイル

MT4チャートに自作インジケーターを表示する

コンパイルしたインジケーターをMT4チャートに表示してみましょう。

MT4画面の「ナビゲータ」から「インディケータ」を開き、自分で作成したインジケーター名を探します。

見つからない場合は、ナビゲーター内で右クリックして「更新」をクリックするか、MT4を再起動してください。

MT4のナビゲーターから自作インジケーターを選択する画面

対象のインジケーターを右クリックし、「チャートに表示」をクリックします。

以下のような設定画面が表示されるので、最初はそのまま「OK」をクリックして問題ありません。

MT4で自作インジケーターをチャートに表示する設定画面

チャート左上にスワップタイプが表示されたり、条件成立時に矢印サインが表示されたりすれば成功です。

MT4チャート上に自作インジケーターの表示結果が反映された画面

既存の外部インジケーターを追加する手順は、以下の記事で詳しく解説しています。

MT4にインジケータを追加する方法


自作インジケーターが表示されない時の確認ポイント

自作インジケーターが表示されない場合は、以下を確認してみてください。

  • コンパイルエラーが出ていないか
  • MQL4/Indicatorsフォルダに保存されているか
  • MT4のナビゲーターを更新したか
  • MT4を再起動したか
  • チャート上ではなくサブウィンドウに表示されるタイプではないか
  • バッファや表示設定が正しく書かれているか

特に、サインツールの場合は、条件が成立していないだけで何も表示されないこともあります。

その場合は、まず条件をゆるくして表示されるか確認する、または Comment()Print() で値を確認すると原因を切り分けやすくなります。

Print()でEAがエントリーしない原因を確認する方法


インジケーターをEA化する流れ

自作インジケーターで条件を見える化できたら、次はその条件をEAに組み込むこともできます。

流れとしては、以下のようなイメージです。

  1. インジケーターで条件をサイン表示する
  2. サインが想定どおりに出るか確認する
  3. 同じ条件をEAのエントリー条件に使う
  4. バックテストで動作を確認する
  5. 必要に応じて条件を調整する

インジケーターは、EAの前段階として非常に役立ちます。

「どこで条件が成立するのか」を見える化できるため、EA作成時のズレや思い違いを減らしやすくなります。

インジケーターの条件をEAに活かしたい方へ

MT4のEAをプログラミングで自作する学習手順を見る

MT4インジケーター作成でよくある質問

MT4インジケーターは無料で自作できますか?

はい。MT4に付属しているMetaEditorを使えば、MQL4で無料で自作インジケーターを作成できます。
特別なインジケーター作成ソフトを用意しなくても、MT4とMetaEditorがあれば作成できます。

初心者でもサインツールは作れますか?

簡単な条件であれば作成できます。
たとえば、移動平均線のクロスやRSIのしきい値など、条件が明確なものから始めると理解しやすいです。
最初は矢印を表示するだけのシンプルなサンプルから試すのがおすすめです。

インジケーターとEAは何が違いますか?

インジケーターはチャート上に情報やサインを表示する分析補助ツールです。
EAは条件に応じて注文や決済を自動で行うプログラムです。
インジケーターで条件を見える化し、その条件をEAに組み込む流れもあります。

自作インジケーターが表示されない原因は何ですか?

コンパイルエラー、保存先の間違い、ナビゲーターの更新不足、MT4の再起動不足などが原因として多いです。
また、サインツールの場合は条件が成立していないだけで、何も表示されないケースもあります。

サブウィンドウに表示するインジケーターも作れますか?

はい、作成できます。
RSIやMACDのようにチャート下のサブウィンドウへ表示する場合は、メインチャート表示とは設定が異なります。
サブウィンドウ表示専用の設定を使って作成します。


まとめ MT4インジケーター作成はEA化の前段階にもなる

MT4インジケーターを自作できるようになると、自分が見たい情報をチャート上に表示できます。

  • まずはMetaEditorでカスタムインジケーターを新規作成する
  • 最初はComment()で文字を表示する簡単なサンプルから始める
  • 慣れてきたら、条件成立時に矢印を出すサインツールへ進む
  • サインが想定どおりに出るか確認してからEA化を考える
  • サブウィンドウ表示やアラート機能を加えると応用範囲が広がる

インジケーター作成は、単なる分析ツール作りではありません。
EAを作る前に条件を見える化し、ロジックの確認をしやすくするための重要なステップにもなります。


コメント

タイトルとURLをコピーしました