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
- Panduan Lengkap MetaCOT 2 CFTC ToolBox untuk Analisis COT di MT4
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- Volume Profile + Range v6.0: Indikator Penting untuk MetaTrader 5
- Memprediksi Harga Selanjutnya dengan Jaringan Saraf: Panduan Lengkap untuk Trader
- Master Tools: Alat Indikator untuk MetaTrader 4 yang Harus Dimiliki