Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Graphische Elemente duplizieren? (http://www.expert-advisor.com/forum/showthread.php?t=6705)

drater 24.06.20 16:18

Graphische Elemente duplizieren?
 
Hallo @all,

ich bin MT4-Rookie und habe mich bisher mit PineScript (TradinngView) befasst. Nun bin ich erstaunt, was mit MQL4 alles möglich ist, auch wenn ich da noch viiiiiel zu lernen habe. Aber man wächst ja mit seinen Aufgaben... ;)

Nun meine Frage: Gibt es die Möglichkeit bspw. eine horizontale Linie gezielt zu duplizieren? Mit gezielt meine ich, dass man die Linie um eine abzufragende Anzahl an Pips nach oben unten duplizeren kann (idealerweise auch in einer wählbaren Farbe und Linienart).

Ich hoffe, jemand kann mir weiterhelfen und DANKE für das viele Konw-How, das ihr hier bereitstellt.

AVT 24.06.20 17:52

Zitat:

Zitat von drater (Beitrag 43951)
Nun meine Frage: Gibt es die Möglichkeit bspw. eine horizontale Linie gezielt zu duplizieren? Mit gezielt meine ich, dass man die Linie um eine abzufragende Anzahl an Pips nach oben unten duplizeren kann (idealerweise auch in einer wählbaren Farbe und Linienart).

Du brauchst dazu ein Linie, die eindeutig zu identifizieren ist durch:
1. Art der Linie (horizontal, trend, vertical)
2. Farbe der Linie
3. Stil der Linie
4. Dicke der Linie
5. angeklickt oder nicht
6. Beschreibung
7. Tooltip
Deine gesuchte Linie kann alle oder nur einige Kriterien erfüllen.
(Ich arbeite gerne mit der Kombination aus Art und angeklickt, das reicht bei mir meistens.)

In einem Loop über alle Chart Objecte suchst Du dann die Linie, die die Bedingungen erfüllt.

Hast Du sie gefunden, dann fragst Du ihre Eigenschaften über ObjectGet... ab (z.B. den Price für horizontal, Price1 und 2 für trend, und für trend brauchst Du noch die Time1 und 2). Am besten in Variablen kurzfristig speichern, dann kannst Du schnell drauf zugreifen.

Danach addierst/subtrahierst die gewünschten Werte von den gerade Abgefragten Price-Werten.
Mit diesen errechneten neuen Werten erstellst Du ein neues Object der gleichen Art (kennst Du aus Deiner Suche) mit den errechneten Werten (bei trend bleiben die Zeiten dieselben).

Farbe und Stil der neuen Linie kannst Du z.B. als Benutzereingabe schon vorher festlegen.
Fertig.
Reicht der Weg Dir? AVT

traderdoc 24.06.20 17:53

Wenn die Linie im Chart angeklickt wird, so dass die weißen quadratischen Griffpunkte sichtbar sind und die Taste "Strg" gehalten wird, kann man sich mit der Maus auf die Linie stellen und eine Kopie irgendwo hinziehen.

Mit dem Rechtsklick auf die angeklickte Linie öffnet sich ein Menü, wo man unter Objekte die Linie auswählen und bearbeiten kann bzgl. u.a. Name, Farbe und Stil.

traderdoc

drater 24.06.20 19:50

Herzlichen Dank für deine ausführliche Antwort.

Zitat:

Zitat von AVT (Beitrag 43952)
Du brauchst dazu ein Linie, die eindeutig zu identifizieren ist durch:
1. Art der Linie (horizontal, trend, vertical)
2. Farbe der Linie
3. Stil der Linie
4. Dicke der Linie
5. angeklickt oder nicht
6. Beschreibung
7. Tooltip
Deine gesuchte Linie kann alle oder nur einige Kriterien erfüllen.
(Ich arbeite gerne mit der Kombination aus Art und angeklickt, das reicht bei mir meistens.)

Mir würde das Kriterium "angeklickt" absolut reichen. Im Augenblick geht es mir v.a. um horizontale Linien, die ich aber 1:1 duplizieren möchte. Daher wäre es mir sogar am liebsten, wenn ich nur ein Objekt ausgewählt haben dürfte. Ansonsten ist die Gefaht (muss mich noch an die MT4-UI gewöhnen), dass ich versehentlich mehr selektiert habe, als ich eigentlich will. Also idealerweise nur ein selektiertes Objekt (und eigentlich reichen für's erste auch horizontale Linien).

Zitat:

In einem Loop über alle Chart Objecte suchst Du dann die Linie, die die Bedingungen erfüllt.
Hast Du sie gefunden, dann fragst Du ihre Eigenschaften über ObjectGet... ab (z.B. den Price für horizontal, Price1 und 2 für trend, und für trend brauchst Du noch die Time1 und 2). Am besten in Variablen kurzfristig speichern, dann kannst Du schnell drauf zugreifen.
Okay... das sollte ich hinkriegen.


Zitat:

Danach addierst/subtrahierst die gewünschten Werte von den gerade Abgefragten Price-Werten.
Mit diesen errechneten neuen Werten erstellst Du ein neues Object der gleichen Art (kennst Du aus Deiner Suche) mit den errechneten Werten (bei trend bleiben die Zeiten dieselben).

Farbe und Stil der neuen Linie kannst Du z.B. als Benutzereingabe schon vorher festlegen.
Fertig.
Klingt machbar.

Reicht der Weg Dir? AVT
Klingt machbar. Nun bin ich als absoluter Newbie noch ein wenig "lost", was die verschiedenen Arten von MQL4-Programmen angeht.
Bei diesem hier wird es sich ja wohl um ein Script handeln. Wird das auf bestimmte Art im SourceCode gekennzeichnet oder ergibt sich das aus der Tatsache, dass es im Script-Verzeichnis abgelegt wird?

Vielen Dank nochmals - tolle Unterstützung hier. :)

Hast du noch einen Tipp, wo man sich ambesten in das Thema MQL-Programmierung reinfuchsen kann. Mir geht es erst mal weniger um EAs oder Indikatoren; eher um Skripten, die mir die das Leben erleichtern.

drater 24.06.20 19:52

Zitat:

Zitat von traderdoc (Beitrag 43953)
Wenn die Linie im Chart angeklickt wird, so dass die weißen quadratischen Griffpunkte sichtbar sind und die Taste "Strg" gehalten wird, kann man sich mit der Maus auf die Linie stellen und eine Kopie irgendwo hinziehen.

Mit dem Rechtsklick auf die angeklickte Linie öffnet sich ein Menü, wo man unter Objekte die Linie auswählen und bearbeiten kann bzgl. u.a. Name, Farbe und Stil.

traderdoc

Danke dir sehr für das Feedback. Das mit dem STRG & Ziehen wusste ich. Das ist aber genau die Sache, die ich gerne unterstützt haben wollte. V.a. das Positionieren mit der Rechnerei ist halt sehr zeitaufwändig.

AVT 24.06.20 20:51

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von drater (Beitrag 43955)
Klingt machbar. Nun bin ich als absoluter Newbie noch ein wenig "lost", was die verschiedenen Arten von MQL4-Programmen angeht.
Bei diesem hier wird es sich ja wohl um ein Script handeln. Wird das auf bestimmte Art im SourceCode gekennzeichnet oder ergibt sich das aus der Tatsache, dass es im Script-Verzeichnis abgelegt wird?

Ich habe Dir ein kleines Beispiel Skript gemacht, damit Du lesen kannst wie das geht. Kannst ja versuchen, die Trendlinie zu ergänzen.
Du lädst das im Editor - dann speichern unter Scripts - dann komplieren.
Neuen Chart aufmachen, ein paar Linien rein, eine Horizontale anklicken und Skript auf den Chart werfen. Ist nur die Horizontale, die ich drin habe (damit Du versuchen kannst, ob Du den Trend selber hinkriegst). Kannst natürlich auch alles andere versuchen, Code kürzen, erweitern ... :D
Und natürlich kann man so was auch als Indikator machen, der sonst noch welche Aufgaben hat (das Prinzip ist ja dasselbe).

Zitat:

Hast du noch einen Tipp, wo man sich ambesten in das Thema MQL-Programmierung reinfuchsen kann. Mir geht es erst mal weniger um EAs oder Indikatoren; eher um Skripten, die mir die das Leben erleichtern.
Am besten
1. im Editor - Hilfe - MQL4 Referenz
-. Inhalt ist so ne Art Buch
-. Index ist zum Suchen von etwas, einfach ein paar Zeichen in die Suchleiste
-. Suchen findet jedes Vorkommen in der ganzen Referenz (manchmal ziemlich viel)
2. im Editor Klick auf Wort, dann F1 Taste, ist DirektHilfe (Stelle in der Referenz)
3. im MetaTrader - Terminal - Bibliothek - Rechtsklick auf Überschrift
-. für Skripte nur die auswählen, dann kannst Du Beispiele herunterladen, die landen unter Scripts - Downloads
-. zum Lesen wie andere es vielleicht lösen

Hoffe, das hilft Dir, um Dich reinzubringen. AVT

drater 24.06.20 21:14

WOW! Ganz herzlichen Dank - damit hätte ich ja nicht gerechnet. Super! :) Klappt!

drater 25.06.20 18:49

@AVT: Ich habe mir das Skript angeschaut und viel dabei gelernt. Nochmals vielen Dank!
Bekanntlich kommt der ja Appetit beim essen ;). Ich habe mir daher eine Variante gebaut. Dabei wird ich keine Linie markiert, von der ab die Duplikate gezeichnet werden. Vielmehr gebe ich einen Kurswert vor und es wird eine Linie an diesem Kurs und die Duplikate gezeichnet.
Nun wollte ich bei der Eingabe gerne den Kurswert mit dem aktuellen BidPrice vorbelegen. Da bekomme ich leider eine Fehlermeldung, da man eine Konstante verwenden muss. Gibt es dafür eine Lösung?

Und dann ist mir noch eine Frage eingefallen, die etwas off-topic bzgl. des ursprünglichen Betreffs sind. Ich hänge sie hier mal an:
Kann man mittels eines Skripts eine Berechnung auf zwei beliebige Kerzen anwenden, die man per Maus anklickt. Also Bspw. den Abstand in Pips vom Hoch der einen Kerze zum Tief der anderen Kerze?

AVT 25.06.20 21:29

Zitat:

Zitat von drater (Beitrag 43974)
Vielmehr gebe ich einen Kurswert vor und es wird eine Linie an diesem Kurs und die Duplikate gezeichnet.
Nun wollte ich bei der Eingabe gerne den Kurswert mit dem aktuellen BidPrice vorbelegen. Da bekomme ich leider eine Fehlermeldung, da man eine Konstante verwenden muss. Gibt es dafür eine Lösung?

Ich nehme mal an, Du hast solch ein ähnliches Kontrukt (rot die Benutzereingabe für den Preis):
Code:

extern double PreisOriLinie = 10650; //Preis der Originallinie
extern double UpPlus  = 20;        //Point Abstand obere Parallele
extern double DnMinus = 40;        //Point Abstand untere Parallele

Wenn Du den im Skript auf = 0 setzt, dann kannst Du - bevor Du die Originallinie malen läßt, einen Check machen und den Wert auf Bid setzen, etwa so:
Code:

if(PreisOriLinie==0)  //BenutzerHatNixEingegeben
  PreisOriLinie=Bid; //DannNimmBidPreis
//... und nun Linie malen

Bid funktioniert immer, auch wenn man offline ist.
Zitat:

Kann man mittels eines Skripts eine Berechnung auf zwei beliebige Kerzen anwenden, die man per Maus anklickt. Also Bspw. den Abstand in Pips vom Hoch der einen Kerze zum Tief der anderen Kerze?
Ich bin mir nicht sicher, ob das funktioniert, weil Du da Maus-Events einfangen mußt und OnChartEvent geht nicht - wenn ich mich recht erinnere. Aber wenn Du das als Skript machen willst: zwischen den beiden Punkten ne Trendlinie zeichen und deren Start- und Endpunkt auswerten.
AVT

drater 26.06.20 19:45

Hallo AVT.

Zitat:

Zitat von AVT (Beitrag 43976)
Ich nehme mal an, Du hast solch ein ähnliches Kontrukt (rot die Benutzereingabe für den Preis):
Code:

extern double PreisOriLinie = 10650; //Preis der Originallinie

Nein, da habe ich mich wohl falsch ausgedrückt. Ich meinte eher so etwas (was aber einen Fehler hervorruft):
Code:

extern double PreisOriLinie = Bid; //Preis der Originallinie
Ich möchte also den Preis immer eingeben. Da die Linie üblicherweise in der Nähe des aktuellen Kurswertes liegen soll, wollte ich das Eingabefeld damit vorbelegen. Das verhindert Vertipper, weil man dann nur noch an den Dezimalstellen etwas verändern muss.

Das mit den beiden Kerzen anklicken habe ich inzwischen hingekriegt. :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum