Niveles de Fibonacci en MQL4

 
Buenos días a todos! Tengo una pregunta - al crear un objeto de Niveles de Fibonacci, ¿es posible hacer que cada nivel tenga un color diferente, y cómo puedo asignar un valor de señal a un EA a cada nivel? Gracias de antemano. ¡Sinceramente, Eugene!
 
es mejor calcular sus valores directamente en la EA
 

¿Es así como se puede prescribir la función? Pero el color no cambia en los niveles individuales ¿puede haber un error en alguna parte o hay que añadir algo más?

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

{

ObjectCreate("Fibo", OBJ_FIBO, 0, 0, 0, 0); // Crear objeto de niveles Fibonacci

ObjectSet("Fibo",OBJPROP_COLOR,clrRed); // color de la diagonal

//ObjectSet("Fibo",OBJPROP_LEVELCOLOR,clrBlue); //el color de los niveles es el mismo

//ObjectSetInteger(0, "Fibo",OBJPROP_BACK,true);//--- mostrar en primer plano (false) o en segundo plano (true)


ObjectSet("Fibo",OBJPROP_FIBOLEVELS,13); //establecer el número de niveles del objeto


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+0,0.000);//configura el valor de cada nivel del objeto

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,0,clrGreen); // color del nivel

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,0,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,1,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,1,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,2,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,2,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,3,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,3,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,4,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,4,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,5,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,5,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,6,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,6,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,7,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,7,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,8,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,8,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,9,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,9,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,10,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,10,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,11,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,11,1); //--- espesor del nivel

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); // color del nivel

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELSTYLE,12,STYLE_SOLID);//Línea

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,12,1); //--- espesor del nivel

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


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

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

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

¿Es así como se puede prescribir la función? Pero el color no cambia en los niveles individuales ¿puede haber un error en alguna parte o hay que añadir algo más?

¿Busca un indicador o un asesor experto? Si lo utiliza para un Asesor Experto, entonces el cálculo de los valores de estos niveles será suficiente.

 
Para el EA - Quiero entender qué función se puede utilizar para separar cada nivel para asignar un valor de la señal? La idea de ZigZag es encontrar coordenadas - el EA dibuja niveles de Fibonacci y desde cada nivel (a una distancia ligeramente mayor que el spread) retrocedemos, y prescribimos más niveles paralelos - los tomamos como base para tomar decisiones de abrir una orden.
 
jekk:
Para el EA - Quiero entender qué función se puede utilizar para separar cada nivel para asignar un valor de la señal? Mi idea para el ZigZag es encontrar coordenadas - el Asesor Experto dibuja niveles de Fibonacci y desde cada nivel (a una distancia un poco mayor que el spread) retrocedemos y establecemos niveles paralelos - los tomamos como base para las decisiones de apertura de la orden.

Para OBJ_FIBO, el color es el mismo para todos los niveles. Si estás realmente desesperado, dibuja una simple OBJ_TRENDLINE en diferentes colores.
 
jekk:
Para el EA - Quiero entender qué función se puede utilizar para separar cada nivel para asignar un valor de la señal? Mi idea para ZigZag es encontrar coordenadas - el EA dibuja niveles de Fibonacci y desde cada nivel (a una distancia un poco mayor que el spread) retrocedemos y establecemos niveles paralelos - los tomamos como base para tomar decisiones sobre la apertura de una orden.

No tienes que separar nada, simplemente toma la fórmula y calcula cada nivel directamente en el EA, trabaja con los valores obtenidos, ¿para qué necesitas colores y líneas?
 
evillive:

¿Busca un indicador o un EA? Si para un EA, basta con calcular los valores de estos niveles, no hace falta ningún adorno ni color.

La parte visual debe estar siempre ahí para que quede claro (al menos al principio)
 
evillive:

No necesitas separar nada, coges la fórmula y calculas cada nivel directamente en el EA, trabajas con los valores obtenidos, ¿para qué necesitas color y líneas?

¿Cómo es la fórmula, puedo mostrarte un ejemplo?
 
jekk:

Ah, cómo es la fórmula, ¿puedo mostrarte un ejemplo?

Bueno, es difícil llamarlo fórmula: tomamos los precios mínimos y máximos, 0% y 100%, y los dividimos por los niveles, y sus valores se escriben por todas partes: 23,6%, 38,2%, 50%, 61,8%, 161,8% (o 0,236, 0,382, 0,5, 0,618, 1,618, etc. redondeado a 3 dígitos).

para los precios de 1,3254 y 1,3896 algo así:

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


Es decir, (Precio(100%)-Precio(0%))*Nivel(en miles) + Precio(0%) para el cálculo a futuro y Precio(100%) - (Precio(100%)-Precio(0%)) * Nivel (en miles) - para el cálculo inverso.

Para cada valor, se puede dibujar una línea separada con cualquier color de la paleta de su elección.