ロジック内容
移動平均線がボリンジャーバンドを外から内側に入った確定タイミングを判断するオリジナル関数になります( ・Д・)
上バンドを下抜け シグナル=1。
下バンドを上抜け シグナル=-1。
どちらでもない シグナル=0。
オリジナル関数
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //ボリンジャーバンドクロス(逆) int BBCross2(){   int judge=0;   double MA1=iMA(_Symbol,0,MAPeriod,0,MAMethod,MAPrice,1);   double MA2=iMA(_Symbol,0,MAPeriod,0,MAMethod,MAPrice,2);   double BU1=iBands(_Symbol,0,BBPeriod,BBDeviation,0,BBPrice,MODE_UPPER,1);   double BU2=iBands(_Symbol,0,BBPeriod,BBDeviation,0,BBPrice,MODE_UPPER,2);   double BL1=iBands(_Symbol,0,BBPeriod,BBDeviation,0,BBPrice,MODE_LOWER,1);   double BL2=iBands(_Symbol,0,BBPeriod,BBDeviation,0,BBPrice,MODE_LOWER,2);   if(MA2>=BU2 && BU1>MA1)judge=1;   if(MA2<=BL2 && BL1<MA1)judge=-1;   return(judge); } | 
では解説して行きますね~( ・Д・)
必要なパラメーター設定
このオリジナル関数を使用する為に必要なパラメーターになります。
(MT4導入時のプロパティウインドウから変更出来る内容です)
| 1 2 3 4 5 6 7 8 | input string MA=""; //移動平均線 input int MAPeriod=1; //期間 input ENUM_MA_METHOD MAMethod=MODE_SMA; //方法 input ENUM_APPLIED_PRICE MAPrice=PRICE_CLOSE; //価格 input string BB=""; //ボリンジャーバンド input int BBPeriod=20; //期間 input int BBDeviation=2; //偏差 input ENUM_APPLIED_PRICE BBPrice=PRICE_CLOSE; //価格 | 
オリジナル関数の説明
まずint型で任意の関数名()で枠{ }を作成します。
| 1 2 3 4 5 | int BBCross2(){   //関数の内容 } | 
戻り値用の変数として、judge変数を宣言して0を代入してリセットします。
| 1 | int judge=0; | 
移動平均線の価格を入れる変数をdouble型でMA1とMA2で宣言します。
その変数の中に移動平均線を求めるiMA関数で計算された値を代入するようになります。
| 1 2 | double MA1=iMA(_Symbol,0,MAPeriod,0,MAMethod,MAPrice,1); double MA2=iMA(_Symbol,0,MAPeriod,0,MAMethod,MAPrice,2); | 
ボリンジャーバンドの価格を入れる変数もdouble型でBU1,2(上バンド)とBL1,2(下バンド)で宣言します。
その変数の中にボリンジャーバンドを求めるiBands関数で計算された値を代入するようになります。
| 1 2 3 4 | double BU1=iBands(_Symbol,0,BBPeriod,BBDeviation,0,BBPrice,MODE_UPPER,1); double BU2=iBands(_Symbol,0,BBPeriod,BBDeviation,0,BBPrice,MODE_UPPER,2); double BL1=iBands(_Symbol,0,BBPeriod,BBDeviation,0,BBPrice,MODE_LOWER,1); double BL2=iBands(_Symbol,0,BBPeriod,BBDeviation,0,BBPrice,MODE_LOWER,2); | 
クロスした確定タイミングが欲しいので、クロスする前と後を確認する為に1本前と2本前の値が必要になるので上下で合計4つの値が必要になります。
if文で「移動2本前>上バンド2本前 & 上バンド1本前>移動1本前」の条件を確認し、条件合致の場合judge変数に1を代入します。
| 1 | if(MA2>=BU2 && BU1>MA1)judge=1; | 
if文で「移動2本前<下バンド2本前 & 下バンド1本前<移動1本前」の条件を確認し、条件合致の場合judge変数に-1を代入します。
| 1 | if(MA2<=BL2 && BL1<MA1)judge=-1; | 
この関数の戻り値としてjudge変数の値を戻します。
| 1 | return(judge); | 
この戻り値の値を利用して、エントリー指示を出すかの判断に使います。
以上となります( ・Д・)

 
  
  
  
  

コメント