Eine Frage für MQL-Kenner - Seite 3

 

Irgendwo habe ich den Ratschlag bekommen, immer zu prüfen, ob ein Objekt existiert, bevor ich ObjectCreate (oder ObjectSet? Ich weiß es nicht mehr) verwende

Im Allgemeinen verwende ich diese Variante

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:

Guten Tag.

Ich habe schon einen halben Tag damit verbracht und kann es nicht herausfinden.

Was könnte hier der Fehler sein? Könnte es an der Funktion INIT liegen?

der Fehler könnte sein

1. wenn Sie WindowFind() in init() oder in einer Funktion aufrufen, die in init aufgerufen wird

2. windowFind() und Sie haben #property indicator_chart_window deklariert, da windowFind() für subwindow aufgerufen wird

3. es gibt keine Anzeige mit dem gesuchten Namen im Fenster

 
keekkenen:

3. der Indikator mit dem gesuchten Namen ist nicht im Fenster

Hmmm... was meinen Sie mit Objekt?
 
Abzasc:
Hmmm... was meinen Sie mit Objekt?

Was hat das mit dem Objekt zu tun?

Das Objekt ist sekundär, da es versucht, in einem Fenster gerendert zu werden, das nicht existiert,

Außerdem, wenn das Objekt erstellt wird, gibt es keinen Fehler, wenn das Objekt sekundär erstellt wird, wirdObjectCreate() false zurückgeben

 
keekkenen:

Was hat das mit dem Objekt zu tun?

Das Objekt ist sekundär, da es versucht, in einem Fenster gerendert zu werden, das nicht existiert,

Wenn das Objekt erstellt wird, tritt kein Fehler auf, wenn das Objekt sekundär erstellt wird, gibt ObjectCreate() false zurück.

Verstanden, danke :)
 
keekkenen:

Fehler kann sein

1. wenn Sie WindowFind() in init() oder in einer Funktion aufrufen, die in init aufgerufen wird

2. windowFind() und Sie haben #property indicator_chart_window deklariert, denn windowFind() wird für subwindow aufgerufen

3. der Indikator mit dem gesuchten Namen ist nicht im Fenster vorhanden


1. Nein, ich rufe die Funktion in START auf: object("Symbol1", Symbol_1, 11, Color_1, 5);

2. Sie haben #property indicator_separate_window deklariert

3. Wie kann also ein Indikator fehlen, wenn sein Fenster vorhanden ist?

Hier ist die Funktion selbst:

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);//задаем у-коордтнату 
                                     }
Ich rufe in INIT überhaupt nichts auf. Vielleicht sollte ich dort auch noch etwas hinzufügen?



 
Abzasc:

Irgendwo habe ich den Ratschlag bekommen, immer zu prüfen, ob ein Objekt existiert, bevor ich ObjectCreate (oder ObjectSet? Ich weiß es nicht mehr) verwende

Im Allgemeinen verwende ich diese Variante.

Welchen Namen sollte ich in(ObjectFind("AsignalGF") - angeben?

Wie soll ich den Namen des Indikators oder den Namen (Array) der vom Indikator gezeichneten Linie festlegen?

 
leonid553:

Welchen Namen soll ich in (ObjectFind("AsignalGF") -

Indikatorname oder der (Array-)Name der vom Indikator gezeichneten Linie?

Der Name des Objekts, das erstellt/geändert werden soll.
 

Ich glaube, ich hab's. Ich habe den Namen des Objekts in der Funktion festgelegt.

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


 
leonid553:

Ich habe den Namen des Objekts in der Funktion festgelegt. ObjectCreate(name+ WindowExpertName(), ....);

Ja, das ist es, wonach wir suchen.