ボリンジャーバンドは、移動平均線に対して、一定期間の終値の標準偏差を定数倍した分だけ上下にずらしてバンドのような形状にしたものです。終値の変動が大きくなると、バンドの幅が広くなります。
終値が下位ラインを下回り、売られすぎと判断されたときに買いシグナル、終値が上位ラインを上回り、買われすぎと判断されたときに売りシグナルを出します。
<aside> 💡 買いシグナル:2本前から1本前にかけて終値がボリンジャーバンドの下位ラインを上から下に交差したとき 売りシグナル:2本前から1本前にかけて終値がボリンジャーバンドの上位ラインを下から上に交差したとき
</aside>
//共通ライブラリ
#include "LibEA.mqh"
sinput double Lots = 0.1; //売買ロット数
//ティック時実行関数
void Tick()
{
int sig_entry = EntrySignal(); //仕掛けシグナル
//成行売買
MyOrderSendMarket(sig_entry, sig_entry, Lots);
}
input int BBPeriod = 10; //ボリンジャーバンドの期間
input double BBDev = 2.0; //標準偏差の倍率
//仕掛けシグナル関数
int EntrySignal()
{
//1本前と2本前のボリンジャーバンド
double BBUpper1 = iBands(_Symbol, 0, BBPeriod, BBDev, 0, PRICE_CLOSE, MODE_UPPER, 1);
double BBLower1 = iBands(_Symbol, 0, BBPeriod, BBDev, 0, PRICE_CLOSE, MODE_LOWER, 1);
double BBUpper2 = iBands(_Symbol, 0, BBPeriod, BBDev, 0, PRICE_CLOSE, MODE_UPPER, 2);
double BBLower2 = iBands(_Symbol, 0, BBPeriod, BBDev, 0, PRICE_CLOSE, MODE_LOWER, 2);
int ret = 0; //シグナルの初期化
//買いシグナル
if(Close[2] >= BBLower2 && Close[1] < BBLower1) ret = 1;
//売りシグナル
if(Close[2] <= BBUpper2 && Close[1] > BBUpper1) ret = -1;
return ret; //シグナルの出力
}
ボリンジャーバンドは、iBands()
というテクニカル指標関数で求められます。
移動平均、および標準偏差の期間として、別途宣言したBBPeriod
を引数period
に代入します。
標準偏差の倍率として、別途宣言したBBDev
を引数deviation
に代入します。
移動平均、および標準偏差を終値を対象として求める場合、applied_price
の引数にPRICE_CLOSE
を代入します。
mode
の引数には、上位ラインを求める場合、MODE_UPPER
を、下位ラインを求める場合、MODE_LOWER
をそれぞれ代入します。
2本前の終値Close[2]
と上位ラインBBUpper2
、下位ラインBBLower2
の大小関係、1本前の終値Close[1]
と上位ラインBBUpper1
、下位ラインBBLower1
の大小関係により、シグナルを判定します。