ホーム テクニカル指標 投稿

MetaTrader 4用FEフィボナッチ拡張インジケーターの使い方

添付ファイル
31891.zip (1.76 KB, ダウンロード 0回)

皆さん、こんにちは!今日はMetaTrader 4用に作成した「FEフィボナッチ拡張」インジケーターについてお話ししたいと思います。

このインジケーターは、2つのオブジェクト(P[2])を使って、各方向(上昇または下降)の特性を表現しています。

クラスの構造

class FEExpansion
  {
public:
   int aa, bb, cc;
   double A, B, C;
                     FEExpansion():
                     aa(0), bb(0), cc(0),
                     A(0.0), B(0.0), C(0.0)
     {}
                    ~FEExpansion() {}
  } P[2];

各方向には、上価格(A)、下価格(B)、その間の価格(C)が必要です。また、aa, bb, ccはそれぞれの価格のバー位置を示します。

次に、フラクタルの計算式を使って、3つのポイント(上・下・その間の価格)を決定し、その方向を決めるために少し修正しました。

ループ処理の実装

//---
   int i=0;
   int m=0, n=0;
   bool stop=false;
   double hi=0.0, lo=0.0;
//---
   A=0.0;
   B=0.0;
   C=0.0;
   for(m=0, n=0, i=0; i<Bars-5&&!stop; i++)
     {
      hi=(
            iHigh(_Symbol,0,i+2)>=iHigh(_Symbol,0,i+0) &&
            iHigh(_Symbol,0,i+2)>=iHigh(_Symbol,0,i+1) &&
            iHigh(_Symbol,0,i+2)>=iHigh(_Symbol,0,i+3) &&
            iHigh(_Symbol,0,i+2)>=iHigh(_Symbol,0,i+4))
         ?iHigh(_Symbol,0,i+2):0.0;
      lo=(
            iLow(_Symbol,0,i+2)<=iLow(_Symbol,0,i+0) &&
            iLow(_Symbol,0,i+2)<=iLow(_Symbol,0,i+1) &&
            iLow(_Symbol,0,i+2)<=iLow(_Symbol,0,i+3) &&
            iLow(_Symbol,0,i+2)<=iLow(_Symbol,0,i+4))
         ?iLow(_Symbol,0,i+2):0.0;

このようにして、上昇または下降方向の3つのポイントが見つかると、ループが終了します。

ポイントの描画

   if(P[0].A!=0.0&&P[0].B!=0.0&&P[0].C!=0.0)
     {
      DrawExpansion(tool,"FE ->",Time[P[0].aa],P[0].A,Time[P[0].bb],P[0].B,Time[P[0].cc],P[0].C,-1);
     }

最後に、OBJ_EXPANSIONオブジェクトを使用して描画します。

void DrawExpansion(string name,string label,datetime t1,double p1,datetime t2,double p2,datetime t3,double p3,int fl=0)
  {
//---
     ObjectDelete(name);
     color wrn=(fl>0)?clrSkyBlue:(fl<0)?clrTomato:clrWhite;
     if(ObjectFind(0,name)!=0)
        ObjectCreate(name,OBJ_EXPANSION,0,t1,p1,t2,p2,t3,p3);
     ObjectSet(name,OBJPROP_FIBOLEVELS,5);
     ObjectSet(name,OBJPROP_FIRSTLEVEL+0,0.618);
     ObjectSet(name,OBJPROP_FIRSTLEVEL+1,1.000);
     ObjectSet(name,OBJPROP_FIRSTLEVEL+2,1.618);
     ObjectSet(name,OBJPROP_FIRSTLEVEL+3,2.618);
     ObjectSet(name,OBJPROP_FIRSTLEVEL+4,4.236);
//---
     ObjectSet(name,OBJPROP_LEVELCOLOR,clrMediumPurple);
     ObjectSet(name,OBJPROP_LEVELWIDTH,1);
     ObjectSet(name,OBJPROP_LEVELSTYLE,0);
     ObjectSet(name,OBJPROP_COLOR,wrn);
//---
  }

ここで、0.618、1.000、1.618、2.618、4.236のレベルを使用しています。


関連記事

コメント (0)