MQLの目利きの方に質問です - ページ 3

 

ObjectCreate(またはObjectSet?)を使う 前に、常にオブジェクトが存在するかどうかを確認するようにというアドバイスをどこかで得たのですが、覚えていません。

一般的に、私はこのバリアントを使用しています。

if (ObjectFind("AsignalGF")==-1)
      {ObjectCreate("AsignalGF",OBJ_LABEL,0,0,0,0,0);
      ObjectSet("AsignalGF",OBJPROP_CORNER,1);
      ObjectSet("AsignalGF",OBJPROP_XDISTANCE,12*1);
      ObjectSet("AsignalGF",OBJPROP_YDISTANCE,1*5);
      ObjectSetText("AsignalGF",CharToStr(110),38,"Wingdings",DimGray);}
 
leonid553:

こんにちは。

すでに半日を費やしたが、解けない。

何が問題なのか、教えてください。INIT 関数に原因があるのでは?

というエラーが発生する可能性があります。

1.init()内、またはinit()内で呼び出される関数内でWindowFind()を呼び出した場合

2. windowFind()で、#property indicator_chart_windowが 宣言されている場合、windowFind()はサブウィンドウに対して呼び出されるので

3. ウィンドウ内に探している名前のインジケーターがない。

 
keekkenen:

3. 探している名前のインジケーターがウィンドウ内にない。

んー...物体ってなんだろう?
 
Abzasc:
mmm... オブジェクトってなんだ?

それとこれとはどういう関係があるのでしょうか?

オブジェクトは、存在しないウィンドウにレンダリングされようとしているため、二次的なものです。

また、オブジェクトが作成されればエラーは発生しませんが、二次的にオブジェクトが作成された場合、ObjectCreate()は falseを返します

 
keekkenen:

それとこれとはどういう関係があるのでしょうか?

オブジェクトは、存在しないウィンドウにレンダリングされようとしているため、二次的なものです。

また、オブジェクトが作成された場合はエラーが発生せず、オブジェクトが二次的に作成された場合は、ObjectCreate()はfalseを返します

了解です、ありがとうございます。)
 
keekkenen:

エラーは、次のことができます。

1. init()内、またはinitで呼び出される関数内でWindowFind()を呼び出した場合

2. windowFind()で、#property indicator_chart_windowが宣言されている場合、サブウィンドウに対してwindowFind()が呼ばれるため。

3. 探している名前のインジケーターがウィンドウ内にない。


1.いいえ、STARTで関数を呼び出しています : object("Symbol1", Symbol_1, 11, Color_1, 5);

2.プロパティindicator_separate_windowを 宣言しました。

3. では、ウィンドウがあるのに、どうしてインジケーターがないのでしょうか?

以下は、関数そのものです。

void object(string name, string _text, int fontsize, color color_, int value) {
// задаем окно индикатора
 ObjectCreate(name+ WindowExpertName(), OBJ_LABEL, WindowFind(WindowExpertName()), 0, 0);
 // задаем текстовую метку в окне
ObjectSetText(name+ WindowExpertName(), _text, fontsize, "Times New Roman", color_);
 ObjectSet(name+ WindowExpertName(), OBJPROP_CORNER, 1);//задаем правый угол
 ObjectSet(name+ WindowExpertName(), OBJPROP_XDISTANCE, 4);//задаем х-координату
 ObjectSet(name+ WindowExpertName(), OBJPROP_YDISTANCE, value);//задаем у-коордтнату 
                                     }
INITでは全く何も呼び出さない。そこにも何か書き足した方がいいのでは?



 
Abzasc:

ObjectCreate (またはObjectSet?) を使う前に、常にオブジェクトが存在するかどうかを確認するようにというアドバイスをどこかで得たのですが、覚えていません。

一般的には、このバリエーションを使うことが多いです。

(ObjectFind("AsignalGF")で指定する名前は何ですか?

インジケーターの名前とインジケーターが描く線の名前(配列)はどちらを設定すればいいのでしょうか?

 
leonid553:

(ObjectFind("AsignalGF") -) にどの名前を設定すればいいのでしょうか?

インジケータ名、またはインジケータが描く線の(配列)名?

作成/変更されるオブジェクトの名前。
 

わかったような気がします。関数の中でオブジェクトの名前を設定しました。

ObjectCreate(name+ WindowExpertName(),OBJ_LABEL, WindowFind(WindowExpertName()), 0, 0)。


 
leonid553:

関数の中でオブジェクトの名前を設定しました。ObjectCreate(name+ WindowExpertName(), ......);

ええ、それが私たちの求めているものです。