Beschriftung im 2. Sub-Fenster

 

Hallo zusammen,

eigentlich sollte das kein Problem sein:

Ich möchte ein Label im 2. Unterfenster platzieren. Mit der Anweisung ObjectCreate an der 3. Position die 2 Eintrage wird das Label trotzdem im 1. Unterfenster platziert. 

Danach dachte ich, es ist vielleicht gut die aktuelle Fensternummer auszulesen und in eine Variable zu schreiben. Diese dann in ObjectCreate einsetzen. Keine Änderung, obwohl die Variable richtigerweise mit einer 2 durch WindFind gefunden wurde. 

Warum wird die Adressierung des 2. Unterfensters ignoriert) Ich kann übrings eine x-beliebe Nummer dort eintragen - keine Änderung.

Der Screenshot zeigt den Cart und das 1. Unterfenster mit der gelben Beschriftung, ist auch richtig.

Die weiße Beschriftung soll ins 2. Unterfenster, landet aber immer im 1. Unterfenster (UF). Probehalber hab ich das Label mit der gefundenen Variable windowIndex gefüllt. Und siehe, es zeigt eine 2. Aber warum wird dann das Label nicht auch richtigerweise im 2. UF platziert?

Dateien:
 
Dom130568:

Hallo zusammen,

eigentlich sollte das kein Problem sein:

Ich möchte ein Label im 2. Unterfenster platzieren. Mit der Anweisung ObjectCreate an der 3. Position die 2 Eintrage wird das Label trotzdem im 1. Unterfenster platziert. 

Danach dachte ich, es ist vielleicht gut die aktuelle Fensternummer auszulesen und in eine Variable zu schreiben. Diese dann in ObjectCreate einsetzen. Keine Änderung, obwohl die Variable richtigerweise mit einer 2 durch WindFind gefunden wurde. 

Warum wird die Adressierung des 2. Unterfensters ignoriert) Ich kann übrings eine x-beliebe Nummer dort eintragen - keine Änderung.

Der Screenshot zeigt den Cart und das 1. Unterfenster mit der gelben Beschriftung, ist auch richtig.

Die weiße Beschriftung soll ins 2. Unterfenster, landet aber immer im 1. Unterfenster (UF). Probehalber hab ich das Label mit der gefundenen Variable windowIndex gefüllt. Und siehe, es zeigt eine 2. Aber warum wird dann das Label nicht auch richtigerweise im 2. UF platziert?

ich habs nicht probiert, 

aber hast Du es mal mit der ChartID() probiert?


beim setzten des Labels wirst Du ja auch nach der Chart ID gefragt.

 
  1. Ich würde ja erst einmal in der Hilfe (tja, immer wieder das gute alte F1) nachschauen, welche Optionen die Funktion ObjectCreate hat!
  2. Dann würde ich mir die FehlerWerte _LastError (oder so) ansehen und mit dem Debugger durch den Code gehen und mir alle Werte ansehen.
  3. Den Code sollte man hier mit ALT-S eintragen nicht als Foto.
  4. Verständnisfrage: Wie viel Fenster hast Du und auf welchem (welcher Nummer) willst Du Dein Objekt platzieren?
ObjectCreate - Object Functions - MQL4 Reference
ObjectCreate - Object Functions - MQL4 Reference
  • docs.mql4.com
The function creates an object with the specified name, type, and the initial coordinates in the specified chart subwindow of the specified chart. There are two variants of the function: [in]  Number of the chart subwindow. 0 means the main chart window. The specified subwindow must exist (window index must be greater or equal to 0 and less...
 

Hallo Amado,


Danke für den Hinweis. Der Index ist korrekt, ich habe mir den Wert als Label zur Kontrolle ausgeben lassen. Nur druckt er dieses Label in das 1. Subfenster, und nicht in das 2. Das ist die grüne 2. Ds Subfenster Momentum ist aber das 2. Unterfenster

 

Hallo Carl,


danke für den Hinweis, aber die Beschreibung kann ich mittlerweile singen. Meine Screenshots  anscheinend nicht mit übertragen daher der Anhang.


der Codeausschnitt:

int OnInit()
  {
   
   IndicatorShortName("Momentum");
   int windowIndex=WindowFind("Momentum");
   int ChartID=windowIndex;
      
         
  ObjectCreate(0,"Label", OBJ_LABEL,windowIndex,0,0);
  ObjectSetInteger(0,"Label", OBJPROP_CORNER,1);
  ObjectSetInteger(0,"Label", OBJPROP_XDISTANCE,40);
  ObjectSetInteger(0,"Label", OBJPROP_YDISTANCE,12);
  ObjectSetText("Label",windowIndex,25,"Tahoma",Lime);     
  
 

Nochmal der Versuch mit dem Bildschirm Screenshot, nicht als Anhang:

 
Dom130568:

Nochmal der Versuch mit dem Bildschirm Screenshot, nicht als Anhang:

Sag bist Du wirklich im MT5?

Deine Input variablen deuten ja darauf hin, aber 

ObjectSetText(...) kennt nichtmal die Doku

 

Hallo Amando,


es ist MT4. Code übernommen aus diversen veröffentlichten Beispielen. 

Noch eine Bemerkung: Ich habe alles möglich für den Wert "WindowIndex" versucht. Es ist völlig egal, was ich da reinschreibe, es landet immer im ersten Unterfenster. Egal ob der Wert 0, 1, 2 oder was auch immer ist.

Nochmal im Anhang den Screenshot des Bildschirms. Einbetten in den Kommentar scheint nicht zu klappen.


Grüße, Dominik

 
Dom130568:

Hallo Amando,


es ist MT4. Code übernommen aus diversen veröffentlichten Beispielen. 

Noch eine Bemerkung: Ich habe alles möglich für den Wert "WindowIndex" versucht. Es ist völlig egal, was ich da reinschreibe, es landet immer im ersten Unterfenster. Egal ob der Wert 0, 1, 2 oder was auch immer ist.

Nochmal im Anhang den Screenshot des Bildschirms. Einbetten in den Kommentar scheint nicht zu klappen.


Grüße, Dominik

jetzt bin ich sowieso überfragt, arbeite schon seit ewigkeiten mit mt5, bei mt4 bin ich überfragt

 
Wie wäre denn der Code für MT5? 
 
amando:

jetzt bin ich sowieso überfragt, arbeite schon seit ewigkeiten mit mt5, bei mt4 bin ich überfragt

nächst Frage, hab ich noch nicht probiert, da ich mir die Labels immer im Hauptfenster anzeigen lasse


hier kann ich dir gerne mal die Funktion geben um ein Label zu erzeugen

bool LabelCreate(const long              chart_ID=0,// ID des Charts 
                 const string            name="",// Name des Labels 
                 const int               sub_window=0,             // Nummer des Unterfensters 
                 const int               x=0,                      // X-Koordinate 
                 const int               y=0,                      // Y-Koordinate 
                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_LOWER, // Winkel des Charts zu Binden 
                 const string            text="",             // Text 
                 const string            font="",             // Schrift 
                 const int               font_size=0,// Schriftgröße 
                 const color             clr=clrRed,               // Farbe 
                 const double            angle=0.0,                // Text Winkel 
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // Bindungsmethode 
                 const bool              back=false,               // Im Hintergrund 
                 const bool              selection=false,          // Wählen um zu bewegen 
                 const bool              hidden=true,              // Ausgeblendet in der Objektliste 
                 const long              z_order=0)                // Priorität auf Mausklick 
  {
//--- Setzen den Wert des Fehlers zurück 
   ResetLastError();
//--- ein Text-Label erstellen 
   if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": Text-Label konnte nicht erstellt werden! Fehlercode = ",GetLastError());
      return(false);
   ;}
//--- Die Koordinaten des Schilds setzen 
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- wählen die Ecke des Charts, relativ zu der die Punktkoordinaten eingegeben werden 
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- den Text setzen 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- Textschrift setzen 
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- Schriftgröße setzen 
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- Text-Winkel angeben 
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- die Bindungsmethode setzen 
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- Farbe setzen 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Aktivieren (true) oder deaktivieren (false) Mausbewegung Modus 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- Verbergen (true) oder Anzeigen (false) den Namen des graphischen Objektes in der Objektliste 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- setzen die Priorität für eine Mausklick-Ereignisse auf dem Chart 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- die erfolgreiche Umsetzung 
   return(true);
;}

ist quasi aus der doku und nur für mich angepasst ,


aufrufen tu ich das ganze dann über

 LabelCreate(0,"Profit Total",0,10,20,CORNER_LEFT_LOWER,
               "D:"+" "+DoubleToString(ProfitDayTotal(),2)+" | "+DoubleToString(ProzentDayTotal(),2)+"%"+
               " | W:"+" "+DoubleToString(ProfitWeekTotal(),2)+" | "+DoubleToString(ProzentWeekTotal(),2)+"%"+
               " | M:"+" "+DoubleToString(ProfitMonthTotal(),2)+" | "+DoubleToString(ProzentMonthTotal(),2)+"%"
               ,"Courier",10,White,0,0);