investment

[第3回]ボリンジャーバンドの逆張りを用いた手法

今回はボリンジャーバンドの逆張りを用いた手法を紹介したいと思います。

ついに、omurinはMT5デビューしましたので今後は皆さんにより正確な情報が届けられると思っています。
しかし、残念なことにプログラミング言語もMQL4からMQL5に替わってしまったため、MT4を使用している人々には大変申し訳ないです。

ボリンジャーバンドも一般的に逆張りで用います。使い方はエンベロープとほとんど変わらないです。

エントリー・エグジットの条件

買いエントリーの条件

  • Low_Band>始値かつLow_Band<終値

売りエントリーの条件

  • High_Band<始値かつHigh_Band>終値

買いエントリーのエグジット

  • High_Band<終値

売りエントリーのエグジット

  • Low_Band>終値

最適なパラメータ設定

今回、使用したヒストリカルデータUSD/JPYの1時間足(2012-2019)の8年間です。前回のバックテストで使用したのは3年分なのでより信頼できるバックテストになっています。

2Dグラフ

初めての見るグラフだと思いますが、横軸がボリンジャーバンドの使用期間、縦軸がボリンジャーバンドのσの値を示しています。色が薄いほど利益がマイナス、色が濃いほど利益がプラスということを示しています。

3Dグラフ

BandsPeriodがボリンジャーバンドの期間、BandsDeviationがボリンジャーバンドのσを示しています。高い位置にあるほど利益がプラス、低い位置にあるほど利益がマイナスということを示しています。

これら二つのグラフからパラメーターを設定したいと思います。

  • ボリンジャーバンドのσの値を2
  • ボリンジャーバンドの期間を13

値の選び方としては選んだ値の近くの値もいい成績だったらそれで大丈夫です。

次に使用したプログラムを紹介したいと思います。

使用したプログラム

//本書ライブラリ
#include "LibEA.mqh"

sinput double Lots = 0.1; //売買ロット数
input ENUM_TIMEFRAMES TFbands =0;//ボリンジャーバンドのタイムフレーム
input int BandsPeriod = 13/ボリンジャーバンドの期間
input double BandsDeviation= 2//ボリンジャーバンドの偏差%

//ティック時実行関数
void Tick()
{
   
   int sig_entry = EntrySignal(); //仕掛けシグナル
   int sig_exit = ExitSignal();
   //成行売買
   MyOrderSendMarket(sig_entry, sig_exit, Lots);
   
}

//仕掛けシグナル関数
int EntrySignal()
{
   //ボリンジャーバンド
   double High_Band_1=iBands(_Symbol,TFbands,BandsPeriod,BandsDeviation,0,PRICE_CLOSE,MODE_HIGH,1);
   double Low_Band_1=iBands(_Symbol,TFbands,BandsPeriod,BandsDeviation,0,PRICE_CLOSE,MODE_LOW,1);
   //ローソク足
   double Close1 = iClose(_Symbol, TF, 1);
   double Open1 = iOpen(_Symbol, TF, 1);

   int ret = 0; //シグナルの初期化
   
   //買いエントリー
   if(Close1 > Low_Band_1&&Open1 < Low_Band_1)
      ret = 1;
   //売りエントリー
   if(Close1 < High_Band_1&&Open1 > High_Band_1)
      ret = -1;

   return ret; //シグナルの出力
}

//手仕舞いシグナル関数
int ExitSignal()
{
   //ボリンジャーバンド
   double High_Band_1=iBands(_Symbol,TFbands,BandsPeriod,BandsDeviation,0,PRICE_CLOSE,MODE_HIGH,1);
   double Low_Band_1=iBands(_Symbol,TFbands,BandsPeriod,BandsDeviation,0,PRICE_CLOSE,MODE_LOW,1);
   //ローソク足
   double Close1 = iClose(_Symbol, TF, 1);
   double Open1 = iOpen(_Symbol, TF, 1);

   int ret = 0; //シグナルの初期化

   //買いエントリーのエグジット
   if(Close1 > High_Band_1)
      ret = -1;
   //売りエントリーのエグジット
   if(Close1 < Low_Band_1)
      ret = 1;
   return ret; //シグナルの出力
}


結果

通貨ペア USD/JPY 1時間足
期間 2012.01.01~2019.12.31
ロット数 0.1(1万通貨)
初期証拠金 10000.00
純益 5591.25
プロフィットファクタ 1.67
総取引数 313
残高最大ドローダウン 1823.31(11.4%)
期待利得 17.86
勝率 53.67%
勝ちトレード(平均) 82.71
負けトレード(平均) -52.27

fxのブログを初めてまともに利益をあげることに成功しました。このプログラムなら本格的に導入してもよさそうです。特にプロフィットファクタが1.67であること、ドローダウンが11%リスクが少なく、非常に安定して利益を得ていることが分かります。1万通貨の取引を8年間続けると55万円の利益を生み出すことができます。

さらに利益を得ようとするなら、利食いのときの手仕舞いシグナル関数内のローソク足の時間足を1分足にするとさらに良くなると思います。