
MQL4MQL5 テクニカル指標
iBands()
- できること
- ボリンジャーバンドの値を取得する
- 対応
- MQL4・MQL5
iBands() とは
ボリンジャーバンド(移動平均線と、その上下に標準偏差の幅で引いた線)を計算する関数です。中心線・上のバンド・下のバンドのどれを取得するかを指定します。
iBands() の書式と引数
MQL4 の場合MT4
double iBands(
string symbol,
int timeframe,
int period,
double deviation,
int bands_shift,
int applied_price,
int mode,
int shift
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
timeframe | int | 必須 | 時間足。0 または PERIOD_CURRENT でチャートの時間足。 |
period | int | 必須 | 中心線(移動平均)の期間(よく使われるのは 20)。 |
deviation | double | 必須 | バンドの幅(標準偏差の何倍か。2 なら ±2σ)。 |
bands_shift | int | 必須 | 線を右にずらす本数。ふつうは 0。 |
applied_price | int | 必須 | 計算に使う価格。PRICE_CLOSE(終値)、PRICE_OPEN、PRICE_HIGH、PRICE_LOW、PRICE_MEDIAN((高値+安値)/2)、PRICE_TYPICAL など。MQL5 では、別のインジケーターのハンドルを渡して、そのインジケーターの値をもとに計算させることもできます(そのため型は int です)。 |
mode | int | 必須 | 取得する線。MODE_MAIN(中心線)、MODE_UPPER(上)、MODE_LOWER(下)。 |
shift | int | 必須 | 値を取得するバーの位置。0 が現在(未確定)のバー、1 がひとつ前の確定したバー。 |
戻り値(MQL4)
指定した線の値。
MQL5 の場合MT5
int iBands(
string symbol,
ENUM_TIMEFRAMES period,
int bands_period,
int bands_shift,
double deviation,
int applied_price
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
period | ENUM_TIMEFRAMES | 必須 | 時間足。PERIOD_CURRENT でチャートの時間足。 |
bands_period | int | 必須 | 中心線(移動平均)の期間(よく使われるのは 20)。 |
bands_shift | int | 必須 | 線を右にずらす本数。ふつうは 0。 |
deviation | double | 必須 | バンドの幅(標準偏差の何倍か。2 なら ±2σ)。 |
applied_price | int | 必須 | 計算に使う価格。PRICE_CLOSE(終値)、PRICE_OPEN、PRICE_HIGH、PRICE_LOW、PRICE_MEDIAN((高値+安値)/2)、PRICE_TYPICAL など。MQL5 では、別のインジケーターのハンドルを渡して、そのインジケーターの値をもとに計算させることもできます(そのため型は int です)。 |
戻り値(MQL5)
インジケーターのハンドル。CopyBuffer() のバッファ番号は 0 が中心線(BASE_LINE)、1 が上(UPPER_BAND)、2 が下(LOWER_BAND)です。
iBands() の使い方(コード例)
MQL4
double upper = iBands(_Symbol, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower = iBands(_Symbol, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, 1);
double c1 = iClose(_Symbol, 0, 1);
if(c1 > upper) Print("+2σ を上回って確定");
else if(c1 < lower) Print("-2σ を下回って確定");MQL5
int hBands = INVALID_HANDLE;
int OnInit()
{
hBands = iBands(_Symbol, PERIOD_CURRENT, 20, 0, 2.0, PRICE_CLOSE);
return hBands == INVALID_HANDLE ? INIT_FAILED : INIT_SUCCEEDED;
}
void OnTick()
{
double up[], lo[];
if(CopyBuffer(hBands, UPPER_BAND, 1, 1, up) < 1 || CopyBuffer(hBands, LOWER_BAND, 1, 1, lo) < 1)
return;
double c1 = iClose(_Symbol, PERIOD_CURRENT, 1);
if(c1 > up[0]) Print("+2σ を上回って確定");
else if(c1 < lo[0]) Print("-2σ を下回って確定");
}OnTick()・OnStart() などの関数の中に書いて使う例です。MetaEditor でコンパイルできることを確認済みです。
iBands() の注意点
- MQL5 では値ではなく「ハンドル」(インジケーターの番号)が返ります。ハンドルは OnInit() で1回だけ作り、OnTick() などで CopyBuffer() を使って値を読み出します。毎ティック作り直すと動作が重くなります。
- MQL4 と MQL5 で deviation と bands_shift の順番が逆です。移植するときは引数の順番に注意します。
MQL4 と MQL5 の違い
MQL4:iBands(銘柄, 時間足, 期間, 偏差, シフト, 価格, mode, shift)。MQL5:iBands(銘柄, 時間足, 期間, シフト, 偏差, 価格)。偏差とシフトの順番が入れ替わっているので注意します。












