Geschrieben 23. Juli 201015 Jr. comment_102726 Hallo, habe folgende Anforderung: ich möchte einen Satz von Text-Labeln in einen Chart schreiben. Der Nutzer soll die Möglichkeit erhalten diese Label in verschiedene Ecken zu setzten. Die Label haben verschiedene Längen.Bsp:Lot Size 0.01 Stop Loss 40 Take Profit 70 Looking for opportunities... Diese Anordnung funktioniert in Corner 0 und 2 (rechte Seite) ... auf der linken Seite funktioniert es nicht Lot Size 0.01 Stop Loss 40 Take Profit 70 Looking for opportunities Was ist der einfachste Weg das linksbündig zu machen - in Corner 1 und 3 Gruß mtbf40 Melden
Geschrieben 23. Juli 201015 Jr. comment_102727 Du hast die Anordnung vermutlich über Object Properties OBJPROP_CORNER gemacht. Wenn der Text immer linksbündig sein soll, dann geht das über XDISTANCE / YDISTANCE.Hier mal eine Funktion, die ich benutze. void PutTextLabel(int Index, int Spalte, int Zeile, string Text, color Farbe) { windex=WindowFind(Kurz_Name); string Label; Label="Label_"+Index; Spalte=Spalte*210+1; Zeile =(Zeile+1)*12; ObjectCreate(Label,OBJ_LABEL,windex,Spalte,Zeile); ObjectSetText(Label,Text,7); ObjectSet(Label,OBJPROP_XDISTANCE,Spalte); ObjectSet(Label,OBJPROP_YDISTANCE,Zeile); ObjectSet(Label,OBJPROP_COLOR,Farbe); return(0); } Du musst die X-Position für die rechte Seite aber so anpassen, dass dein längster Text noch hinpasst. Wenn du das flexibel halten willst, dann kannst du über die Funktion StringLen() die länge deines längsten Textes herausfinden und abhängig von der Schriftgrösse die Position berechnen. Ist ein wenig umständlich, dafür sollte es aber funktionieren. Melden
Geschrieben 23. Juli 201015 Jr. Autor comment_102728 Du hast die Anordnung vermutlich über Object Properties OBJPROP_CORNER gemacht. Wenn der Text immer linksbündig sein soll, dann geht das über XDISTANCE / YDISTANCE.Hier mal eine Funktion, die ich benutze. void PutTextLabel(int Index, int Spalte, int Zeile, string Text, color Farbe) { windex=WindowFind(Kurz_Name); string Label; Label="Label_"+Index; Spalte=Spalte*210+1; Zeile =(Zeile+1)*12; ObjectCreate(Label,OBJ_LABEL,windex,Spalte,Zeile); ObjectSetText(Label,Text,7); ObjectSet(Label,OBJPROP_XDISTANCE,Spalte); ObjectSet(Label,OBJPROP_YDISTANCE,Zeile); ObjectSet(Label,OBJPROP_COLOR,Farbe); return(0); } Du musst die X-Position für die rechte Seite aber so anpassen, dass dein längster Text noch hinpasst. Wenn du das flexibel halten willst, dann kannst du über die Funktion StringLen() die länge deines längsten Textes herausfinden und abhängig von der Schriftgrösse die Position berechnen. Ist ein wenig umständlich, dafür sollte es aber funktionieren. Hallo Wogo, danke für die Antwort - hatte ich mir schon fast gedacht das ich das so lösen muß!! habe insgeheim gehofft das es eine Abkürzung gibt - na ja - auf in den Kampf ... Melden
Geschrieben 23. Juli 201015 Jr. comment_102729 Also ich finde WOGO´s Funktion klasse ! Ist auf jeden Fall eine saubere Variante. Viele Grüße,Rumpel Melden
Geschrieben 23. Juli 201015 Jr. Autor comment_102730 Also ich finde WOGO´s Funktion klasse ! Ist auf jeden Fall eine saubere Variante. Viele Grüße,Rumpel ist ja die einzige sinnvolle Lösung!! Melden
Geschrieben 28. Juli 201015 Jr. Autor comment_102819 Hallo, habe noch eine Frage: wie programmiere ich, welches Label ich selektiert/ausgewählt habe?? Mit ObjectGet geht das nicht?! oder?? Melden
Geschrieben 29. Juli 201015 Jr. comment_102824 Was meinst du mit "ausgewählt"?Du gibst jedem Objekt einen Namen und wenn du eine Eigenschaft ändern willst, dann sprichst du es einfach über diesen an. Melden
Geschrieben 29. Juli 201015 Jr. Autor comment_102842 Was meinst du mit "ausgewählt"?Du gibst jedem Objekt einen Namen und wenn du eine Eigenschaft ändern willst, dann sprichst du es einfach über diesen an. Also ich habe mehrere Labels - Labels kann man doch auswählen/doppel klicken - nun möchte ich programmieren welches Label ich ausgewählt habe - dann soll etwas passieren die Situation ist folgende:- ich habe einen Oszillator der verschiedene Parameter annehmen kann- diesen will ich über Labels steuern- d.h. wähle ich Label 1, soll der Parameter 1 ausgewählt werden - Label 2 -> Parameter 2 ... Melden
Geschrieben 30. Juli 201015 Jr. comment_102844 Also ich habe mehrere Labels - Labels kann man doch auswählen/doppel klicken - nun möchte ich programmieren welches Label ich ausgewählt habe - dann soll etwas passieren Das geht leider nicht. Melden
Geschrieben 30. Juli 201015 Jr. Autor comment_102857 Das geht leider nicht. Was wäre denn eine Alternative?? Melden
Geschrieben 30. Juli 201015 Jr. comment_102858 Was wäre denn eine Alternative?? 2 AlternativenEinfache: Objekte die du per Maus bewegen könntest und beim überschreiten von Werten etwas passiert. Schwere: DLL coden EDIT: Beispiel 2 Linien die du per Maus vertikal ändern kannst. Obere wäre dann dein TP (long) und untere dein SL. EDIT2: Labels != Objekte Melden
Geschrieben 30. Juli 201015 Jr. comment_102859 Evt. wäre einfacher wenn du einfach kurz erklärst was du denn vor hast. Dann lässt sich bestimmt auch eine schöne Lösung finden. Viele Grüße,Rumpel Melden
Geschrieben 1. August 201015 Jr. Autor comment_102935 Evt. wäre einfacher wenn du einfach kurz erklärst was du denn vor hast. Dann lässt sich bestimmt auch eine schöne Lösung finden. Viele Grüße,Rumpel Also ich möchte über mehrere Labels einen Oszillator steuern - ich könnte auch über Ctrl-I gehen - würde dies aber gern über Labels oder sonst was realisieren die Situation ist folgende:- ich habe einen Oszillator der verschiedene Parameter annehmen kann- diesen will ich über Labels ode ...? steuern- d.h. wähle (Doppelklick) ich Label 1, soll der Parameter 1 ausgewählt werden - Label 2 -> Parameter 2 ... Melden
Geschrieben 1. August 201015 Jr. comment_102938 Genau so wie du es dir vorstellst geht es nicht. Wenn du es grafisch lösen willst, dann könntest du es so machen:Erzeug dir 3 Text-Objekte und ein Pfeil-Objekt, wie im Bild!Jetzt kannst du den Pfeil ja verschieben wie du willst. Schiebst du ihn vor "Wert 1", so kontrolliert dieser deinen Parameterwert. Genau so für Wert 2 und 3.Dazu frägst du einfach die Y-Position deines Pfeiles über ObjectGet() ab. DasText-Objekt, dem er am nächsten ist lässt du den Parameter bestimmen.Dein Pfeil ist somit ein Schalter mit (fast) beliebig vielen Stellungen. Melden
Geschrieben 1. August 201015 Jr. comment_102939 Genau so wie du es dir vorstellst geht es nicht. Wenn du es grafisch lösen willst, dann könntest du es so machen:Erzeug dir 3 Text-Objekte und ein Pfeil-Objekt, wie im Bild!Jetzt kannst du den Pfeil ja verschieben wie du willst. Schiebst du ihn vor "Wert 1", so kontrolliert dieser deinen Parameterwert. Habe von der Programmierung ja keinen Plan, habe jedoch einen Indikator der deinem Beispiel ganz genau entspricht.Dieser kontrolliert dann die Parameter eines jeden einzelnen Bars / Candle, jenach dem wohin er verschoben wird. Solte dieser als Beispiel für euch nützlich sein, könnte ich ihn auf Wunsch posten. Melden
Geschrieben 1. August 201015 Jr. Autor comment_102940 Genau so wie du es dir vorstellst geht es nicht. Wenn du es grafisch lösen willst, dann könntest du es so machen:Erzeug dir 3 Text-Objekte und ein Pfeil-Objekt, wie im Bild!Jetzt kannst du den Pfeil ja verschieben wie du willst. Schiebst du ihn vor "Wert 1", so kontrolliert dieser deinen Parameterwert. Genau so für Wert 2 und 3.Dazu frägst du einfach die Y-Position deines Pfeiles über ObjectGet() ab. DasText-Objekt, dem er am nächsten ist lässt du den Parameter bestimmen.Dein Pfeil ist somit ein Schalter mit (fast) beliebig vielen Stellungen. genau diesen Ansatz würde ich verfolgen!! Dieser Ansatz wird auch im "AutoGraf" verfolgt - ist auch die einzige erfolgsführende Methode - nur weiß ich nicht wie das zu programmieren ist?? Melden
Geschrieben 2. August 201015 Jr. comment_102944 ...nur weiß ich nicht wie das zu programmieren ist??Wir könnten ja einen Deal machen. Ich programmier dir deine Funktion und du setzt dich mal mit der Funktionsweise des Thanks-Button auseinander... Melden
Geschrieben 2. August 201015 Jr. Autor comment_102948 Wir könnten ja einen Deal machen. Ich programmier dir deine Funktion und du setzt dich mal mit der Funktionsweise des Thanks-Button auseinander... :grin: Melden
Geschrieben 2. August 201015 Jr. comment_102956 Here it is:WG_ATR.mq4Ich hab einfach mal den ATR als Basis genommen und die Labels auch nicht rechts, sondern links im Chart angeordnet, weil's einfacher ist. Es gibt 2 Funktionen, die wichtig sind: void CreateSwitchObjects(int NumberOfChoices) // <= neue Funktion, die die Labels zeichnet int ControlSwitchObjects(int NumberOfChoices) // <= neue Funktion, die die Labels updated und Paramter Wert zurück gibt Das Ganze ist nicht ganz so einfach auf einen anderen Indi zu adaptieren, da der Indikator ja beim Ändern des Parameters neu gezeichnet werden soll.Ich habe alle Zeilen im Code, die ich für die Funktionalität angepasst habe mit //Schau's dir einfach mal an, wie ich das beim ATR gelöst habe und solltest du damit nicht zurecht kommen, dann weisst du ja, in welchem Forum dir geholfen wird. Momentan sind 3 Werte eingestellt, du kannst das aber über das Define NUMBEROFCHOICES beliebig erweitern. Dann musst du die möglichen Werte nur im ArrayParameterArray[3]={14, 21, 34} eintragen. Bedienung ist ganz einfach. Du ziehst das rote "X" auf die Zeile mit dem gewünschten Wert. Dieser wird dann Rot und das X hüpft an die richtige Position. Natürlich funktioniert das Ganze nur solange neue Ticks reinkommen. Viel Spass damit!Wogo Melden
Geschrieben 3. August 201015 Jr. Autor comment_102998 DANKE Wago, funktioniert sehr gut!! habe das ganze noch an meinen Oszillator angepaßt. Kann man jetzt noch den "IndicatorShortName" anpassen?? Gruß mtbf40 Melden
Geschrieben 3. August 201015 Jr. comment_103000 Kann man jetzt noch den "IndicatorShortName" anpassen??Geht auch.Musst nur folgende 4 Zeilen von Init() nach Start() kopieren. i=Bars-counted_bars-1; //---- name for DataWindow and indicator subwindow label string short_name; // <= short_name="ATR("+ATRPeriode+")"; // <= Parametername angepasst IndicatorShortName(short_name); // <= SetIndexLabel(0,short_name); // <= while(i>=0) Dabei nicht übersehen, dass hier bei "short_name="ATR("+ATRPeriode+")"; " der Parametername geändert wurde.DANKE Wago,Das mit dem Namen müssen wir aber noch üben Gruss,Wogo Melden
Geschrieben 3. August 201015 Jr. Autor comment_103002 Geht auch.Musst nur folgende 4 Zeilen von Init() nach Start() kopieren. i=Bars-counted_bars-1; //---- name for DataWindow and indicator subwindow label string short_name; // <= short_name="ATR("+ATRPeriode+")"; // <= Parametername angepasst IndicatorShortName(short_name); // <= SetIndexLabel(0,short_name); // <= while(i>=0) Dabei nicht übersehen, dass hier bei "short_name="ATR("+ATRPeriode+")"; " der Parametername geändert wurde. Das mit dem Namen müssen wir aber noch üben Gruss,Wogo tausend Dank ... - jetzt ist alles perfekt!! Melden
Geschrieben 3. August 201015 Jr. comment_103009 hab mal die OT-Beiträge abgeschnippelt http://www.tom-next.com/community/abgetrennt-labels-anordnen-t57854.html Melden
Hallo,
habe folgende Anforderung:
ich möchte einen Satz von Text-Labeln in einen Chart schreiben. Der Nutzer soll die Möglichkeit erhalten diese Label in verschiedene Ecken zu setzten.
Die Label haben verschiedene Längen.
Bsp:
...
Diese Anordnung funktioniert in Corner 0 und 2 (rechte Seite)
... auf der linken Seite funktioniert es nicht
Lot Size 0.01 Stop Loss 40 Take Profit 70 Looking for opportunitiesWas ist der einfachste Weg das linksbündig zu machen - in Corner 1 und 3
Gruß mtbf40