Niveaux de Fibonacci dans MQL4

 
Bonjour à tous ! J'ai une question - lors de la création d'un objet Niveaux Fibonacci, est-il possible de donner une couleur différente à chaque niveau, et comment puis-je attribuer une valeur de signal à une EA à chaque niveau ? Merci d'avance ! Sincèrement, Eugène !
 
il est préférable de calculer leurs valeurs directement dans l'EA
 

Est-ce ainsi que la fonction peut être prescrite ? Mais la couleur ne change pas aux niveaux individuels ; peut-il y avoir une erreur quelque part ou quelque chose d'autre doit être ajouté ? ???

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

{

ObjectCreate("Fibo", OBJ_FIBO, 0, 0, 0, 0) ; // Créer un objet de niveaux Fibonacci

ObjectSet("Fibo",OBJPROP_COLOR,clrRed) ; // couleur de la diagonale

//ObjectSet("Fibo",OBJPROP_LEVELCOLOR,clrBlue) ; //la couleur des niveaux est la même

//ObjectSetInteger(0, "Fibo",OBJPROP_BACK,true);//--- affichage en avant-plan (false) ou en arrière-plan (true)


ObjectSet("Fibo",OBJPROP_FIBOLEVELS,13) ; //réglage du nombre de niveaux de l'objet


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+0,0.000);//définir la valeur de chaque niveau d'objet

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,0,clrGreen) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,0,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,1,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,2,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,3,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,4,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,5,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,6,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,7,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,8,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,9,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,10,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,11,1) ; //--- épaisseur de niveau

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) ; // couleur de niveau

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,12,1) ; //--- épaisseur de niveau

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


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

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

retour(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:

Est-ce ainsi que la fonction peut être prescrite ? Mais la couleur ne change pas sur les niveaux individuels ; peut-il y avoir une erreur quelque part ou y a-t-il quelque chose d'autre à ajouter ? ???

Vous recherchez un indicateur ou un conseiller expert ? Si vous l'utilisez pour un conseiller expert, le calcul des valeurs de ces niveaux sera suffisant.

 
Pour l'EA - je veux comprendre quelle fonction peut être utilisée pour séparer chaque niveau afin d'attribuer une valeur de signal ? L'idée de ZigZag est de trouver des coordonnées - l'EA dessine des niveaux de Fibonacci et à partir de chaque niveau (à une distance légèrement plus longue que le spread) nous revenons en arrière, et prescrivons des niveaux plus parallèles - nous les prenons comme base de décision pour ouvrir un ordre.
 
jekk:
Pour l'EA - je veux comprendre quelle fonction peut être utilisée pour séparer chaque niveau afin d'attribuer une valeur de signal ? Mon idée pour ZigZag est de trouver des coordonnées - le conseiller expert trace des niveaux de Fibonacci et à partir de chaque niveau (à une distance un peu plus longue que le spread), nous prenons du recul et établissons des niveaux parallèles - nous les prenons comme base de décision pour ouvrir l'ordre.

Pour OBJ_FIBO, la couleur est la même pour tous les niveaux. Si vous êtes vraiment désespéré, dessinez une simple OBJ_TRENDLINE dans différentes couleurs.
 
jekk:
Pour l'EA - je veux comprendre quelle fonction peut être utilisée pour séparer chaque niveau afin d'attribuer une valeur de signal ? Mon idée pour ZigZag est de trouver des coordonnées - l'EA dessine des niveaux de Fibonacci et à partir de chaque niveau (à une distance un peu plus longue que le spread) nous revenons en arrière et établissons des niveaux parallèles - nous les prenons comme base pour prendre des décisions sur l'ouverture d'un ordre.

Vous n'avez pas besoin de séparer quoi que ce soit, prenez simplement la formule et calculez chaque niveau directement dans l'EA, travaillez avec les valeurs obtenues, pourquoi avez-vous besoin de couleurs et de lignes ?
 
evillive:

Cherchez-vous un indicateur ou un EA ? Si c'est pour un EA, le simple calcul des valeurs de ces niveaux est suffisant, vous n'avez pas besoin d'esthétique ou de couleur.

La partie visuelle doit toujours être présente pour rendre les choses claires (au moins au début).
 
evillive:

Vous n'avez pas besoin de séparer quoi que ce soit, vous prenez la formule et calculez chaque niveau directement dans l'EA, vous travaillez avec les valeurs obtenues, pourquoi avez-vous besoin de couleur et de lignes ?

Oh, à quoi ressemble la formule, je peux vous montrer un exemple ?
 
jekk:

Ah, à quoi ressemble la formule, puis-je vous montrer un exemple ???

Il est difficile d'appeler cela une formule : nous prenons les prix minimum et maximum - 0% et 100%, et les divisons par les niveaux, et leurs valeurs sont écrites partout dans le monde - 23,6%, 38,2%, 50%, 61,8%, 161,8% (ou 0,236, 0,382, 0,5, 0,618, 1,618, etc. divisés par 0,618, arrondis à 3 chiffres).

pour les prix de 1.3254 et 1.3896 quelque chose comme ça :

directinverser
Niveau 161.80% : 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.3254Niveau 161.8% : 1.2857


C'est-à-dire, (Prix(100%)-Prix(0%))*Niveau(en milliers) + Prix(0%) pour le calcul à terme et Prix(100%) - (Prix(100%)-Prix(0%)) * Niveau (en milliers) - pour le calcul inverse.

Pour chaque valeur, une ligne distincte peut être tracée avec n'importe quelle couleur de la palette de votre choix.

Raison: