1. iGator関数の概要と実務での活用法
iGator関数は、ビル・ウィリアムズ氏が考案した「ゲーター・オシレーター(Gator Oscillator)」の値を計算するためのMQL5組み込み関数です。このインジケーターは、同氏の代表作である「アリゲーター(Alligator)」をベースにしており、3本の移動平均線(顎、歯、唇)の乖離具合をヒストグラムで可視化したものです。
実務での活用法:
実務開発において、アリゲーター単体では「線の重なり」を目視で判断する必要がありますが、iGatorはそれを数値化してくれるため、相場のボラティリティの拡大(トレンドの発生)と収束(レンジ)をプログラムで判定する際に非常に重宝します。
具体的には、以下の4つのフェーズを識別するために使われます。
– 眠り(Sleeping): 上下のヒストグラムが共に小さく、レンジ状態。
– 目覚め(Awakening): ヒストグラムが拡大し始め、トレンドの予兆。
– 食事(Eating): トレンドが本格化している状態。
– 満腹(Sated): ヒストグラムが縮小し始め、トレンド終焉の兆し。
初心者がつまずきやすいポイントは、「これ単体ではトレンドの方向(上か下か)が分からない」という点です。iGatorはあくまで「勢い」を示す指標であるため、売買の方向を決定するには、ベースとなるアリゲーター本体や他のトレンド指標と組み合わせるのが定石です。
2. 構文と戻り値
iGator関数の構文は以下の通りです。
int iGator(
string symbol, // 通貨ペア名(NULLで現在のチャート)
ENUM_TIMEFRAMES period, // 時間軸(0で現在の時間軸)
int jaw_period, // 顎(Jaw)の期間(青線)
int jaw_shift, // 顎のシフト
int teeth_period, // 歯(Teeth)の期間(赤線)
int teeth_shift, // 歯のシフト
int lips_period, // 唇(Lips)の期間(緑線)
int lips_shift, // 唇のシフト
ENUM_MA_METHOD ma_method, // 平滑化メソッド(通常はMODE_SMMA)
ENUM_APPLIED_PRICE applied_price // 適用価格(通常はPRICE_MEDIAN)
);
戻り値:
成功すればインジケーターのハンドル(int型)を返します。失敗した場合は INVALID_HANDLE を返します。
バッファの構成:
取得できるデータ(CopyBufferで使用)は以下の2種類です。
– 0番バッファ(UPPER_LINE): 顎と歯の差の絶対値(ヒストグラムの上側)
– 1番バッファ(LOWER_LINE): 歯と唇の差の絶対値のマイナス値(ヒストグラムの下側)
3. 具体的な使い方・実践サンプルコード
以下は、iGatorの値を読み取り、現在の相場が「拡大中(トレンド)」か「収束中(レンジ)」かをログに出力するシンプルなEAのサンプルです。
//+------------------------------------------------------------------+
//| GatorSampleEA.mq5 |
//| Copyright 2024, Quant Engineer |
//+------------------------------------------------------------------+
#property strict
// 変数の宣言
int gator_handle; // ゲーター・オシレーターのハンドル
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// iGatorハンドルの作成(デフォルト設定:13-8, 8-5, 5-3)
gator_handle = iGator(_Symbol, _Period, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN);
// ハンドルの作成失敗チェック
if(gator_handle == INVALID_HANDLE)
{
Print("iGatorハンドルの作成に失敗しました。エラーコード:", GetLastError());
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// ハンドルの解放
IndicatorRelease(gator_handle);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double upper_buffer[]; // 上側ヒストグラム格納用
double lower_buffer[]; // 下側ヒストグラム格納用
// 配列を時系列(最新がインデックス0)にセット
ArraySetAsSeries(upper_buffer, true);
ArraySetAsSeries(lower_buffer, true);
// データのコピー(直近2本分)
if(CopyBuffer(gator_handle, 0, 0, 2, upper_buffer) < 0 ||
CopyBuffer(gator_handle, 1, 0, 2, lower_buffer) < 0)
{
Print("データのコピーに失敗しました。");
return;
}
// 値の取得(インデックス0が現在の足、1が1本前の足)
double current_upper = MathAbs(upper_buffer[0]);
double current_lower = MathAbs(lower_buffer[0]);
double prev_upper = MathAbs(upper_buffer[1]);
double prev_lower = MathAbs(lower_buffer[1]);
// ロジック例:上下のヒストグラムが共に前本より拡大していれば「食事(トレンド)」
if(current_upper > prev_upper && current_lower > prev_lower)
{
Comment("Gator: 食事中(強いトレンド発生の可能性)");
}
else if(current_upper < prev_upper && current_lower < prev_lower)
{
Comment("Gator: 満腹(トレンド収束・レンジ入りの兆し)");
}
}
4. 使用上の注意点とよくあるエラー
-
ハンドルの作成はOnInitで行う:
iGator関数をOnTickの中で毎回呼び出さないでください。呼び出すたびに新しいメモリ領域が確保され、PCやサーバーの動作が極端に重くなる「メモリリーク」の原因になります。 -
符号の扱いに注意:
iGatorの下側バッファ(1番)は負の値で返されます。視覚的な比較を行う際は、サンプルコードのようにMathAbs()で絶対値を取るか、負の値のまま比較するか、ロジックを統一させる必要があります。 -
平滑化メソッドの選択:
ビル・ウィリアムズの理論通りに動かすには、移動平均のメソッドに必ずMODE_SMMA(平滑移動平均)を指定してください。MODE_SMA(単純移動平均)などを使うと、標準のゲーター・オシレーターとは異なる動きになります。 -
計算に必要なバー数:
アリゲーター系指標は未来へシフトさせて表示するため、計算には十分な過去データ(バー)が必要です。バックテスト開始直後などに値が取得できない場合は、データ不足を疑ってください。
5. 【重要】自動売買における約定スピードと環境の罠
クオンツエンジニアの視点から断言しますが、EAの開発と同じくらい重要なのが「実行環境」です。自宅のPCや一般的な光回線で自動売買を行うことは、F1レースに市販の軽自動車で参戦するようなものです。FXのマーケットはミリ秒(0.001秒)単位の争いであり、自宅環境ではネットワークの物理的な距離に起因する「レイテンシ(遅延)」が致命的な損失を招きます。
特にトレンドの初動を捉えるiGatorのようなロジックでは、シグナルが出てから発注がサーバーに届くまでの数秒の遅れで、最適なエントリー価格を逃し、スリッページによって期待値が削り取られます。これを防ぎ、極限まで約定スピードを高めるには、証券会社のサーバーに物理的に近い場所に設置された「FX専用VPS」の利用が不可欠です。安定した24時間の稼働と、一瞬のチャンスを逃さない低レイテンシ環境を整えること。これが、システムトレーダーとして生き残るための最低条件と言えます。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント