【MQL4関数】iAlligator関数の使い方!アリゲーターでトレンド判定EAを作ろう

関数

iAlligator関数を使えば、アリゲーターインジケーターの3本のライン(顎・歯・唇)の値をMQL4プログラムから取得できます。アリゲーターはトレンドの有無と方向を視覚的に判断できるインジケーターで、EAのエントリーフィルターとして非常に人気があります。この記事では iAlligator の構文から実践的なEAサンプルまでPREP法で解説します。

iAlligator関数とは?なぜトレンド判定に使われるのか

アリゲーター(Alligator)はビル・ウィリアムズが考案したインジケーターです。移動平均線を時間軸でずらした3本のラインで構成されており、ラインが開くとトレンド発生、収束するとレンジ相場という状態を示します。

MQL4では iAlligator() 関数でこの3本のライン値をリアルタイムに取得できるため、「トレンドが発生しているときだけエントリーする」というフィルターロジックをEAに組み込めます。

ライン名 別名 設定(デフォルト)
Jaw(顎) 青ライン 13期間SMMA・8バーシフト
Teeth(歯) 赤ライン 8期間SMMA・5バーシフト
Lips(唇) 緑ライン 5期間SMMA・3バーシフト

iAlligator() の構文と引数

double iAlligator(
    string symbol,          // 通貨ペア(NULLで現在のチャート)
    int    timeframe,       // 時間足(0で現在の時間足)
    int    jaw_period,      // 顎の期間(デフォルト13)
    int    jaw_shift,       // 顎のシフト(デフォルト8)
    int    teeth_period,    // 歯の期間(デフォルト8)
    int    teeth_shift,     // 歯のシフト(デフォルト5)
    int    lips_period,     // 唇の期間(デフォルト5)
    int    lips_shift,      // 唇のシフト(デフォルト3)
    int    ma_method,       // 移動平均の種類(MODE_SMMA推奨)
    int    applied_price,   // 適用価格(PRICE_MEDIAN推奨)
    int    mode,            // 取得するライン
    int    shift            // 何本前のバーか(0=現在)
);

mode の値

定数 説明
MODE_GATORJAW 1 顎(Jaw)ラインの値
MODE_GATORTEETH 2 歯(Teeth)ラインの値
MODE_GATORLIPS 3 唇(Lips)ラインの値

基本的な使い方:3本のライン値を取得する

iAlligator関数でアリゲーターの各ラインを取得する最もシンプルなコードです。

// アリゲーターのデフォルト設定で3本のライン値を取得
double jaw   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW,   1);
double teeth = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
double lips  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS,  1);

Print("顎(Jaw): ",   jaw);
Print("歯(Teeth): ", teeth);
Print("唇(Lips): ",  lips);

実践例1:アリゲーターでトレンドフィルターを作る

アリゲーターの3本のラインの並び順でトレンドを判定します。唇 > 歯 > 顎なら上昇トレンド、顎 > 歯 > 唇なら下降トレンドと判断できます。

// トレンド判定関数
// 戻り値: 1=上昇トレンド / -1=下降トレンド / 0=レンジ(睡眠中)
int GetAlligatorTrend()
{
    double jaw   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW,   1);
    double teeth = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
    double lips  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS,  1);

    // 唇 > 歯 > 顎 → 上昇トレンド
    if(lips > teeth && teeth > jaw)
        return 1;

    // 顎 > 歯 > 唇 → 下降トレンド
    if(jaw > teeth && teeth > lips)
        return -1;

    // それ以外 → レンジ(アリゲーターが眠っている状態)
    return 0;
}

void OnTick()
{
    int trend = GetAlligatorTrend();
    if(trend == 1)
        Comment("アリゲーター: 上昇トレンド");
    else if(trend == -1)
        Comment("アリゲーター: 下降トレンド");
    else
        Comment("アリゲーター: レンジ(様子見)");
}

実践例2:アリゲーターをフィルターにしたEA

iAlligator関数のトレンド判定と iMA(移動平均)のゴールデンクロスを組み合わせた実践的なEAです。アリゲーターがトレンドを示しているときだけエントリーするため、ダマシを減らせます。

extern int    MagicNumber = 20001;
extern double Lots        = 0.1;
extern int    FastMA      = 5;
extern int    SlowMA      = 20;

void OnTick()
{
    // ラインが3本とも開いているか(絶対値で判定)
    double jaw   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW,   1);
    double teeth = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
    double lips  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS,  1);

    bool upTrend   = (lips > teeth && teeth > jaw);
    bool downTrend = (jaw  > teeth && teeth > lips);

    // MAクロス判定
    double fastMA_cur  = iMA(NULL, 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 1);
    double fastMA_prev = iMA(NULL, 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 2);
    double slowMA_cur  = iMA(NULL, 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 1);
    double slowMA_prev = iMA(NULL, 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 2);

    bool goldenCross = (fastMA_prev < slowMA_prev && fastMA_cur > slowMA_cur);
    bool deadCross   = (fastMA_prev > slowMA_prev && fastMA_cur < slowMA_cur);

    if(OrdersTotal() > 0) return;

    // アリゲーターが上昇トレンド + ゴールデンクロス → 買い
    if(upTrend && goldenCross)
    {
        OrderSend(Symbol(), OP_BUY, Lots, Ask, 20, 0, 0,
                  "Alligator+MA", MagicNumber, 0, clrBlue);
    }

    // アリゲーターが下降トレンド + デッドクロス → 売り
    if(downTrend && deadCross)
    {
        OrderSend(Symbol(), OP_SELL, Lots, Bid, 20, 0, 0,
                  "Alligator+MA", MagicNumber, 0, clrRed);
    }
}

iAlligator使用時の注意点

  • シフトに注意:アリゲーターは各ラインが未来方向にシフトされるため、チャート上の表示位置とバーインデックスがずれます。shift=1(1本前)を使って確定済みのバーを参照するのが基本です。
  • レンジ相場では使わない:3本のラインが絡み合っている(アリゲーターが眠っている)状態でのエントリーはダマシが増えます。必ず上記のトレンド判定と組み合わせてください。
  • applied_price はPRICE_MEDIAN:ビル・ウィリアムズのオリジナル設定は中値((High+Low)/2)です。PRICE_CLOSEで計算するとチャートの表示と一致しないことがあります。

まとめ

iAlligator関数は、アリゲーターインジケーターの顎・歯・唇の3本のライン値をMQL4から直接取得できる関数です。ラインの並び順を見るだけでトレンドの有無・方向を判定できるため、EA開発のフィルターとして非常に使いやすいのが特徴です。

レンジ相場(アリゲーターが眠っている状態)ではエントリーを避け、トレンドが明確に出たときだけ他のシグナルと組み合わせるのがiAlligator活用のポイントです。