https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2d69975f-4308-409e-ab50-408bbe49f399/chart3.png

ボリンジャーバンドは、移動平均線に対して、一定期間の終値の標準偏差を定数倍した分だけ上下にずらしてバンドのような形状にしたものです。終値の変動が大きくなると、バンドの幅が広くなります。

終値が下位ラインを下回り、売られすぎと判断されたときに買いシグナル、終値が上位ラインを上回り、買われすぎと判断されたときに売りシグナルを出します。

仕掛けシグナル

<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()](<https://toyolab-fx.notion.site/iBands-4310e49ed18b449f83e1a997ca154d8f>)というテクニカル指標関数で求められます。

移動平均、および標準偏差の期間として、別途宣言したBBPeriodを引数periodに代入します。

標準偏差の倍率として、別途宣言したBBDevを引数deviationに代入します。

移動平均、および標準偏差を終値を対象として求める場合、applied_priceの引数にPRICE_CLOSEを代入します。

modeの引数には、上位ラインを求める場合、MODE_UPPERを、下位ラインを求める場合、MODE_LOWERをそれぞれ代入します。

2本前の終値Close[2]と上位ラインBBUpper2、下位ラインBBLower2の大小関係、1本前の終値Close[1]と上位ラインBBUpper1、下位ラインBBLower1の大小関係により、シグナルを判定します。