Geschrieben 20. August 200916 Jr. comment_86493 Hallo, ich schreibe gerade einen Indikator der Linien in ein Chart einzeichnet dazu benötige ich allerdings "begrenzte" Linien (also nur von Anfang bis Endpunkt). In einem kommerziellen Indikator habe ich das bereits gesehen. Das Ganze funktioniert ja über den Aufruf z.B.: check=ObjectCreate(sMarkName,OBJ_TREND,0, dtStart, dValueStart, dtEnd, dValueEnd); Ich finde aber ausser den Trendlinien kein Objekt, das eine begrenzte Linie zeichnet. Und Trendlinien sind ja in eine Richtung "unbegrenzt". Muss ich da noch eine Property setzen oder muss ich ein anderes Objekt verwenden anstatt von "OBJ_TREND"??? für einen Tipp wäre ich sehr dankbar... wingman Melden
Geschrieben 20. August 200916 Jr. comment_86495 Ja du musst noch OBJPROP_RAY einstellen auf False. ObjectSet(sMarkName, OBJPROP_RAY, FALSE); Noch ein Tip,mit OBJPROP_BACK kannst du bestimmen ob hinter oder vor dem Chart Bars gezeichnet werden soll. Melden
Geschrieben 20. August 200916 Jr. Autor comment_86502 das war genau was ich gesucht habe. dankeschön. Melden
Geschrieben 15. Oktober 200916 Jr. comment_88003 Könntet Ihr bitte mal genauer ausführen, wie man eine Linie in einem EA programmiert? Wenn ich sage: if(!ObjectCreate("runter", OBJ_TREND, 0, Start, Wert1,End,Wert2)) { Alert("error: can't create text_object! code #",GetLastError()); return(0); }, wobei die Werte doubles und die punkte ints sind, bekomme ich nur die nichtssagende Meldung "error: ... #4200". Melden
Geschrieben 15. Oktober 200916 Jr. comment_88004 Doku MQL errors: ERR_OBJECT_ALREADY_EXISTS (4200) Melden
Geschrieben 16. Oktober 200916 Jr. Autor comment_88006 einfach mal ein Beispiel:zeichnet eine Grüne Linie vom aktuellen Bar bis zum vergangenen 10 Bar an der Y-Position 1.4232 int iCheck;string sMarkName="Gruene Linie";iCheck=ObjectCreate(sMarkName,OBJ_HLINE,0, Time[10], 1.4232, Time[0],1.4232);iCheck=ObjectSet(sMarkName,OBJPROP_WIDTH,1);iCheck=ObjectSet(sMarkName, OBJPROP_COLOR, LimeGreen); if(!iCheck) { Print("error: can't create object! code #",GetLastError());} Melden
Geschrieben 16. Oktober 200916 Jr. comment_88008 Wunderbar, damit hab ich die erste Etappe abschließen können. Melden
Geschrieben 16. Oktober 200916 Jr. comment_88017 Eine Frage noch, die vlt. ganz gut zu dem Thema passt. Muss ich dann jetzt nur noch sagen: if (aktBar => iCheck) { Aktion;} ? Melden
Geschrieben 16. Oktober 200916 Jr. Autor comment_88022 Eine Frage noch, die vlt. ganz gut zu dem Thema passt. Muss ich dann jetzt nur noch sagen: if (aktBar => iCheck) { Aktion;} ? Nein. Die Variable iCheck enthält 0 , wenn alle Befehle korrekt ausgeführt werden konnten, d.h. im Endeffekt:- das Objekt wurde generiert iCheck=ObjectCreate(sMarkName,OBJ_HLINE,0, Time[10], 1.4232, Time[0],1.4232);- Die "Dicke" der Linie wurde richtig gesetzt iCheck=ObjectSet(sMarkName,OBJPROP_WIDTH,1);- Die Farbe der Linie wurde auf grün gesetzt iCheck=ObjectSet(sMarkName, OBJPROP_COLOR, LimeGreen); iCheck ist in diesem Fall eine Integervariable über die Du abfragen kannst ob ein Fehler aufgetreten ist. Du kannst iCheck auch weglassen, dann hast Du kein Fehlermanagement in Deinem Code aber der Code funktioniert trotzdem. Melden
Geschrieben 17. Oktober 200916 Jr. comment_88024 Ja ok, ne Fehlerverarbeitung ist natürlich sinnvoll.Jetzt fehlt mir allerdings die Vorstellung, wie ich aus der berechneten Linie das Setzen oder Modifizieren einer Order ableiten kann. Die beiden Punkte, welche zur Linie führen, liegen in der Vergangenheit. Zur Entscheidung brauch ich jedoch den entsprechenden Wert an Bar[0]. Ich dachte man könnte das irgendwie in Beziehung setzen. Oder muss ich, weil es ja ein linearer Prozess ist, einfach nur die Steigung berechnen und diese dann bis zum Bar[0] runterbrechen. Fände das irgendwie nicht so galant. Melden
Geschrieben 17. Oktober 200916 Jr. Autor comment_88035 ...Zur Entscheidung brauch ich jedoch den entsprechenden Wert an Bar[0]. Ich dachte man könnte das irgendwie in Beziehung setzen. Oder muss ich, weil es ja ein linearer Prozess ist, einfach nur die Steigung berechnen und diese dann bis zum Bar[0] runterbrechen. Fände das irgendwie nicht so galant. Dazu liefert Metatrader schon die passende Funktion double dPrice=ObjectGetValueByShift("MyTrendLine#123", i);i ist dein aktueller Bar Damit bekommst du den Wert der Trendlinie an Bar 0 (wenn du i=0) setzt. Anmerkung zu meinem vorigen Posting. Die Funktionen "ObjectCreate" und "ObjectSet" liefern einen bool-Wert zurück, also 0 und 1. Das heisst die Variable iCheck sollte besser vom Typ bool anstatt integer sein, wie in meinem Beispiel und demnach dann auch bCheck heissen. Melden
Hallo,
ich schreibe gerade einen Indikator der Linien in ein Chart einzeichnet dazu benötige ich allerdings "begrenzte" Linien (also nur von Anfang bis Endpunkt). In einem kommerziellen Indikator habe ich das bereits gesehen.
Das Ganze funktioniert ja über den Aufruf z.B.:
check=ObjectCreate(sMarkName,OBJ_TREND,0, dtStart, dValueStart, dtEnd, dValueEnd);
Ich finde aber ausser den Trendlinien kein Objekt, das eine begrenzte Linie zeichnet. Und Trendlinien sind ja in eine Richtung "unbegrenzt"
. Muss ich da noch eine Property setzen oder muss ich ein anderes Objekt verwenden anstatt von "OBJ_TREND"???
für einen Tipp wäre ich sehr dankbar...
wingman