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

Lena 07.08.17 16:36

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.

RetepM 08.08.17 10:19

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);

Adlerauge 11.08.17 22:00

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.

Adlerauge 12.08.17 00:06

Liste der Anhänge anzeigen (Anzahl: 1)
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....))

next user 12.08.17 04:09

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);

1. Wenn I_ZR z.B. 2 ist, so sieht deine Abfrage so aus:
- 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.
Jetzt ist es aber so, das 0 als false, alles ungleich 0 (also auch -1) als true interpretiert wird. Somit ist deine Abfrage TRUE, wenn der Suchstring gefunden wurde,
und ebenfalls TRUE, wenn er 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...

Adlerauge 12.08.17 08:58

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.


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