MQL4中的斐波那契水平

 
大家好!我有一个问题--在创建斐波那契水平线 对象时,是否可以使每个水平线具有不同的颜色,以及如何为每个水平线分配一个信号值给EA?提前感谢您!真诚的,尤金!
 
最好是直接在EA中计算它们的值。
 

这样的功能就能被规定吗?但颜色在个别层面上没有变化,会不会在某个地方出现错误,或者应该添加其他东西?

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

{

ObjectCreate("Fibo",OBJ_FIBO, 0, 0, 0); // 创建斐波那契水平的对象

ObjectSet("Fibo",OBJPROP_COLOR,clrRed); // 对角线的颜色。

//ObjectSet("Fibo",OBJPROP_LEVELCOLOR,clrBlue); //水平的颜色是一样的。

//ObjectSetInteger(0, "Fibo",OBJPROP_BACK,true);//---显示在前景(false)或背景(true)。


ObjectSet("Fibo",OBJPROP_FIBOLEVELS,13); //设置对象级别的数量。


ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+0,0.000);//设置每个对象水平的值。

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELCOLOR,0,clrGreen); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,0,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,1,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,2,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,3,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,4,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,5,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,6,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,7,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,8,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,9,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,10,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,11,1); //--- 水平厚度

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); // 水平颜色

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

ObjectSetInteger(0, "Fibo",OBJPROP_LEVELWIDTH,12,1); //--- 水平厚度

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:

这样的功能就能被规定吗?但颜色并没有在个别层面上发生变化,是否在某个地方出现了错误,或者有什么其他的东西需要添加?

你是在寻找一个指标,还是在寻找一个专家顾问?如果你将其用于专家顾问,那么计算这些水平的值就足够了。

 
对于EA--我想了解什么函数可以用来分离每个级别来分配信号值?ZigZag的想法是寻找坐标--EA画出斐波那契水平,从每个水平(比价差稍长的距离)我们回溯,并规定更多的平行水平--我们把它们作为决定开立订单的基础。
 
jekk:
对于EA--我想了解什么函数可以用来分离每个级别来分配信号值?我对ZigZag的想法是找到坐标--专家顾问画出斐波那契水平,从每个水平(比价差稍长的距离)我们退一步,设置平行水平--我们把它们作为决定开仓的基础。

对于OBJ_FIBO,所有级别的颜色都是一样的。如果你真的很绝望,就用不同的颜色画简单的OBJ_TRENDLINE
 
jekk:
对于EA--我想了解什么函数可以用来分离每个级别来分配信号值?我对ZigZag的想法是寻找坐标--EA画出斐波那契水平,从每个水平(比价差稍长的距离)我们回溯并设置平行水平--我们把它们作为决定开单的基础。

你不需要分离任何东西,只需在EA中直接使用公式和计算每个级别,用得到的数值工作,为什么你需要颜色和线条?
 
evillive:

你是在寻找一个指标还是一个EA?如果是EA,那么只需计算这些水平的值就足够了,你根本不需要任何漂亮的东西或颜色。

视觉部分应该始终存在,以使其清晰(至少在开始时)。
 
evillive:

你不需要分离任何东西,你直接在EA中采取公式并计算每个级别,用得到的数值工作,为什么你需要颜色和线条呢?

哦,这个公式是怎样的,我可以给你看一个例子吗?
 
jekk:

啊,这个公式是什么样子的,我可以给你看一个例子吗?

好吧,很难说这是一个公式:我们把最低和最高价格--0%和100%,除以水平,其数值写满了--23.6%、38.2%、50%、61.8%、 161.8%(或0.236、0.382、0.5、0.618、1.618等除以0.618,四舍五入到3位数)。

对于1.3254和1.3896这样的价格。

直接的逆转
161.80%的水平。 1.42930.0% 水平。1.3896
100.0% 水平。 1.389623.60% 水平。1.3744
61.8% 水平。 1.365138.2% 水平。1.3651
50.0% 水平。 1.357550.0% 水平。1.3575
38.2% 水平。 1.349961.8% 水平。1.3499
23.6% 水平。
1.3406100.0% 水平。1.3254
0.0% 水平。 1.3254161.8%的水平。 1.2857


也就是说,(价格(100%)-价格(0%))*水平(以千计)+价格(0%)用于远期计算,价格(100%)-(价格(100%)-价格(0%))。* 水平(以千计)--用于逆向计算。

对于每个数值,可以用你选择的调色板中的任何颜色画出一条单独的线。