Jump to content
Tom Next - Daytrading Community

graphische Objekte


sill3000

Recommended Posts

Hallo liebe Freunde, möchte eine waagerechte Linie aufm chart einzeichnen lassen.

 

Irgendwie scheint es nicht zu funktionieren. Hier mein Code

 

start()
{

 double price=Referenzpunkt;

  ObjectCreate("highLine",OBJ_HLINE,0,0,price);
  price=Referenzpunkt*Point;
  ObjectCreate("lowLine",OBJ_HLINE,0,0,price);
  
  ObjectSet("highLine",OBJPROP_COLOR,White);
  // changing the color of the upper line
  ObjectSet("highLine",OBJPROP_WIDTH,3);
  // now the line will be 3 pixel wide
  
  ObjectSet("lowLine",OBJPROP_COLOR,Crimson);
  // changing the color of the lower line
  ObjectSet("lowLine",OBJPROP_STYLE,STYLE_DOT);
  // now the lower line will be dashed   

}

 

Verstehe nicht, warum zeichnet er nicht die waagerechte Linie ? :birdie:

Link to comment
Share on other sites

@Wogo: ist in MQL zwischen "NULL" und "0" ein Unterschied?

 

Es kann auch sein, dass die Linie gezeichnet wird, man sie aber nicht sieht, weil in der Koordinatenberechnung ein Fehler steckt und dadurch die Linie ausserhalb des sichtbaren Bereichs landet.

Problem hatte ich heute noch mit einem Indikator ... noch steht der Euro ja nicht bei 1.00! :gum:

Link to comment
Share on other sites

@Wogo: ist in MQL zwischen "NULL" und "0" ein Unterschied?

NULL stellt einen leeren String dar, aber du hast schon recht. Daran wird's nicht liegen. :moi_big:

Die Zeitkoordinate sollte komplett ignoriert werden.

 

@sill3000:

Wenn du unter Diagramme-Objekte-Objekte schaust (CTLR-B), werden dir da beiden Objekte angezeigt?

Link to comment
Share on other sites

Also mein Problem ist, ich möchte eine waagerechte Linie zeichen, die ich mit einem bestimmten Wert immer verändern möchte, den mein EA jede Minute

 

berechnet und vom Typ double ist.

 

Was schreibe ich in init() und in deinit() um das zu erreichen und welche Softwarekomponenten brauche ich da.

 

Mit get oder set oder objectCreate und so ?

 

DAnke, schonmal im voraus.

Edited by sill3000
Link to comment
Share on other sites

So hab mal was gebastelt Sill:

 

der Beispielindikator zeichnet eine horizontale Linie 10 Pips unter den aktuellen Bid.

 

#property indicator_chart_window
#property indicator_color1 HotPink

#define PRICE_LINE   "SLLine"

int init()
 {
  Print("Line indicator initialized");
  if(!ObjectCreate(PRICE_LINE, OBJ_HLINE, 0, 0, 0))
   {
    Print("Error: can't create line_object! code #",GetLastError());
    return(0);
   } 
  ObjectSet(PRICE_LINE, OBJPROP_COLOR, indicator_color1); 
 }

int deinit()
 {
  ObjectDelete(PRICE_LINE);
  ObjectsRedraw();
 }

int start()
 {
    ObjectSet(PRICE_LINE, OBJPROP_PRICE1, Bid - (10 / MathPow(10, Digits - 1))); 
  return(0);
 }

 

Extra für Vola eine schöne Farbe ausgesucht :gum: , aber die kann man ja ändern.

Link to comment
Share on other sites

Sorry sollte "...10 Pips unter dem aktuellen Bid." heissen, habs geändert.

 

Ja Sill, sollte auch in einem EA funktionieren, mußt es nur einfügen, aber scheinst es ja schon hinbekommen zu haben. :correct:

 

Wenn das Prinzip einmal verstanden hast, ist fast alles machbar. :smile:

Link to comment
Share on other sites

  • 1 month later...

So hab mal was gebastelt Sill:

 

der Beispielindikator zeichnet eine horizontale Linie 10 Pips unter den aktuellen Bid.

 

#property indicator_chart_window
#property indicator_color1 HotPink

#define PRICE_LINE   "SLLine"

int init()
 {
  Print("Line indicator initialized");
  if(!ObjectCreate(PRICE_LINE, OBJ_HLINE, 0, 0, 0))
   {
    Print("Error: can't create line_object! code #",GetLastError());
    return(0);
   } 
  ObjectSet(PRICE_LINE, OBJPROP_COLOR, indicator_color1); 
 }

int deinit()
 {
  ObjectDelete(PRICE_LINE);
  ObjectsRedraw();
 }

int start()
 {
    ObjectSet(PRICE_LINE, OBJPROP_PRICE1, Bid - (10 / MathPow(10, Digits - 1))); 
  return(0);
 }

 

Extra für Vola eine schöne Farbe ausgesucht :gum: , aber die kann man ja ändern.

 

 

 

 

Und wenn ich das "Linienobjekt" nur mal für sagen wir mal eine gewisse Zeit nur ausblenden möchte und nicht löschen.

 

Wie sieht dann der Quellcode aus, ObjectDelete(), löscht ja alles, oder ??

Link to comment
Share on other sites

Kann man die Objekte auch wieder reaktivieren, oder wie kann man die init-Fkt.() neu starten ?

 

Im voraus besten Dank

Du mußt die Objekte ja nicht in der Init-Fktn. erzeugen, sondern kannst das an jeder beliebigen Stelle in Start() machen.

Nimm einfach den Code der Init-Funktion, gib der Funktion einen beliebigen Namen z.B. "void SillsObjekte()" und dann kannst du, die Objekte, wenn du sie vorher löscht, über diese Funktion immer wieder neu erzeugen.

Link to comment
Share on other sites

Du mußt die Objekte ja nicht in der Init-Fktn. erzeugen, sondern kannst das an jeder beliebigen Stelle in Start() machen.

Nimm einfach den Code der Init-Funktion, gib der Funktion einen beliebigen Namen z.B. "void SillsObjekte()" und dann kannst du, die Objekte, wenn du sie vorher löscht, über diese Funktion immer wieder neu erzeugen.

 

 

Danke. das probiere ich sofort aus.

Link to comment
Share on other sites

  • 1 month later...

Ich erzeuge ein graphisches Objekt mit diesem Quellcode:

 

if(!ObjectCreate(PRICE_LINE3, OBJ_HLINE, 0, 0, 0))
   {
    //Print("Error: can't create line_object! code #",GetLastError());
    return(0);
   } 
  ObjectSet(PRICE_LINE3, OBJPROP_COLOR, indicator_color_STR1); 
 }

 

Gib der Linie einen Wert mit diesem Befehl

 

ObjectSet(PRICE_LINE3, OBJPROP_PRICE1,Referenzrot1+STR1Wert*Point);

Lösche ein graphisches Objekt mit diesem Quellcode:

 

ObjectDelete(PRICE_LINE3);
ObjectsRedraw();

 

 

Aber irgendwie kann ich diese beiden Funktionen nicht hintereinander starten, denn beim erneuten Erzeugen von STR1, wird die Linie nicht wieder angezeigt !

 

Das verstehe ich nicht so genau, bräuchte da ein bisschen Unterstützung.

 

Vielen Dank schonmal im voraus.

 

Gruss sill3000

Link to comment
Share on other sites

Aber irgendwie kann ich diese beiden Funktionen nicht hintereinander starten, denn beim erneuten Erzeugen von STR1, wird die Linie nicht wieder angezeigt !

Kriegst du eine Fehlermeldung beim Versuch das Objekt wieder zu Erzeugen, wenn du die auskommentierte Print-Anweisung aktivierst?

Link to comment
Share on other sites

Kriegst du eine Fehlermeldung beim Versuch das Objekt wieder zu Erzeugen, wenn du die auskommentierte Print-Anweisung aktivierst?

 

Keine Fehlermeldung, aber ich sehe die Linie nicht mehr auf dem Bildschirm, und obwohl ich die gleichen Werte genommen habe bzw. die Werte lasse ich mir mit Print auf dem

 

Reiter "Experten" ausgeben.

Link to comment
Share on other sites

Keine Fehlermeldung, aber ich sehe die Linie nicht mehr auf dem Bildschirm, und obwohl ich die gleichen Werte genommen habe bzw. die Werte lasse ich mir mit Print auf dem

 

Reiter "Experten" ausgeben.

Das Print aktualisiert sich oft erst beim Schließen von MT4. Ersetze Print mal durch Alert!

Link to comment
Share on other sites

Es geht doch um die Linie auf dem Bildschirm(Chart), die ist weg, wenn ich einmal das "Objectdelete" aufgerufen habe.

 

Was genau machst du denn im Code derzeit? Derzeit können wir hier nur mutmaßen wie genau die Codeschnippsel eingebaut sind bzw. was du machst. Und da ist eine Fehlersuche sehr schwierig.

Einfacher wäre es wenn du ein Codeschnippsel posten könntest, wo der Fehler auftritt, und das man auch selber testen kann.

Link to comment
Share on other sites

Was genau machst du denn im Code derzeit? Derzeit können wir hier nur mutmaßen wie genau die Codeschnippsel eingebaut sind bzw. was du machst. Und da ist eine Fehlersuche sehr schwierig.

Einfacher wäre es wenn du ein Codeschnippsel posten könntest, wo der Fehler auftritt, und das man auch selber testen kann.

 

 

Der Code ist ja weiter oben beschrieben zum erzeugen, editieren und löschen der Objekte oder was genau meinst du ?

 

Meine Grundidee eben: Werte von einem Indikator werden berechnet und auf dem chart als Linie abgebildet, und dabei werden eben manche Linien manchmal gebraucht und

 

manchmal nicht.

 

Die berechnungen sind korrekt, die gebe ich ja mit der Print-Fkt. aus, das einzige Problem ist eben, das wenn die "Linienobjekte" gelöscht sind, sie nicht wieder auf dem

 

Bildschirm(Chart) angezeigt werden, mehr nicht.

Edited by sill3000
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...