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)
-   -   Linie (http://www.expert-advisor.com/forum/showthread.php?t=3568)

Ca$hDigger 20.03.14 14:13

Linie
 
Hallo,

hat jemand ein Codebeispiel zum zeichnen einer simplen Linie in den Chart?

Parameter sind:

-Zeitpunkt Linie Anfang
-Zeitpunkt Linie Ende
-Kurswert Linie Anfang
-Kurswert Linie Ende
-Linien-Farbe
-Linien-Dicke

lg C$D

Ca$hDigger 20.03.14 15:01

Hab was hinbekommen:

Code:

string strObjectName = "Linie1";
ObjectCreate(strObjectName, OBJ_TREND, 0, zeit1, wert1, zeit2, wert2);
ObjectSet(strObjectName, OBJPROP_RAY, false);
ObjectSet(strObjectName, OBJPROP_COLOR, Yellow);
ObjectSet(strObjectName, OBJPROP_WIDTH, 4);

Habe aber noch das Problem es wird nur 1x die Linie gezeichnet bei weiteren Aufrufen des Codes werden keine weiteren Linien erstellt woran kann das Liegen?

lg

fxdaytrader 20.03.14 15:07

Was willst denn genau machen?
Das Object "strObjectName" ist ja gezeichnet. Das kannst verschieben, löschen, neu erstellen usw.

Sollen noch andere Objekte gezeichnet werden müssen die auch anders heissen.
Hier könnte ein Zähler helfen, bspw.(vereinfacht) strObjectName+counter wobei sich "counter" bei jedem objekt um 1 erhöht

Ca$hDigger 20.03.14 15:26

Ach ja klar dank dir!
Ich nehme einfach strObjectName+Time[0] dann brauch ich nix seperat zählen ;)

traderdoc 20.03.14 15:31

Zitat:

Zitat von Ca$hDigger (Beitrag 25695)
Ach ja klar dank dir!
Ich nehme einfach strObjectName+Time[0] dann brauch ich nix seperat zählen ;)

Geht, macht aber das Zugreifen mittels ObjectGet() etwas kompliziert und unübersichtlich. Wenn z.B. der Price einer Linie ausgelesen werden soll braucht man den Objektnamen und dann mußt Du genau wissen, welchen Wert Time[0] damals hatte.

Nimm den vorgeschlagenen Zähler, ist einfacher.

traderdoc

André 27.08.14 17:49

Hallo, darf ich hier mal anknüpfen...

wie bekommt man es denn hin, dass die Linie NICHT als Strahl sondern lediglich von time1,price1 bis time2,price2 gezeichnet wird?

Gruß André :)

traderdoc 27.08.14 19:30

ObjectCreate(objectname, OBJ_TREND, 0, time1, price1, time2, price2);
ObjectSet(objectname, OBJPROP_RAY, false);

traderdoc

carnap 18.01.16 22:29

Hab zum gleichen Thema eine Frage und wollte nicht noch einen Thread eröffnen.

Möchte gerne zu einem bestimmten Zeitpunkt TimeCurrent() eine horizontale Linie ziehen, die eine bestimmte Länge in Zeiteiheiten (bars) haben soll hier 120.

Folgender Code habe ich versucht, der aber leider keine Linie zeichnet:
upperL liefert über commet einen Price, daran kann es also nicht liegen.

string strObjectName = "hlimit";
ObjectCreate("hlimit", OBJ_TREND, 0, TimeCurrent(), upperL, TimeCurrent()+120, upperL);
ObjectSet("hlimit", OBJPROP_RAY, false);
ObjectSet("hlimit", OBJPROP_STYLE, 2);
ObjectSet("hlimit", OBJPROP_COLOR, Green);
ObjectSet("hlimit", OBJPROP_WIDTH, 2);

Kann mir jemand sagen wo der Fehler liegt?

traderdoc 18.01.16 22:51

"die eine bestimmte Länge in Zeiteiheiten (bars) haben soll hier 120."
Soll bedeuten: (bars) -> also Kerzen!?,

D.h. 120 Kerzen nach rechts:
ObjectCreate("hlimit", OBJ_TREND, 0, TimeCurrent(), upperL, TimeCurrent()+120*Period()*60, upperL);

oder nach links:
ObjectCreate("hlimit", OBJ_TREND, 0, TimeCurrent(), upperL, TimeCurrent()-120*Period()*60, upperL);

traderdoc

carnap 18.01.16 23:07

Ja, es sind Kerzen. Macht das einen Unterschied ob Kerzen oder Bars?
+120 Period () klingt einleuchtend, aber wieso noch *60?

traderdoc 18.01.16 23:47

Zitat:

Zitat von carnap (Beitrag 32611)
Ja, es sind Kerzen. Macht das einen Unterschied ob Kerzen oder Bars?
+120 Period () klingt einleuchtend, aber wieso noch *60?

Ich wollte nur genau wissen, ob es sich wirklich um Bars (oder Kerzen) handelt.
*60, weil TimeCurrent() Sekunden darstellen und Period() Minuten.

traderdoc

carnap 18.01.16 23:49

Vermutlich 60sec. * Period(), das würde Sinn machen.

carnap 19.01.16 22:47

Jetzt habe ich noch eine Frage: wenn ich diese Linie jeden Tag zu einer bestimmten Uhrzeit zeichnen möchte muss ich vermutlich einen counter verwenden um den strObjectName zu verändern.
Aber wenn ich "hlimit+hl" nutze und hl hochzähle funktioniert es nicht.

string strObjectName = "hlimit";
ObjectCreate("hlimit", OBJ_TREND, 0, TimeCurrent(), upperL, TimeCurrent()+120*Period()*60, upperL);
ObjectSet("hlimit", OBJPROP_RAY, false);
ObjectSet("hlimit", OBJPROP_STYLE, 2);
ObjectSet("hlimit", OBJPROP_COLOR, Green);
ObjectSet("hlimit", OBJPROP_WIDTH, 2);


Habe ich einen Denkfehler?

traderdoc 19.01.16 23:22

"hlimit+hl" ist einfach ein String, der z.B. über Alert() ausgegeben den Schriftzug hlimit+hl ergeben würde.

Wenn Du eine Integerzahl hochzählen willst, um sie an einen String zu hängen dann so:

//neuer Tag
....
hl++;
ObjectCreate("hlimit" + (string)hl, OBJ_TREND, 0, TimeCurrent(), upperL, TimeCurrent()+120*Period()*60, upperL);

traderdoc

carnap 20.01.16 00:28

Danke für deine Hilfe traderdoc.
Habe es so eingebaut und es funktioniert.
Ich habe anscheinend zu kompliziert gedacht aund es mit einer for-Schleife probiert.

Bucardo 12.04.16 20:34

Manuelle horizontale Linie auslesen
 
Hallo zusammen,

der Übersichtlichkeit im Forum halber habe ich diesen Thread wieder reaktiviert.

Es geht wieder um horizontale Linien. Aktuell suche ich eine Möglichkeit den Preis einer manuell(!) gezeichneten Linie auszulesen und dann weiter als Globale Variable zu verwenden. Dazu nutze ich im Moment die ObjectGet Funktion. Dazu benötige ich allerdings des Namen der Linie, den ich aber ungern für jede Linie manuell eingeben will.

Hat jemand dazu einen Lösungsvorschlag?

Danke & Gruß,
Bucardo

Bucardo 12.04.16 21:26

Habe eine Lösung für mein Problem gefunden:

void OnTick()
{
//Linie auswerten START
int obj_total=ObjectsTotal();
for(int i=0;i<obj_total;i++)
{
string Objektname;
Objektname=ObjectName(i);
}
GlobalVariableSet(Symbol()+"_Swing-Level",ObjectGet(Objektname,OBJPROP_PRICE1));
//Linie auswerten ENDE
}

Falls jemand von den Profis noch Verbesserungsvorschläge hat, gerne her damit. Für meine Bedürfnisse funktioniert das soweit gut. :)

Gruß Bucardo

traderdoc 13.04.16 08:54

Das funktioniert aber nur sicher, wenn nur eine grafisches Objekt vorhanden ist.
Ansonsten wird das Programm immer das letzte gefundene Objekt nehmen.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:55 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