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:

このように機能を規定することができるのでしょうか。しかし、個々のレベルでは色が変化しない......どこかでエラーが発生しているのか、それとも他に何か追加すべきことがあるのだろうか?

インジケータをお探しですか、それともExpert Advisorをお探しですか?Expert Advisorに使用する場合は、これらのレベルの値を計算すれば十分です。

 
EAの場合 - 信号の値を割り当てるために、各レベルを分離するためにどのような関数を使用できるかを理解したいのですが?ZigZagのアイデアは、座標を見つけることです - EAはフィボナッチレベルを 描き、各レベルから(スプレッドよりもわずかに長い距離で)我々は後退し、より平行なレベルを処方 - 我々は注文を開くために意思決定のための基礎としてそれらを取る。
 
jekk:
EAの場合 - 信号の値を割り当てるために、各レベルを分離するためにどのような関数を使用できるかを理解したいのですが?エキスパートアドバイザーがフィボナッチ・レベルを描き、各レベルから(スプレッドより少し長い距離で)一歩下がって平行レベルを設定し、それを注文を出す判断材料とします。

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%と世界中に書かれている(あるいは、3桁に丸めた0.618で0.236, 0.382, 0.5, 1.618, などとなる)。

1.3254と1.3896の価格に対して、このようなものです。

直接裏面
161.80%レベル 1.42930.0% レベル1.3896
100.0% Level: 1.389623.60% Level:1.3744
61.8% Level: 1.365138.2% Level:1.3651
50.0% Level: 1.357550.0% Level:1.3575
38.2% Level: 1.349961.8% Level:1.3499
23.6% レベル
1.3406100.0% Level:1.3254
0.0% レベル 1.3254161.8% Level: 1.2857


すなわち、フォワード計算では、(価格(100%)-価格(0%))*レベル(千単位)+価格(0%)、価格(100%)-(価格(100%)-価格(0%))となります。* レベル(単位:千米ドル) - 逆計算の場合。

それぞれの値に対して、パレットから好きな色で別の線を引くことができます。

理由: