MQL4でサインツールを作ろう!初心者向け解説①

MQL4で自作インジケーター入門:移動平均線サインツール作成ガイド

 

なおと

こんにちは!naoto555です。
今日はMQL4を使って自作インジケーターを作る方法について解説していきます。
特に、移動平均線を使った簡単なサインツールを例に、MQL4プログラミングの基礎を学んでいきましょう!

謎こんにゃく

わぁ、自作インジケーターですか?
でも、なおとさん、
そもそもMQL4って何なんでしょう?

なおと

いい質問ですね!MQL4はMT4プラットフォーム用の
プログラミング言語です。
これを使うと、カスタムインジケーターやEA
(自動売買システム)を作ることができるんです。

謎こんにゃく

自作するメリットは何ですか?
その辺の奴を買ったり拾ったりじゃダメなんですか?

なおと

自作する意義は大きく3つあります:
①自分のスタイルにマッチしたツールが作れる
②市販では得られない独自の分析が可能になる
③サインツールやEAの仕組みが分かるから
トレードも上達する

謎こんにゃく

なるほど!でも、プログラミング初心者でも
始められるんでしょうか?

なおと

もちろんです!MQL4は比較的学びやすい言語で、
FXの知識があれば理解しやすいんです。
準備も簡単で、主に以下の3ステップで始められます:
1. MetaTrader 4をインストール
2. MetaEditor(MQL4用の統合開発環境)を開く
3. 基本的なMQL4の文法を学ぶ

謎こんにゃく

なるほど!それなら僕にも
できそうですね…はぁはぁ

なおと

今回は、この準備を済ませたという前提で、
実際に簡単なサインツールを作ってみましょう。
移動平均線を使った、とてもシンプルなものです

移動平均線を使ったサインツールの基本

今回作成するサインツールは、以下のような特徴を持っています:

  • 単純移動平均線(SMA)を使用
  • 価格がSMAを上向きに突破したら買いサイン
  • 価格がSMAを下向きに突破したら売りサイン
本記事のポイント
  • MQL4の基本構造: init()関数とstart()関数の役割
  • 移動平均線の計算: iMA()関数の使い方
  • サイン表示のロジック: 条件分岐とバッファの使用方法

サインツールのコード全文

以下が作成したコードの全文です。次の見出しで細かく抜粋してみていきます。

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int MA_Period = 14;

double BuyBuffer[];
double SellBuffer[];

int init()
{
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,233);
    SetIndexBuffer(0,BuyBuffer);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,234);
    SetIndexBuffer(1,SellBuffer);
    return(0);
}

int start()
{
    int counted_bars = IndicatorCounted();
    int limit = Bars - counted_bars - 1;
    double ma;
    
    for(int i = limit; i >= 0; i--)
    {
        ma = iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,i);
        
        if(Close[i] > ma && Close[i+1] <= ma)
        {
            BuyBuffer[i] = Low[i] - 5*Point;
        }
        else if(Close[i] < ma && Close[i+1] >= ma)
        {
            SellBuffer[i] = High[i] + 5*Point;
        }
    }
    
    return(0);
}

1. インジケーターの基本設定

コードの冒頭部分で、インジケーターの基本的な設定を行っています。

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
  • #property indicator_chart_window: インジケーターをチャート上に表示
  • #property indicator_buffers 2: 2つのバッファ(買いと売り)を使用
  • #property indicator_color1 Lime: 1つ目のバッファ(買い)の色を緑に設定
  • #property indicator_color2 Red: 2つ目のバッファ(売り)の色を赤に設定

サインツールのコード解説

では、実際のコードを見ながら、各部分の役割を詳しく解説していきます。

2. 変数の定義

extern int MA_Period = 14;

double BuyBuffer[];
double SellBuffer[];

extern int MA_Period = 14; では、移動平均線の期間を設定しています。externを使うことで、ユーザーがMT4上で簡単に期間を変更できるようになります。

3. init()関数:初期設定

int init()
{
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,233);
    SetIndexBuffer(0,BuyBuffer);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,234);
    SetIndexBuffer(1,SellBuffer);
    return(0);
}

init()関数は、インジケーターが最初にチャートに適用されたときに一度だけ実行されます。ここでは、買いサインと売りサインの表示方法を設定しています。

  • SetIndexStyle(0,DRAW_ARROW): 0番目のバッファ(買い)を矢印で表示
  • SetIndexArrow(0,233): 買いサインの矢印のスタイルを設定(233は上向き矢印)
  • SetIndexBuffer(0,BuyBuffer): 0番目のバッファをBuyBufferに関連付け
  • SetIndexStyle(1,DRAW_ARROW): 1番目のバッファ(売り)を矢印で表示
  • SetIndexArrow(1,234): 売りサインの矢印のスタイルを設定(234は下向き矢印)
  • SetIndexBuffer(1,SellBuffer): 1番目のバッファをSellBufferに関連付け
矢印のインデックスについて

MQL4では、矢印のスタイルを数値で指定します。主な矢印コードは以下の通りです:

  • 233: 上向き矢印(買いサイン)
  • 234: 下向き矢印(売りサイン)

下の画像で、さまざまな矢印のインデックスを確認できます。

MT4矢印インデックス

4. start()関数:メイン処理

int start()
{
    int counted_bars = IndicatorCounted();
    int limit = Bars - counted_bars - 1;
    double ma;
    
    for(int i = limit; i >= 0; i--)
    {
        ma = iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,i);
        
        // サイン表示のロジック(以下で詳しく説明)
    }
    
    return(0);
}

start()関数は、新しい価格データが来るたびに実行されます。ここで移動平均線の計算とサイン表示のロジックを実装しています。

  • int counted_bars = IndicatorCounted();: 既に計算済みのバー数を取得
  • int limit = Bars - counted_bars - 1;: 計算が必要な最も古いバーのインデックスを計算
  • ma = iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,i);: 移動平均線を計算

iMA()関数は移動平均を計算する組み込み関数です。パラメータの意味は以下の通りです:

  • NULL: 現在のシンボル
  • 0: 現在の時間軸
  • MA_Period: 移動平均の期間
  • 0: 移動平均の移動(シフト)
  • MODE_SMA: 単純移動平均を使用
  • PRICE_CLOSE: 終値を使用
  • i: 計算するバーのインデックス

5. サイン表示のロジック

if(Close[i] > ma && Close[i+1] <= ma)
{
    BuyBuffer[i] = Low[i] - 5*Point;
}
else if(Close[i] < ma && Close[i+1] >= ma)
{
    SellBuffer[i] = High[i] + 5*Point;
}

条件分岐を使って、買いサインと売りサインの表示条件を判断しています。

  • 買いサイン条件: Close[i] > ma && Close[i+1] <= ma
  • 売りサイン条件: Close[i] < ma && Close[i+1] >= ma

条件を満たした場合、それぞれのバッファに値をセットしてサインを表示します。

サインツールの動作イメージ

このサインツールをMT4チャート上に適用すると、以下のような表示になります。

表示内容:買いサイン(緑の上矢印)と売りサイン(赤い下矢印)
判断基準:価格と移動平均線の位置関係

使い方

・緑の上矢印が表示されたら、上昇トレンドの可能性があります。
・赤い下矢印が表示されたら、下降トレンドの可能性があります。
・他の分析と組み合わせて、より信頼性の高いトレード判断を行いましょう。

まとめ

今回は、MQL4を使って移動平均線ベースの簡単なサインツールを作成しました。このコードを基に、他の指標を組み合わせたり、条件を変更したりして、自分だけのオリジナルサインツールを作ってみてください。

プログラミングは実践を通じて上達します。エラーが出ても諦めずに、少しずつコードを変更して動作を確認していくことで、必ず理解が深まります。頑張ってチャレンジしてください!

次のステップ
  • 移動平均線の期間を変えて、感度の違いを確認してみる
  • 他の指標(RSIやMACDなど)と組み合わせて、より精度の高いサインツールを作成する
  • バックテスト機能を使って、サインツールの性能を検証する