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活用のポイントです。

