|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Da gab es im Code doch noch einen ganz üblen Bug der im Testmodus nicht aufgefallen ist. Man muss noch eine Startpunkt definieren, ab wo der höchste und tiefste Wert ermittelt werden soll. Im Programm wird ja immer ab 1 dem ersten Bar gezählt. Das passt auch, sofern man immer genau am Tageswechsel den EA startet. Ansonsten sieht das Ergebnis nämlich sehr katastrophal aus.
Ich habe es so gelöst. Ich ermittel die Bars des aktuellen Tages mit: int Bars(... Diese addiere ich dann zum Startparameter hinzu. |
|
|||
Hi,
Wenn Du wirklich nur die "Daily"-Werte für Deine Trendlinien brauchst, kannst Du das ganz einfach mit iTime(NULL,PERIOD_D1,1) und dazu passend iHigh(NULL,PERIOD_D1,1) . Beachte aber, dass wenn eine der beiden Bars beträchtlich größer ist als die andere und die beiden eng aneinander liegen, bekommst Du Trendlinien mit einer sehr großen Steigung! z.B. so was: ObjectCreate(objName1, OBJ_TREND, 0, iTime(NULL,PERIOD_D1,14),iHigh(NULL,PERIOD_D1,14), iTime(NULL,PERIOD_D1,1), iHigh(NULL,PERIOD_D1,1)); ObjectCreate(objName2, OBJ_TREND, 0, iTime(NULL,PERIOD_D1,14),iLow(NULL,PERIOD_D1,14), iTime(NULL,PERIOD_D1,1), iLow(NULL,PERIOD_D1,1)); und dann vielleicht noch so was: ObjectSet(objName1, OBJPROP_RAY, true); ObjectSet(objName1, OBJPROP_COLOR,ColorUpperLine); ObjectSet(objName1,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(objName1,OBJPROP_WIDTH,1); |
|
|||
Vorsicht mit der Funktion ObjectGetValueByShift().
Diese liefert bei Kanälen teilweise falsche Werte (sie hat mir regelmässig für den Ankerpunkt der Parallel-Linie einen negativen Wert mit 5 Vorkomma-Stellen errechnet - kann nicht sein!) Bei Trendlinien ist mir noch kein Fehler aufgefallen, aber ich benutze sie vorsichtshalber gar nicht mehr, sondern benutze für die lineare Interpolation eine eigene Funktion. |
|
|||
Hallo Lena,
ich habe mal meinen Trendlinien-Zeichner an Deine Vortages-Wünsche angepasst... siehe Anhang Er arbeitet mit 2 ineinander verschachtelten For-Schleifen, wobei die 2. For-Schleife nur dazu dient, den Ausgangs-Punkt gegebenenfalls vom Vortages-Tief bzw. -Hoch nachzurücken. Das kann teilweise dazu führen, dass eine bereits gebrochene Trendlinie gezeichnet wird. Die Linien werden gezeichnet, wenn Du in den Chart klickst. Ich hoffe, das kommt dem nahe, was Du suchst....)) |
|
|||
Hi Adlerauge,
mal ne kleine Anmerkung zu folgendem Codeteil Code:
if(StringFind("obere Trendlinie " + IntegerToString(I_ZR), IntegerToString(I_ZR), 0)) ObjectDelete("obere Trendlinie " + IntegerToString(I_ZR)); ObjectCreate(NULL,"obere Trendlinie " + IntegerToString(I_ZR), OBJ_TREND, 0, date_time_1, d_preis_1, date_time_2, d_preis_2); - Prüfe im String "obere Trendlinie 2", ob der String "2" vorhanden ist. - Deine Abfrage liefert also absolut immer TRUE. Denke nicht, das das so gemeint war, oder? - Außerdem ist die Abfrage auch sonst nicht gut formuliert, denn die Funktion StringFind(...) liefert -1, wenn der Suchstring nicht gefunden wurde.2. Um das schon vorhandene Objekt zu löschen sollte eine vorherige Abfrage mit der Funktion ObjectFind(...) durchgeführt werden. StringFind(...) hat hier weder echten Bezug zum Objektnamen, noch ist sie hier sinnvoll angewendet. Das nur mal kurz am Rande... |
|
|||
Hi next_user
ups, da hast du Recht, die Zeile mit dem Stringfind ist beim Zurechtkürzen meines eigentlichen Codes aus Versehen stehen geblieben - die kann hier zurecht raus (schadet aber auch nicht) ObjectDelete sollte aber drinstehen. |
Lesezeichen |
Stichworte |
mql4, programmierung, programmierung metatrader, programmierung mql4, trendlinie, trendlinien |
|
|