Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 727

 
Vitaly Muzichenko:

Können Sie mir sagen, wie ich ein Objekt auswählen kann, wenn es erstellt wird, so dass es seine Auswahl nicht verliert und sich nicht selbst auswählt, wenn der Benutzer die Auswahl aufhebt. In der vierten Runde war es einfach, aber in der fünften Runde geht es nicht mehr.

Das war früher so, und es hat gut funktioniert:

void SetHLine(...,double p,bool sel) {
  if(ObjectFind(chart_ID,nm)!=0) {
    ObjectCreate(chart_ID,nm,OBJ_HLINE,0,0,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
    ...
  }
   ObjectSetDouble(chart_ID,nm,OBJPROP_PRICE,p);
}

Wie Sie sehen können, können wir beim Erstellen das zu erstellende Objekt sofort auswählen oder nicht auswählen und es wird sich nicht mehr ändern und es wird keine Referenz darauf geben, aber beim fünften Objekt funktioniert es nicht, es wird ohne Auswahl erstellt.

Wie kann man mql5 so gestalten, dass das Objekt bei der Erstellung ausgewählt werden kann und dann bei Bedarf manuell verwaltet werden kann - auswählen/nicht auswählen

OBJPROP_SELECTABLE
 

Nun, das ist es, aber das Symbol fällt nicht auf.

void SetArrow(string nm,string tooltxt="",datetime t=0,double p=0,color col=clrRed,long type=0) {
if(ObjectFind(0,nm)!=0) {
    ObjectCreate(0,nm,type==0?OBJ_ARROW_BUY:OBJ_ARROW_SELL,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,true);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetString(0,nm,OBJPROP_TOOLTIP,tooltxt);
   }
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t);
}
 
Vitaly Muzichenko:

Ja, aber das Symbol ist nicht hervorgehoben.

void SetArrow(string nm,string tooltxt="",datetime t=0,double p=0,color col=clrRed,long type=0) {
if(ObjectFind(0,nm)!=0) {
    ObjectCreate(0,nm,type==0?OBJ_ARROW_BUY:OBJ_ARROW_SELL,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,true);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetString(0,nm,OBJPROP_TOOLTIP,tooltxt);
   }
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t);
}

Alles ist hervorgehoben:

Hervorhebung

Dateien:
OBJ_ARROW.mq5  22 kb
 
Vladimir Karputov:

Alles fällt auf:

Scheiße, ich habe eine Funktion ausgeschlossen und eine andere überprüft, alles funktioniert. Ich danke Ihnen! Ich gehe ins Bett)
 

Mir ist eine merkwürdige Eigenschaft aufgefallen: Wenn man es so einstellt, werden die Zeilen nicht hervorgehoben, wenn man sie erstellt

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

Wenn Sie aber das Gegenteil tun, dann gibt es kein Problem mit der Auswahl:

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

Aus irgendeinem Grund ändert das Ersetzen von Summanden die Summe?

 
Vitaly Muzichenko:

Mir ist eine merkwürdige Eigenschaft aufgefallen: Wenn man es so einstellt, werden die Zeilen nicht hervorgehoben, wenn man sie erstellt

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

Wenn Sie aber das Gegenteil tun, dann gibt es kein Problem mit der Auswahl:

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

Aus irgendeinem Grund verändert das Ersetzen von Summanden die Summe?

Offensichtlich, wenn

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

letzten Befehl, wird die Karte aktualisiert

 
Vitaly Muzichenko:

Mir ist eine merkwürdige Eigenschaft aufgefallen: Wenn man es so einstellt, werden die Zeilen nicht hervorgehoben, wenn man sie erstellt

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

Wenn Sie aber das Gegenteil tun, dann gibt es kein Problem mit der Auswahl:

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

Aus irgendeinem Grund verändert das Ersetzen von Summanden die Summe?

Wenn Sie ein Objekt erstellen, haben Sie wahrscheinlich zunächst seine Standardeigenschaft als nicht abwählbar festgelegt.

Dann wählen Sie es aus (aber das Objekt ist nicht auswählbar), folglich wird nichts ausgewählt

Dann stellen Sie sie als auswählbar ein. Aber es ist "zu spät, den Borjomi zu trinken" ...
 

Hier ist also der vollständige Code:

void SetVLine(long chart_ID=0,string nm="nm",datetime tm=0,int wd=1,int st=0,color cl=clrRed,
                                             string tooltxt="",bool sel=false,bool back=false) {
if(ObjectFind(chart_ID,nm)<0) {
    ObjectCreate(chart_ID,nm,OBJ_VLINE,0,tm,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_TIME,tm);
    ObjectSetInteger(chart_ID,nm,OBJPROP_BACK,back);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
  // ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetString(chart_ID,nm,OBJPROP_TOOLTIP,tooltxt);
    ObjectSetInteger(chart_ID,nm,OBJPROP_COLOR,cl);
    ObjectSetInteger(chart_ID,nm,OBJPROP_WIDTH,wd);
    ObjectSetInteger(chart_ID,nm,OBJPROP_STYLE,st);
   }
}

Ja, ich habe es bei allen Objekttypen überprüft, und Sie müssen zuerst"SELECTTABLE" und dann"SELECTED" eingeben.

Vielen Dank für Ihre Teilnahme und Ihre Hilfe bei der Lösung des Problems!

 
Im MetaTrader5 ist es möglich, einen EA in 3 Blöcken zu generieren. 1 Block gibt Signale von einem Indikator oder von mehreren Indikatoren. 2 Blockschleppstangen. 3 Blockrisiken.

Kann ich vorschlagen, dass ich 1. benutzerdefinierte Indikatoren in 1 Block hinzufügen kann? Wenn ja, wie soll ich das tun?

2. Ist es möglich, den Code so zu korrigieren, dass die Geschäfte in beide Richtungen geöffnet werden (jetzt, zum Beispiel, wenn ein Kaufgeschäft geöffnet wird, wird das Verkaufsgeschäft nicht geöffnet, bis das Kaufgeschäft geschlossen ist)
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
Grund der Beschwerde: