NewNiceイメージ

ここでは、【MetaTraderでFX自動売買ブログ】さんの12月13日の記事で書かれている「メタボリック社長のNewNice戦法」のインジケーター(テクニカル分析)とストラテジー(売買ルール)について紹介します。

インジケーター

インジケーターは、Bollinger Bands – Fibonacci RatiosSchaff Trend Cycleを用意します。

Bollinger Bands – Fibonacci Ratios は自作のもので、Schaff Trend Cycle はWeb検索してダウンロードしたものです。パラメーターの初期値はメタボリック社長のNewNice戦法の値にしてあります。
上記2つのインジケーターが入っている【bbf_stc.zip】をダウンロード

ストラテジー

次はストラテジー(売買ルール)について解説します。

メタボリック社長のNewNice戦法の概要

ボラティリティ確認

バンドの一番外側のラインの幅でボラティリティを確認。
また、一度は一本目のラインを割る必要がある。

エントリータイミング

下にへばり付いていたシャフのラインが+5より上がった後、買い。
売りの場合は、その逆。

利食い幅・損切り幅

利食いは+5pips、損切りは-10pips。

EA化した際のルールの概要

ボラティリティ確認

バンドの一番外側のラインの幅が、「パラメーター変数 BandsHaba」よりも大きくてはならない。
過去「パラメータ変数 BandsHamidePeriod」分の間に一度は一本目のラインを割る。

エントリータイミング

「パラメータ変数 SchaffHebariPeriod」本前のバーから2本前のバーまでずっとSchaffの値が+1未満で、1本前のバーのSchaffの値が+5より大きい時買い。(売りの場合はその逆)

EAのコード説明

今回作成したEAファイルが入っている【MetaboNewNice.zip】をダウンロード

パラメーター

パラメーターを次のように設置しています。

//パラメータ用の変数
extern int StopLoss =10;
extern int TakeProfit = 5;
extern int Leverage =10;

extern double BandsHaba=20;

extern string setsumei="以下は2~10の範囲";
extern int BandsHamidePeriod=10;

extern int SchaffHebariPeriod=5;

start()関数内

次のように、外側のラインの値を取得します。

   //現在の外側のラインの値
   double BBFUper3 = iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",3,0);
   double BBFLower3 = iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",6,0);

次に、エントリーシグナル判定をします。

   //外側のラインの幅がBandsHabaより大きいとき
   if(BBFUper3-BBFLower3>BandsHaba*Point)
   {
      //過去10分のインジケーターの値取得
      double STC[11],BBFUper1[11],BBFLower1[11];   
      for (int i=1;i<=10;i++)
      {
         BBFUper1[i]=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",1,i);
         BBFLower1[i]=iCustom(NULL,0,"Bollinger Bands - Fibonacci Ratios",4,i);
         STC[i]=iCustom(NULL,0,"Schaff Trend Cycle",0,i);
      }
      
      int BBFcnt=0,STCcnt=0,sign=0;   
      
      //買い条件
      if(STC[2]<1 && STC[1]>5)
      {
         for(i=1;i<=BandsHamidePeriod;i++)
         {
            if(BBFLower1[i]>Close[i]) BBFcnt=BBFcnt+1;
         }
         for(i=2;i<=SchaffHebariPeriod;i++)
         {
            if(STC[i]<1) STCcnt=STCcnt+1;
         }
         if(BBFcnt>0 && STCcnt==SchaffHebariPeriod-1) sign=1;
      }
      //売り条件   
      if(STC[2]>99 && STC[1]<95)
      {
         for(i=1;i<=BandsHamidePeriod;i++)
         {
            if(BBFUper1[i]<Close[i]) BBFcnt=BBFcnt+1;
         }
         for(i=2;i<=SchaffHebariPeriod;i++)
         {
            if(STC[i]>99) STCcnt=STCcnt+1;
         }
         if(BBFcnt>0 && STCcnt==SchaffHebariPeriod-1) sign=-1;
      }
   }

シャフの値を配列STC、バンドの1本上のラインの値を配列BBFUper1、バンドの1本下のラインの値を配列BBFLower1に格納してシグナル判定に使用しています。

あとは、通常通りエントリー注文のコードを追加します。

あとがき

次回は、バンド幅が大きいときにははみ出し条件は無くても良いとか、その後の議論で出ていたトレンド方向のみのエントリーにするとか、精度を高めていきたいと思います!

こちらの記事は旧MQL4当時のもので、細かな説明等を削除省略しております。コメント頂ければ、新たな記事として作成いたしますので、お気軽にコメントお願い致します。