MQL4MQL5 テクニカル指標
iFractals()
- できること
- フラクタル(山・谷)の値を取得する
- 対応
- MQL4・MQL5
iFractals() とは
ビル・ウィリアムズのフラクタル(前後2本ずつより高い高値=上フラクタル、低い安値=下フラクタル)を取得する関数です。直近の山・谷を見つけて、損切りの位置やブレイクの基準に使えます。
iFractals() の書式と引数
MQL4 の場合MT4
double iFractals(string symbol, int timeframe, int mode, int shift)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
timeframe | int | 必須 | 時間足。0 または PERIOD_CURRENT でチャートの時間足。 |
mode | int | 必須 | MODE_UPPER(上フラクタル)または MODE_LOWER(下フラクタル)。 |
shift | int | 必須 | 値を取得するバーの位置。0 が現在(未確定)のバー、1 が確定したひとつ前のバー。 |
戻り値(MQL4)
フラクタルがある足ならその価格、ない足では 0。
MQL5 の場合MT5
int iFractals(string symbol, ENUM_TIMEFRAMES period)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
period | ENUM_TIMEFRAMES | 必須 | 時間足。PERIOD_CURRENT でチャートの時間足。 |
戻り値(MQL5)
インジケーターのハンドル。バッファ 0(UPPER_LINE)が上フラクタル、1(LOWER_LINE)が下フラクタルで、ない足は EMPTY_VALUE です。
iFractals() の使い方(コード例)
MQL4
// 直近の上フラクタル(山)を探す
for(int i = 3; i < 100; i++)
{
double up = iFractals(_Symbol, 0, MODE_UPPER, i);
if(up > 0)
{
Print("直近の山:", DoubleToString(up, _Digits), "(", i, "本前)");
break;
}
}MQL5
// 直近の上フラクタル(山)を探す
int h = iFractals(_Symbol, PERIOD_CURRENT);
double up[];
ArraySetAsSeries(up, true); // up[0] を最新の足にする
if(h != INVALID_HANDLE && CopyBuffer(h, UPPER_LINE, 0, 100, up) == 100)
{
for(int i = 3; i < 100; i++)
if(up[i] != EMPTY_VALUE && up[i] > 0)
{
Print("直近の山:", DoubleToString(up[i], _Digits), "(", i, "本前)");
break;
}
}
IndicatorRelease(h);OnTick()・OnStart() などの関数の中に書いて使う例です。MetaEditor でコンパイルできることを確認済みです。
iFractals() の注意点
- フラクタルは後ろの2本が確定して初めて決まるため、shift=0・1・2 の足にはまだ出ません。確定したフラクタルを探すときは shift=3 以降を調べます。
- MQL5 では値ではなく「ハンドル」が返ります。ハンドルは OnInit() で1回だけ作り、CopyBuffer() で値を読み出します。
MQL4 と MQL5 の違い
MQL4 はフラクタルのない足で 0、MQL5 は EMPTY_VALUE が入ります。












