Beranda Indikator Teknis Postingan

FE Fibo Expansion: Indikator Canggih untuk MetaTrader 4

Lampiran
31891.zip (1.76 KB, Unduh 0 kali)

Halo, trader-trader hebat!

Kali ini kita akan membahas tentang FE Fibo Expansion, sebuah indikator yang saya buat menggunakan dua objek (P[2]) dalam array untuk merepresentasikan sifat dari setiap arah, baik itu UP atau DOWN.

Berikut adalah tampilan kelasnya:

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];

Untuk setiap arah, kita memerlukan tiga harga: A, B, dan C, yang masing-masing adalah harga tertinggi, terendah, dan harga di antara keduanya. Sementara itu, aa, bb, dan cc adalah lokasi bar untuk masing-masing harga A, B, dan C tersebut.

Saya menggunakan formula fractal dan sedikit modifikasi untuk menentukan tiga titik, yaitu upper, lower, dan harga di antara keduanya beserta arahnya.

Saya menggunakan loop dari lokasi bar terbaru:

//---
   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
      //
      //---
      //---
      //---

Jika ditemukan tiga titik baik untuk arah UP atau DOWN, loop akan terhenti.

Saya harus mengambil ketiga titik yang telah ditentukan sebelumnya.

   if(P[0].A!=0.0&&P[0].B!=0.0&&P[00.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);
     }

Dan akhirnya menggambar menggunakan objek OBJ_EXPANSION dengan fungsi tunggal DrawExpansion(...).

Di sini, saya menggunakan:

0.618,

1.000,

1.618,

2.618, dan

4.236 level.


Postingan terkait

Komentar (0)