💨
MQL5でボリンジャーバンドを使う方法
int iBands(
string symbol, // 銘柄名
ENUM_TIMEFRAMES period, // 期間
int bands_period, // 平均線の計算の期間
int bands_shift, // 指標の水平シフト
double deviation, // 標準偏差の数
ENUM_APPLIED_PRICE applied_price // 価格の種類かハンドル
);
パラメータ
symbol
[in] データが指標計算に使用される有価証券の銘柄名(NULL は現在のシンボル)
period
[in] 期間の値は ENUM_TIMEFRAMES 列挙の値の 1 つで、0 は現在の時間軸の意味です。
bands_period
[in] 指標の正中線の平均期間
bands_shift
[in] 価格チャートに相対した指標のシフト
偏差
[in] 正中線からの逸脱
applied_price
[in] 使用される価格。ENUM_APPLIED_PRICE 価格定数のいずれか、または別の指標ハンドル。
戻り値
指定されたテクニカル指標ハンドル。失敗の場合 INVALID_HANDLE。IndicatorRelease() 関数に指標ハンドルを渡すことによって 、コンピュータメモリを利用されていない指標から解放することが出来ます。
注意事項
バッファ番号は 0 - BASE_LINE、1 - UPPER_BAND、2 - LOWER_BAND です。
1.ハンドルを取得する
ボリンジャーバンド指標のハンドルを取得するためには、iBands関数を使います。この関数は指標のハンドルを返すので、このハンドルを使用して指標の値を取得することができます。
以下は、ボリンジャーバンド指標のハンドルを取得する方法の例です。
int handle;
// ボリンジャーバンド指標のハンドルを取得
handle = iBands(_Symbol, PERIOD_H1, 20, 0, 2.0, PRICE_CLOSE);
2.指標の値を取得する
ハンドルを使用して、CopyBuffer関数を使ってボリンジャーバンドの各ラインの値を取得できます。
以下は、ボリンジャーバンドの各ラインの最新の値を取得する例です。
double upperBand[];
double lowerBand[];
double baseLine[];
// バッファをコピーして各ラインの値を取得
CopyBuffer(handle, 0, 0, 1, baseLine); // 基本線
CopyBuffer(handle, 1, 0, 1, upperBand); // 上バンド
CopyBuffer(handle, 2, 0, 1, lowerBand); // 下バンド
Print("Base Line: ", baseLine[0]);
Print("Upper Band: ", upperBand[0]);
Print("Lower Band: ", lowerBand[0]);
これにより、ボリンジャーバンド指標の各ラインの最新の値が得られます。
ボリンジャーバンドの価格を取得する関数
// ボリンジャーバンドの値を取得する関数
double getBollingerBand(int mode, int shift)
{
static int handle = -1; // ボリンジャーバンドのハンドル(静的ローカル変数)
static ENUM_TIMEFRAMES last_timeframe = PERIOD_CURRENT; // 前回の時間軸(静的ローカル変数)
// 現在のチャートの時間軸が前回の時間軸と異なる場合、ハンドルをリセット
if(last_timeframe != _Period)
{
last_timeframe = _Period; // 現在の時間軸を記録
handle = -1; // ハンドルをリセット
}
// ボリンジャーバンド指標のハンドルを取得
if(handle == -1)
{
handle = iBands(_Symbol, last_timeframe, 20, 0, 2.0, PRICE_CLOSE);
}
double bandValue[1]; // バンドの値を格納する配列
// バッファをコピーしてラインの値を取得
CopyBuffer(handle, mode, shift, 1, bandValue);
return bandValue[0]; // 指定されたバンドの値を返す
}
使い方
void OnTick()
{
double base = getBollingerBand(0,0); // 基本線の最新の値を取得
double upper = getBollingerBand(1,0); // 上バンドの最新の値を取得
double lower = getBollingerBand(2,0); // 下バンドの最新の値を取得
Print("Base Line: ", base);
Print("Upper Band: ", upper);
Print("Lower Band: ", lower);
}
Discussion