Hallo liebe Trader,
Heute möchte ich euch den FE Fibo Expansion Indikator vorstellen, den ich mit zwei Objekten in einem Array erstellt habe, um die Eigenschaften für jede Richtung, also nach oben oder nach unten, darzustellen.
Hier ein Beispiel, wie die Klasse aussieht:
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];
Für jede Richtung müssen also drei Preise A, B und C definiert werden, wobei A der obere Preis, C der untere Preis und B der Preis zwischen A und C ist.
Die Variablen aa, bb und cc repräsentieren die Bar-Positionen der jeweiligen Preise A, B und C.
Um die drei Punkte für die obere, untere und mittlere Preisrichtung zu bestimmen, habe ich die Fraktalformel verwendet und sie etwas modifiziert.
Hier ein Beispiel für eine Schleife, die von der letzten Bar-Position ausgeht:
//---
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; // Modifizierung von B[1] bevor A[1] existiert
P[1].bb=i+2;
}
if(n==1)
{
if(P[1].C<hi)
{
P[1].B=hi; // B[1] nach unten
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; // Initialisierung von C[0] nach oben
P[0].cc=i+2;
m++;
}
}
else
{
if(m==2)
{
if(P[0].C<hi)
{
P[0].A=hi; // A[0] nach oben
P[0].aa=i+2;
m=0;
stop=true;
}
}
if(m==1)
{
if(P[0].C<hi)
{
P[0].C=hi; // Modifizierung von C[0] bevor B[0] existiert
P[0].cc=i+2;
}
}
}
//---
}
//else
if(lo!=0.0)// ------------down------------
{
if(P[0].C!=0.0)
{
if(m==2)
{
if(P[0].B>lo&&P[0].C>P[0].B)
{
P[0].B=lo; // Modifizierung von B[0] bevor A[0] existiert
P[0].bb=i+2;
}
if(m==1)
{
if(P[0].C>lo)
{
P[0].B=lo; // B[0] nach oben
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; // Initialisierung von C[1] nach unten
P[1].cc=i+2;
n++;
}
}
else
{
if(n==2)
{
if(P[1].C>lo)
{
P[1].A=lo; // A[1] nach unten
P[1].aa=i+2;
n=0;
stop=true;
}
}
if(n==1)
{
if(P[1].C>lo)
{
P[1].C=lo; // Modifizierung von C[1] bevor B[1] existiert
P[1].cc=i+2;
}
}
}
}
//---
}
//else
//
//---
//---
//---
Wenn die Schleife drei Punkte für entweder die Aufwärts- oder Abwärtsrichtung gefunden hat, wird sie unterbrochen.
Nun müssen wir die drei Punkte abfragen:
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);
}
Am Ende wird das ganze mit dem OBJ_EXPANSION Objekt gezeichnet. Ich benutze dafür eine einzelne Funktion DrawExpansion(...).
Hier sind die verwendeten Fibonacci-Niveaus:
- 0.618
- 1.000
- 1.618
- 2.618
- 4.236
