Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Indicadores

FE Fibo Expansion - indicador para MetaTrader 4

Visualizações:
20617
Avaliação:
(18)
Publicado:
2020.11.11 02:45
Atualizado:
2020.12.16 22:01
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Hello to all traders..

This is FE fibo expansion that I create using 2 object(P[2]) in array that represent their properties for each direction UP or DOWN.

Here is a class look like:

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

Where for each direction they must have 3 prices A, B and C that is upper, lower and a price between upper and lower.
While, aa, bb, and cc are the bar locations for their respective prices A, B and C earlier.


Then, I used the fractal formula and a little modification to determine the 3 points upper, lower and price between them along with its directions.

I use loop from the recent bar location:

//---
   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;
      //---
      //---
      //--------------------------------------------------------------------------------------------------------------------
      //--------------------------------------------------------------------------------------------------------------------
      if(hi!=0.0)// ------------up------------
        {
         if(P[1].C!=0.0)
           {
            if(n==2)
              {
               if(P[1].B<hi&&P[1].C<P[1].B)
                 {
                  P[1].B=hi;   //this modify B[1] before A[1] exist
                  P[1].bb=i+2;
                 }
              }
            if(n==1)
              {
               if(P[1].C<hi)
                 {
                  P[1].B=hi;   //this B[1] dn
                  P[1].bb=i+2;
                  n++;
                 }
               else
                 {
                  n--;
                  P[1].C=0.0;
                 }
              }
           }
         //---
         if(P[0].C==0.0)
           {
            if(m<1)
              {
               P[0].C=hi;   //innitial C[0] up
               P[0].cc=i+2;
               m++;
              }
           }
         else
           {
            if(m==2)
              {
               if(P[0].C<hi)
                 {
                  P[0].A=hi;   //this A[0] up
                  P[0].aa=i+2;
                  m=0;
                  stop=true;
                 }
              }
            if(m==1)
              {
               if(P[0].C<hi)
                 {
                  P[0].C=hi;   //this modify C[0] before B[0] exist
                  P[0].cc=i+2;
                 }
              }
           }
        //---
        }
      //else
      if(lo!=0.0)// ------------dn------------
        {
         if(P[0].C!=0.0)
           {
            if(m==2)
              {
               if(P[0].B>lo&&P[0].C>P[0].B)
                 {
                  P[0].B=lo;   //this modify B[0]before A[0] exist
                  P[0].bb=i+2;
                 }
              }
            if(m==1)
              {
               if(P[0].C>lo)
                 {
                  P[0].B=lo;   //this B[0] up
                  P[0].bb=i+2;
                  m++;
                 }
               else
                 {
                  m--;
                  P[0].C=0.0;
                 }
              }
           }
         //---
         if(P[1].C==0.0)
           {
            if(n<1)
              {
               P[1].C=lo;   //innitial C[1] dn
               P[1].cc=i+2;
               n++;
              }
           }
         else
           {
            if(n==2)
              {
               if(P[1].C>lo)
                 {
                  P[1].A=lo;   //this A[1] dn
                  P[1].aa=i+2;
                  n=0;
                  stop=true;
                 }
              }
            if(n==1)
              {
               if(P[1].C>lo)
                 {
                  P[1].C=lo;   //this modify C[1] before B[1] exist
                  P[1].cc=i+2;
                 }
              }
           }
         //---
        }
      //else
      //
      //---
      //---
      //---


      if((P[0].C==0.0&&P[1].C==0.0)||(hi==0.0&&lo==0.0))
        {
         continue;
        }

     }// loop

If it found 3 points of either UP or DOWN direction, the loop breaks.

I have to take out the 3 points earlier.

   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);
     }
//---
   if(P[1].A!=0.0&&P[1].B!=0.0&&P[1].C!=0.0)
     {
      DrawExpansion(tool,"FE ->",Time[P[1].aa],P[1].A,Time[P[1].bb],P[1].B,Time[P[1].cc],P[1].C,1);
     }

And finally draw using OBJ_EXPANSION object..and I use a single function DrawExpansion(...).

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);
//---
   ObjectSetFiboDescription(name,0,label+"  "+DoubleToStr(0.618*100,1)+"  ");
   ObjectSetFiboDescription(name,1,label+"  "+DoubleToStr(1.000*100,1)+"  ");
   ObjectSetFiboDescription(name,2,label+"  "+DoubleToStr(1.618*100,1)+"  ");
   ObjectSetFiboDescription(name,3,label+"  "+DoubleToStr(2.618*100,1)+"  ");
   ObjectSetFiboDescription(name,4,label+"  "+DoubleToStr(4.236*100,1)+"  ");
//---
  }

Here, I use

0.618,

1.000,

1.618,

2.618 and

4.236 level.




Mission Impossible Power Two Open Version Mission Impossible Power Two Open Version

It only demonstrates the possibilities of the multiplier.

Strategy - Set And Forget (with Alerting system) - MT4 Strategy - Set And Forget (with Alerting system) - MT4

This strategy is the well known set & forget with the ALERTING system. It is very useful on different trading scenarios. I urge you guys to always use trading tools that will make your live easier. So instead of watching the charts and the time and all day long, you can use this indicator that will watch the charts for you.

CSV file creating example expert CSV file creating example expert

Example how to use file write function

Visual Trend Indicator Visual Trend Indicator

Visual multi-timeframe trend indicator.