iGatorは、Bill Williamsが考案したGatorオシレーターの値を、
MQL4で直接取得できる組み込み関数です。
既刊のテクニカルインジケーター関数一覧記事で名前だけは触れていましたが、
このサイトではまだiGator単独の解説記事がありませんでした。
この記事では、iGatorの引数と戻り値を整理したうえで、アリゲーターの「口」
が閉じた状態から開き始めた瞬間を検知する、実際に動くインジケーターの作り方を解説します。
・iGatorの12個の引数と戻り値の意味
・既刊アリゲーター系2記事との表示形態の違い
・口が閉じた状態から開き始めた瞬間の検知方法
・実際に動くコード全体
設計思想: アリゲーターの「開閉」を数値化する
まず、Gatorが既刊のアリゲーター系記事と何が違うのかを整理します。
既刊iAlligator・既刊alligator-alignment-indicatorとの表示形態の違い
既刊iAlligator記事は、
顎・歯・唇の3本線をそのままチャート上に表示する方法を解説しました。
既刊alligator-alignment-indicator記事は、
その3本線の並び順(唇>歯>顎等)を判定する方法を解説しました。
Gatorは、その3本線の「間隔」そのものをヒストグラムとして数値化します。
| 記事 | 表示する情報 | 向いている使い方 |
|---|---|---|
| iAlligator(既刊) | 顎・歯・唇の3本線そのもの | 線の位置関係を目で確認する |
| alligator-alignment-indicator(既刊) | 3本線の並び順の判定結果 | トレンドが整った瞬間を判定する |
| iGator(本記事) | 線同士の間隔(開閉度) | アリゲーターが「寝ている」か「起きた」かを判定する |
3本線の並び順ではなく、
線と線の距離がどれだけ開いているかに注目するのが、
Gatorの特徴です。
上下2つのヒストグラムが示す意味
上ヒストグラムは「顎と歯の間隔」、下ヒストグラムは「歯と唇の間隔」をそれぞれ表します。
・両方のヒストグラムが小さい(間隔が狭い):アリゲーターが寝ている=レンジ相場
・両方のヒストグラムが大きくなっていく(間隔が広がる):口が開き始めた=トレンドの始まり
・色の変化(拡大中か縮小中か)も合わせて見ると、口の開閉の勢いが分かる
3本線が絡み合っている状態ほどヒストグラムは小さくなり、
3本線が大きく離れるほどヒストグラムは大きくなります。
iGator関数の引数と戻り値
公式リファレンス(MQL4 Reference: iGator)の内容を整理します。
12個の引数の意味
double iGator( string symbol, // 通貨ペア名(NULLで現在のチャート) int timeframe, // 時間足(0で現在の時間足) int jaw_period, // 顎(Jaw)の期間 int jaw_shift, // 顎のシフト int teeth_period, // 歯(Teeth)の期間 int teeth_shift, // 歯のシフト int lips_period, // 唇(Lips)の期間 int lips_shift, // 唇のシフト int ma_method, // 移動平均の計算方法(MODE_SMMA等) int applied_price, // 適用価格(PRICE_MEDIAN等) int mode, // MODE_UPPER(上ヒストグラム)/MODE_LOWER(下ヒストグラム) int shift // 何本前のバーの値を取得するか );
既刊iAlligator記事と同じ顎・歯・唇のパラメーターに加え、
modeとshiftが追加された12引数という、
本サイトで扱った関数の中でも引数の多い関数です。
MQL5版との違い: ハンドル化と引数構成の変化
MQL4のiGatorは、値をdoubleで直接返します。
一方、MQL5のiGator(MQL5 Reference: iGator)は、
値ではなくインジケーターのハンドル(int)を返します。
・MQL5版はハンドルを返すだけで、値そのものは返さない
・mode/shift引数が廃止され、バッファ番号(0=上、2=下)で指定する
・実際の値はCopyBuffer()で別途取得する必要がある
既刊のMQL4→MQL5移行チェックリストで扱った、
「mode引数がバッファインデックスに変わる」パターンの、
本サイトで最も引数の多い実例です。
サンプルインジケーター: 口が開き始めた瞬間を検知する設計
上下ヒストグラムの値を取得し、両方が同時に広がり始めた瞬間だけ矢印で知らせます。
上下ヒストグラムの値を取得する
double upper = iGator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_UPPER, i); double lower = iGator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_LOWER, i);
MODE_UPPERとMODE_LOWERをそれぞれ別の呼び出しで取得する点が、
既刊iEnvelopes記事の取得方法と共通しています。
「寝ている」から「起きた」への転換判定ロジック
直近N本の上下ヒストグラムの絶対値の合計が小さい状態(寝ている)から、
現在の合計が明確に大きくなった(起きた)瞬間だけを検知します。
・直近5本の上下ヒストグラム合計の平均を「寝ている基準値」とする
・現在の合計がその基準値の1.5倍を超えたら「起きた」と判定
・倍率(1.5倍)は目安であり、通貨ペアや時間足に応じて調整することをおすすめする
倍率による判定のため、相場環境によって検知の感度が変わる点は留意してください。
実際に動くコード全体
実際にMetaEditorでコンパイルできる、Gatorの上下ヒストグラムと「起きた」
矢印を表示するインジケーターです。
//+------------------------------------------------------------------+
//| GatorWakeupIndicator.mq4 |
//| Copyright 2026, FX-EA System Project Creator |
//| https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, FX-EA System Project Creator"
#property link "https://creator.fx-ea-system-project.com/"
#property version "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Yellow
#property indicator_width3 2
input int InpJawPeriod = 13;
input int InpJawShift = 8;
input int InpTeethPeriod = 8;
input int InpTeethShift = 5;
input int InpLipsPeriod = 5;
input int InpLipsShift = 3;
input double InpWakeupRatio = 1.5; //寝ている基準値に対する倍率
double UpperBuffer[];
double LowerBuffer[];
double WakeupArrow[];
int OnInit()
{
SetIndexBuffer(0, UpperBuffer);
SetIndexStyle(0, DRAW_HISTOGRAM);
SetIndexBuffer(1, LowerBuffer);
SetIndexStyle(1, DRAW_HISTOGRAM);
SetIndexBuffer(2, WakeupArrow);
SetIndexStyle(2, DRAW_ARROW, EMPTY, 2);
SetIndexArrow(2, 217);
SetIndexEmptyValue(2, EMPTY_VALUE);
IndicatorShortName("Gator Wakeup Detector");
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 needed = InpJawPeriod + InpJawShift + 10;
if(rates_total < needed)
return(0);
int limit = (prev_calculated == 0) ? rates_total - needed : rates_total - prev_calculated + 1;
for(int i = limit; i >= 0; i--)
{
double upper = iGator(NULL, 0, InpJawPeriod, InpJawShift, InpTeethPeriod, InpTeethShift,
InpLipsPeriod, InpLipsShift, MODE_SMMA, PRICE_MEDIAN, MODE_UPPER, i);
double lower = iGator(NULL, 0, InpJawPeriod, InpJawShift, InpTeethPeriod, InpTeethShift,
InpLipsPeriod, InpLipsShift, MODE_SMMA, PRICE_MEDIAN, MODE_LOWER, i);
UpperBuffer[i] = upper;
LowerBuffer[i] = lower;
WakeupArrow[i] = EMPTY_VALUE;
if(i + 6 >= rates_total)
continue;
double sleepingSum = 0;
for(int k = i + 1; k <= i + 5; k++)
{
double u = iGator(NULL, 0, InpJawPeriod, InpJawShift, InpTeethPeriod, InpTeethShift,
InpLipsPeriod, InpLipsShift, MODE_SMMA, PRICE_MEDIAN, MODE_UPPER, k);
double l = iGator(NULL, 0, InpJawPeriod, InpJawShift, InpTeethPeriod, InpTeethShift,
InpLipsPeriod, InpLipsShift, MODE_SMMA, PRICE_MEDIAN, MODE_LOWER, k);
sleepingSum += MathAbs(u) + MathAbs(l);
}
double sleepingAvg = sleepingSum / 5.0;
double currentSum = MathAbs(upper) + MathAbs(lower);
if(sleepingAvg > 0 && currentSum > sleepingAvg * InpWakeupRatio)
WakeupArrow[i] = upper + 10 * Point;
}
return(rates_total);
}
MetaEditorでのコンパイル・実行手順
実際にMT4で動かすまでの手順です。
- MetaEditorで新規インジケーター「GatorWakeupIndicator」を作成し、上のコードを貼り付けてコンパイルする
- エラー・警告が0件であることを確認する
- サブウィンドウに上下2つのヒストグラムが表示されることを確認する
- 間隔が急に広がったバーに黄色い矢印が出ることを確認する
- InpWakeupRatioの値を大きく(例: 2.0)して矢印の頻度が減ることを確認する
よくあるエラーと注意点
実装でつまずきやすいポイントをまとめます。
modeを両方取得し忘れる
iGatorはiEnvelopesやiBandsと同じく、
MODE_UPPERとMODE_LOWERをそれぞれ、
別の呼び出しで取得する必要があります。
アリゲーターの3線と設定を揃えないと整合しない
既刊iAlligator記事のインジケーターと見比べる場合は、
jaw/teeth/lipsの期間・シフトを同じ値に揃えないと、
2つのインジケーターが示す内容がズレてしまいます。
MQL5移植時にバッファインデックスの対応を忘れる
前述のとおり、MQL5版はmode/shiftの代わりにバッファインデックスを使うため、
MQL4のMODE_UPPER/MODE_LOWERをそのまま渡すと、
コンパイルエラーになります。
既刊のアリゲーター系記事との使い分け
似た目的の記事が複数あるため、使い分けを整理します。
| 記事 | 表示する情報 | 向いている使い方 |
|---|---|---|
| 本記事(iGator) | 線同士の間隔(開閉度) | トレンドの始まり・レンジの継続を判定 |
| iAlligator記事(既刊) | 顎・歯・唇の3本線そのもの | 線の位置関係を目で確認 |
| alligator-alignment-indicator記事(既刊) | 3本線の並び順判定 | トレンドが整った瞬間を判定 |
よくある質問
iGatorについて、よくある疑問に回答します。
iGatorとiAlligator、どちらを使うべきですか?
目的によって使い分けます。
3本線の位置そのものを見たいならiAlligator、口の開閉という「間隔の変化」
を見たいならiGatorが向いています。
両方を併用し、片方で方向、片方で勢いを確認する使い方もできます。
このインジケーターをEAのフィルターに使えますか?
使えます。
「寝ている→起きた」の判定部分だけを関数化すれば、
既刊alligator-alignment-ea-mt4のような、
トレンドフォローEAのエントリーフィルターに組み込めます。
InpWakeupRatioはどれくらいの値が適切ですか?
通貨ペアや時間足によって適切な値は変わります。
まずは既定値の1.5から始め、
チャートを見ながら矢印の頻度が多すぎないか少なすぎないかを、
調整することをおすすめします。
【MQL4】iGator(ゲーターオシレーター)でアリゲーターの「口の開閉」を検知するインジケーターの作り方:まとめ
iGatorは、
既刊アリゲーター系2記事とは違い、
3本線の並び順ではなく線同士の間隔(開閉度)をヒストグラムで数値化する関数です。
「寝ている」状態から「起きた」瞬間を検知することで、
トレンドの始まりをいち早く捉える手がかりになります。
MQL5では戻り値がハンドルに変わり、
mode/shift引数がバッファインデックスに置き換わる点に注意してください。
コメント