Fibonacci-Ebenen in MQL4

 
Ich habe eine Frage - ist es möglich, bei der Erstellung eines Fibonacci-Levels-Objekts jedem Level eine andere Farbe zu geben, und wie kann ich jedem Level einen Signalwert für einen EA zuweisen? Vielen Dank im Voraus! Mit freundlichen Grüßen, Eugene!
 
ist es besser, ihre Werte direkt im EA zu berechnen
 

Kann die Funktion auf diese Weise vorgeschrieben werden? Aber die Farbe ändert sich nicht auf den einzelnen Ebenen kann es irgendwo einen Fehler geben oder sollte etwas anderes hinzugefügt werden???

int fibo(datetime X1, double Y1, datetime X2, double Y2)

{

ObjectCreate("Fibo", OBJ_FIBO, 0, 0, 0, 0); // Objekt der Fibonacci-Stufen erstellen

ObjectSet("Fibo",OBJPROP_COLOR,clrRed); // Farbe der Diagonale

//ObjectSet("Fibo",OBJPROP_LEVELCOLOR,clrBlue); //die Farbe der Ebenen ist die gleiche

//ObjectSetInteger(0, "Fibo",OBJPROP_BACK,true);//--- Anzeige im Vordergrund (false) oder im Hintergrund (true)


ObjectSet("Fibo",OBJPROP_FIBOLEVELS,13); //die Anzahl der Objektebenen festlegen


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+0,0.000);//den Wert jeder Objektstufe einstellen

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,0,0.000);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,0,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,0,STYLE_SOLID);//Linie

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,0,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",0, "0.000");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+1,0.146);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,1,0.146);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,1,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,1,STYLE_SOLID);//Zeile

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,1,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",1, "0.146");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+2,0.236);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,2,0.236);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,2,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,2,STYLE_SOLID);//Zeile

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,2,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",2, "0.236");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+3,0.382);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,3,0.382);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,3,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,3,STYLE_SOLID);//Linie

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,3,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",3, "0.382");



ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+4,0.5);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,4,0.5);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,4,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,4,STYLE_SOLID);//Linie

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,4,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",4, "0.5");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+5,0.618);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,5,0.618);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,5,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,5,STYLE_SOLID);//Linie

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,5,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",5, "0.618");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+6,0.764);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,6,0.764);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,6,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,6,STYLE_SOLID);//Linie

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,6,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",6, "0.764");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+7,1);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,7,1);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,7,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,7,STYLE_SOLID);//Zeile

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,7,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",7, "1");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+8,1.236);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,8,1.236);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,8,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,8,STYLE_SOLID);//Zeile

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,8,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",8, "1.236");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+9,1.618);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,9,1.618);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,9,clrGreen); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,9,STYLE_SOLID);//Zeile

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,9,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",9, "1.618");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+10,-0.236);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,10,-0.236);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,10,clrBlue); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,10,STYLE_SOLID);//Linie

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,10,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",10,"-0.236");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+11,-0.618);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,11,-0.618);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,11,clrBlue); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,11,STYLE_SOLID);//Zeile

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,11,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",11,"-0.618");


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+12,-1);

ObjectSetDouble(0, "Fibo",OBJPROP_LEVELVALUE,12,-1);

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,12,clrBlue); // Farbe der Ebene

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,12,STYLE_SOLID);//Zeile

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,12,1); //--- Ebenendicke

ObjectSetFiboDescription("Fibo",12,"-1");


ObjectMove("Fibo", 1, X1, Y1);

ObjectMove("Fibo",0, X2, Y2);

zurück(0);

}


 
int fFiboLevels(string Prefix,int Number
              ,int Bar1,double Price1
              ,int Bar2,double Price2
              ,int Bar3,double Price3
              ,color Цвет,color ЦветОтката
              ,int Видимость=0,int Толщина=1
              ,int УровнейПродолжения=6,int УровнейОтката=5
              ,int Стиль=STYLE_SOLID,int СтильУровня=STYLE_DOT
              ,bool Луч=false,bool Фон=false){
   int Error;
   string Name;
   datetime Time1=Time[Bar1],
            Time2=Time[Bar2],
            Time3=Time[Bar3];
   if( Bar1<=Bar2 || Bar2<=Bar3 || Bar3<1
    || Price1<Zero || Price2<Zero || Price3<Zero
    || Price3-MathMax(Price1,Price2)>Zero
    || MathMin(Price1,Price2)-Price3>Zero ) return(MyError);
   Name=Prefix+"Targets ";
   if( Number>0 ) Name=Name+Number;
   if( ObjectFind(Name)>=0 ) {
      if( !ObjectDelete(Name) ) {
         Error=GetLastError();
         PlaySound("alert.wav");
         Print("***** "+Name+" не создан, ошибка удаления "+Error);
         return(Error);
   }  }
   if( ObjectCreate(Name,OBJ_EXPANSION,0,Time1,Price1,Time2,Price2,Time3,Price3) ){
      if( !ObjectSet(Name, OBJPROP_FIBOLEVELS, УровнейПродолжения)
       || !ObjectSet(Name, OBJPROP_COLOR, Цвет)
       || !ObjectSet(Name, OBJPROP_STYLE, Стиль)
       || !ObjectSet(Name, OBJPROP_WIDTH, Толщина)
       || !ObjectSet(Name, OBJPROP_TIMEFRAMES, Видимость)
       || !ObjectSet(Name, OBJPROP_LEVELCOLOR, Цвет)
       || !ObjectSet(Name, OBJPROP_LEVELSTYLE, СтильУровня)
       || !ObjectSet(Name, OBJPROP_RAY, Луч)
       || !ObjectSet(Name, OBJPROP_BACK, Фон)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+0, 1)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+1, 1.618)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+2, 2.618)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+3, 4.236)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+4, 6.854)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+5, 11.09) ){
         Error=GetLastError();
         PlaySound("alert.wav");
         Print("****  "+Name+" - ошибка модификации параметров "+Error);
   }  }
   else {
      Error=GetLastError();
      PlaySound("alert.wav");
      Print("***** "+Name+" не создан, ошибка "+Error);
   }
   Name=Prefix+"Recoils ";
   if( Number>0 ) Name=Name+Number;
   if( ObjectFind(Name)>=0 ) {
      if( !ObjectDelete(Name) ) {
         Error=GetLastError();
         PlaySound("alert.wav");
         Print("***** "+Name+" не создан, ошибка удаления "+Error);
         return(Error);
   }  }
   if( ObjectCreate(Name,OBJ_FIBO,0,Time1,Price1,Time2,Price2) ){
      if( !ObjectSet(Name, OBJPROP_FIBOLEVELS, УровнейОтката)
       || !ObjectSet(Name, OBJPROP_COLOR, Цвет)
       || !ObjectSet(Name, OBJPROP_STYLE, Стиль)
       || !ObjectSet(Name, OBJPROP_TIMEFRAMES, Видимость)
       || !ObjectSet(Name, OBJPROP_LEVELCOLOR, ЦветОтката)
       || !ObjectSet(Name, OBJPROP_LEVELSTYLE, СтильУровня)
       || !ObjectSet(Name, OBJPROP_RAY, false)
       || !ObjectSet(Name, OBJPROP_BACK, Фон)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+0, 0)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+1, 0.236)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+2, 0.382)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+3, 0.618)
       || !ObjectSet(Name, OBJPROP_FIRSTLEVEL+4, 1) ){
         Error=GetLastError();
         PlaySound("alert.wav");
         Print("****  "+Name+" - ошибка модификации параметров "+Error);
   }  }
   else {
      Error=GetLastError();
      PlaySound("alert.wav");
      Print("***** "+Name+" не создан, ошибка "+Error);
   }
   return(Error);
}
 
jekk:

Kann die Funktion auf diese Weise vorgeschrieben werden? Aber die Farbe ändert sich nicht auf den einzelnen Ebenen kann es irgendwo einen Fehler geben oder gibt es noch etwas hinzuzufügen???

Sind Sie auf der Suche nach einem Indikator oder einem Expert Advisor? Wenn Sie es für einen Expert Advisor verwenden, genügt es, die Werte dieser Ebenen zu berechnen.

 
Für den EA - Ich möchte verstehen, welche Funktion verwendet werden kann, um jede Ebene zu trennen, um einen Signalwert zuweisen? Die Idee für ZigZag ist es, Koordinaten zu finden - der EA zeichnet Fibonacci-Levels und von jedem Level (in einem Abstand, der etwas länger als der Spread ist) gehen wir zurück und schreiben weitere parallele Levels vor - wir nehmen sie als Entscheidungsgrundlage für die Eröffnung eines Auftrags.
 
jekk:
Für den EA - Ich möchte verstehen, welche Funktion verwendet werden kann, um jede Ebene zu trennen, um einen Signalwert zuweisen? Meine Idee für ZigZag ist es, Koordinaten zu finden - der Expert Advisor zeichnet Fibonacci-Levels und von jedem Level (in einem Abstand, der etwas länger als der Spread ist) gehen wir zurück und setzen parallele Levels - wir nehmen sie als Grundlage für Entscheidungen, den Auftrag zu eröffnen.

Bei OBJ_FIBO ist die Farbe für alle Ebenen gleich. Wenn Sie wirklich verzweifelt sind, zeichnen Sie einfach OBJ_TRENDLINE in verschiedenen Farben.
 
jekk:
Für den EA - Ich möchte verstehen, welche Funktion verwendet werden kann, um jede Ebene zu trennen, um einen Signalwert zuweisen? Meine Idee für ZigZag ist es, Koordinaten zu finden - der EA zeichnet Fibonacci-Levels und von jedem Level (in einem Abstand, der etwas länger als der Spread ist) gehen wir zurück und setzen parallele Levels - wir nehmen sie als Basis für Entscheidungen über die Eröffnung eines Auftrags.

Sie brauchen nichts zu trennen, nehmen Sie einfach die Formel und berechnen Sie jede Ebene direkt im EA, arbeiten Sie mit den erhaltenen Werten, warum brauchen Sie überhaupt Farben und Linien?
 
evillive:

Suchen Sie nach einem Indikator oder nach einem EA? Für einen EA reicht es aus, die Werte dieser Ebenen zu berechnen, man braucht keine hübschen Farben.

Der visuelle Teil sollte immer vorhanden sein, um verständlich zu sein (zumindest am Anfang)
 
evillive:

Sie brauchen nichts zu trennen, Sie nehmen die Formel und berechnen jede Ebene direkt im EA, arbeiten mit den erhaltenen Werten, warum brauchen Sie überhaupt Farbe und Linien?

Oh, wie sieht die Formel aus, kann ich Ihnen ein Beispiel zeigen?
 
jekk:

Wie sieht die Formel aus? Kann ich Ihnen ein Beispiel zeigen?

Nun, man kann es kaum als Formel bezeichnen: Wir nehmen den Mindest- und den Höchstpreis - 0 % und 100 % - und teilen sie durch die Niveaus, und ihre Werte sind überall angegeben - 23,6 %, 38,2 %, 50 %, 61,8 %, 161,8 % (oder 0,236, 0,382, 0,5, 0,618, 1,618 usw. durch 0,618, gerundet auf 3 Stellen).

für Preise von 1,3254 und 1,3896 etwa so:

direktumkehren
161,80% Niveau: 1.42930,0% Niveau:1.3896
100,0% Niveau: 1.389623,60% Niveau:1.3744
61,8% Niveau: 1.365138,2% Niveau:1.3651
50,0% Niveau: 1.357550,0% Niveau:1.3575
38,2% Niveau: 1.349961,8% Niveau:1.3499
23,6% Niveau:
1.3406100,0% Niveau:1.3254
0,0% Niveau: 1.3254161,8% Niveau: 1.2857


Das heißt, (Preis(100%)-Preis(0%))*Level(in Tausend) + Preis(0%) für die Terminberechnung und Preis(100%) - (Preis(100%)-Preis(0%)) * Niveau (in Tausend) - für die umgekehrte Berechnung.

Für jeden Wert kann eine eigene Linie mit einer beliebigen Farbe aus der Palette Ihrer Wahl gezeichnet werden.