Geschrieben 20. Februar 201610 Jr. comment_156517 Hallo Zusammen, ich bin mal wieder auf eure Hilfe angewiesen. Also zu der Theorie:Ich will eine eigene Rangestraterie aufbauen.Aktuell funktioniert der Rangeaufbau mit manueller Vorgabe.Sprich, ich gebe meine Zeitvorgaben manuell vor, in welchem Zeitraum die Range aufgebaut werden soll und ab wann ich traden will. Ich möchte es folgendermaßen erweitern oder abändern.Ich habe eine Moving Average.Sobald eine Kerze z.b. oberhalb der Linie geschlossen wird, will ich diese Kerze als meinen Startpunkt für meinen Rangeaufbau festlegen. Der Startpunkt der Range sieht aktuell so aus: datetime RangeStartPunkt = StrToTime(TimeYear(TimeCurrent())+"."+TimeMonth(TimeCurrent())+"."+TimeDay(TimeCurrent())+" "+Range_Start_Stunde+":"+Range_Start_Minute); Ich stelle es mir grade einfach so vor: if(Linie_oben<Low[0]) TIMERHIGH = iTime(NULL,PERIOD_H1,0); Range_Start_Stunde = TIMERHIGHStelle ich es mir zu einfach vor?Könnt ihr mir bitte auf die Sprünge helfen. Melden
Geschrieben 21. Februar 201610 Jr. comment_156518 Mir ist noch nicht klar, was Du genau möchtest. Also wenn Du einen Close (bspw. im H1) über/unter einem MA hast, soll eine Range festgelegt werden. In welchen Grenzen? Melden
Geschrieben 21. Februar 201610 Jr. Autor comment_156519 naja das ist es ja. Sobald eine Kerze über/unter MA geschlossen wird, soll genau diese Kerze als mein Grenzanfang definiert werden. Den Grenzschluss will ich dann mit einem Offset auf den Grenzanfang definieren. Sprich: Grenze_Start: MA<Low Grenze_Stop: Grenze_Start + 8 Stunden + 20 Minuten Ich muss hier halt zuerst den Punkt "Grenze_Start" festlegen.Ich glaube, ich habe hiermit den Ansatz schon gefunden. Bin mir aber noch nicht sicher, ob es das gelbe vom Ei ist.Weil durch den Index 0 im Low oder High wird der Startpunkt mit jeder Kerze die über/unter dem MA ist aktuallisiert. string TIMERHIGH, TIMERLOW; if(MA<Low[0]) TIMERHIGH = TimeToStr(TimeCurrent(),TIME_MINUTES); if(MA>High[0]) TIMERLOW = TimeToStr(TimeCurrent(),TIME_MINUTES); Denke, dass ich hier aber wohl eine Schleife haben muss. Bearbeitet 21. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 21. Februar 201610 Jr. comment_156521 Nun mit 0 betrachtest Du ja immer die aktuelle und noch laufende Kerze. Da ist ja noch gar nicht klar, wie groß sie ist und ob sie den MA überhaupt nachhaltig kreuzt. Irgendwie verwirrt mich Dein Vorgehen wahrscheinlich mehr als es nötig ist. Versuche doch mal ganz deutlich nur in Worten zu beschreiben, was passieren soll. Ganz ohne Quelltext . Melden
Geschrieben 21. Februar 201610 Jr. Autor comment_156523 Sorry, ich denke wahrscheinlich wieder mal zu kompliziert. ich will den zeitpunkt einer kerze haben, die als erste über/unter dem ma geschlossen wird.diesen zeitpunkt will ich daraufhin als meinen startpunkt für meine range verwenden. Bearbeitet 21. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 21. Februar 201610 Jr. comment_156524 ... und die Range soll dann von wann bis wann und wo bis wo gehen? Melden
Geschrieben 21. Februar 201610 Jr. Autor comment_156525 bis wann die Range geht ist erstmal uninteressant.aktuell wird die Range durch externe variablen definiert.Ich will das so ändern, dass mir der Range-Startpunkt durch die ermittelte Kerze gestartet wird. Range-Start soll den Zeitpunkt einer Kerze bekommen, die als erste über meinem MA geschlossen wird. Die Frage ist hier einfach nur, wie kann ich einen Zeitpunkt einer Kerze ermitteln. Melden
Geschrieben 22. Februar 201610 Jr. comment_156526 Die Frage ist hier einfach nur, wie kann ich einen Zeitpunkt einer Kerze ermitteln. Bspw. mit iTime dürfte das gehen.https://docs.mql4.com/series/itime Ich kann mir im Groben vorstellen, was Du vorhast, würde das aber ganz anders angehen. Melden
Geschrieben 22. Februar 201610 Jr. Autor comment_156529 Ich bin immer offen für andere Wege 😉 und natürlich auch dankbar für weitere Vorschläge. Auch so lernt man ja dazu. Wie würdest du es denn machen? Melden
Geschrieben 22. Februar 201610 Jr. comment_156530 1. Kerze suchen, die zuletzt den MA gekreuzt hat. Bspw. mit einer while-Schleife. Bedingung wäre ja, dass die Kerze X zum Zeitpunkt i über dem MA geschlossen hat und zu i+1 darunter (oder umgekehrt, je nach Richtung).2. Zeitpunkt (und ggf. Kurse) dieser Kerze X merken.3. Das tun, was getan werden muss, aber hier noch nicht genannt wurde . Melden
Geschrieben 22. Februar 201610 Jr. Autor comment_156534 ja an eine Schleife habe ich auch schon gedacht.Meinst du in etwa so hier: nt a; int AnzahlKerzen = 2; bool Break; while (a<AnzahlKerzen && !Break) { double MA_now = iCustom(NULL,Zeiteinheit,iBaender,55,0,0.2,1,a); double MA_prev = iCustom(NULL,Zeiteinheit,iBaender,55,0,0.2,1,a+1); if((Close[0] > MA_now) && (Close[1] < MA_prev)) { datetime Zeitpunkt_Long = iTime(NULL,60,0); } else { Zeitpunkt_Long = 0; Break=true; a++; } } Bearbeitet 22. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 23. Februar 201610 Jr. comment_156536 Nö, eigentlich nicht, aber fast .Die Kerze 0 ist immer die aktuelle Kerze. Da kann sich der Close noch verändern.Du müsstest also schauen, ob 1 über dem MA ist und 2 drunter. Vor allem hat a auch keinen Anfangswert bei Dir bzw. wird nicht zurück gesetzt. Könnte Probleme geben.Evtl. tippe ich im Laufe des Tages mal ein paar Zeilen. Sicherlich sind da mehrere Lösungen möglich - jeder denkt und programmiert halt anders . Melden
Geschrieben 23. Februar 201610 Jr. Autor comment_156538 Also ich habe den Index abgeändert, aber es scheint sich ein wurm dort eingeschlichen zu haben.Sobald meine Bedingung erfüllt ist, friert der Tester ein. Schätze er hängt sich dann in der Schleife auf. Es wäre super nett von dir, wenn du dir die Zeit dafür nehmen könntest und mir bei den Zeilen helfen könntest. Aktuell sieht der Code so aus: int a=1; int AnzahlKerzen = 2; bool Break; while (a<AnzahlKerzen && !Break) { double MA_now = iCustom(...,a); double MA_prev = iCustom(...,a+1); if((Close[1] > MA_now) && (Close[2] < MA_prev)) { datetime Zeitpunkt_Long = iTime(NULL,60,1); } else { Zeitpunkt_Long = 0; Break=true; a++; } } Melden
Geschrieben 23. Februar 201610 Jr. comment_156540 Das er sich aufhängt ist ja kein Wunder. Du nutzt ja immer Close[1] und Close [2].Auch dort musst Du natürlich Close[a] und Close[a+1] nehmen. Beim Zeitpunkt das Gleiche. Ich würde es so machen (habe es aber nicht getestet): int a=1; double MA_now = iCustom(...,a); double MA_prev = iCustom(...,a+1); while (Close[a] > MA_now && Close[a+1] > MA_prev) { MA_now = iCustom(...,a); MA_prev = iCustom(...,a+1); a++; if (a>=Bars-1) break; } datetime Zeitpunkt_Long = TimeHour(iTime(NULL,0,a)); P.S.: wenn Du die Stunde rausfinden möchtest, solltest Du das besser mit TimeHour machen und nicht bei iTime eine 60 eintragen. Melden
Geschrieben 23. Februar 201610 Jr. Autor comment_156545 Super, ich danke dir vielmals. Jetzt klappt es Kannst du mir bitte noch zum besseren Verständnis die Schleife erklären.Warum muss der MA_now und MA_prev nochmals in die While-Schleife und dann auch noch ohne "double" ? Es sieht irgendwie doppelt gemoppelt aus. Bearbeitet 23. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 24. Februar 201610 Jr. comment_156547 Die MAs müssen sogar in erster Linie in der Schleife sein. Denn nur dort wird ja letztendlich nach hinten gezählt und geguckt (also a erhöht).Vor der Schleife sind sie nur, um den Anfangswert festzulegen und somit die Schleife erst möglich zu machen. Die Idee ist folgende: schaue immer, ob zum Zeitpunkt a der Close über dem MA liegt UND der Close eine Kerze vor a auch über dem dortigen MA.Wenn dem so ist, springe eine Kerze nach links (a++). Wenn dem nicht mehr so ist, hat er ja den Cross gefunden und sich die Stelle a gemerkt.Von der nehmen wir dann die Stunde. Wenn er am Ende des Charts angekommen ist (Bars-1) und keinen Cross gefunden hat, dann höre auf. Das double dient zur Definition des Variablentyps. Wenn Du es in der Schleife nochmal vor die MAs schreibt, wird er rum meckern, dass die Variablen schon definiert sind.Probiere es mal aus. Man kann/muss dann noch zwischen globalen und lokalen Variablen unterscheiden, aber das führt hier zu weit. Achte bitte auch noch darauf, dass Du die richtigen Charts nimmst. Wenn Du den Timeframe im MA auf bspw. 60 festgelegt hast, solltest Du mit iClose anstatt Close arbeiten.Das Close macht nur Sinn, wenn der Timeframe im MA auf 0 eingestellt ist. Durch den gekürzten Text konnte ich das nicht sehen, was nun richtig ist. Gleiches gilt für Bars bzw. iBars. P.S.: Wenn Dir ein Beiträg sehr gut gefällt, kannst Du ihn mit dem (grünen) Pfeil rechts unten bewerten . Melden
Geschrieben 24. Februar 201610 Jr. comment_156548 @conglom-oOller Sammler, habe Deinem Wusch schon entsprochen (Auch wenn ich den Beitrag nicht so gut fand, da ich immer nur Hubschrauber verstehe) Melden
Geschrieben 24. Februar 201610 Jr. comment_156549 @conglom-oOller Sammler, habe Deinem Wusch schon entsprochen (Auch wenn ich den Beitrag nicht so gut fand, da ich immer nur Hubschrauber verstehe) Na dann verstehst Du schon mehr als ich - ich wähle immer nur willkürlich Buchstaben auf meiner Tastatur aus.Die werden dann so lange geändert bis bei der Kompilierung keine Fehlermeldung mehr kommt ! P.S.: Du bist ein Schatz ! Melden
Geschrieben 24. Februar 201610 Jr. Autor comment_156550 vielen dank conglom-o.Hast mir super weiter geholfen.Einen schönen Tag wünsche ich dir ;-) Melden
Geschrieben 25. Februar 201610 Jr. Autor comment_156557 Hallo conglom-o, ich habe mir den Ablauf nochmal genauer angeschaut. Und es sieht aktuell immer so aus, dass meine Rangegröße erst nach der zweiten Kerze aufgebaut wird. Auf dem Bild sieht man hoffentlich, dass die Range jetzt auf der Kerze mit dem roten Pfeil aufgebaut wird.Es soll aber schon auf die Kerze mit dem weißen Pfeil aufgebaut werden. Die Logik sieht aktuell so aus: (iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) > MA_prev) Normalerweise hätte ich die Logik so hier gemacht: (iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) < MA_prev) Aber so findet er den Cross komischerweise gar nicht mehr.Hast du vielleicht eine Idee, was hier los ist. Schau dir mal den Screenshot an. Ich hoffe du verstehst was ich meine. P.S.: ich habe die Range jetzt extra so klein gemacht, damit man es hoffentlich besser erkennt was ich meine. Bearbeitet 25. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 25. Februar 201610 Jr. comment_156558 Also auf dem Bild erkennt man nicht wirklich was. Kannst Du das nochmal mit einem Kerzenchart und größer machen? Und auch so, dass man den GD sehen kann?Mit iLow prüfst Du ja letztendlich, ob die gesamte Kerze drüber geblieben ist. Soll das so sein? Du bastelst außerdem ja auch was ganz anderes plötzlich. In der WHILE Schleife muss die Logik so sein, wie von mir geschrieben.Wenn Du plötzlich mit einer if-Abfrage arbeitest, muss das gesamte Konstrukt anders aufgebaut werden. Melden
Geschrieben 26. Februar 201610 Jr. Autor comment_156560 hi,also das mit iLow ist schon richtig so. IF-Schleife habe ich hier nicht. Deine While-Schleife sieht aktuell so aus: int a=1; double MA_now = iCustom(NULL,...,a); double MA_prev = iCustom(NULL,...,a+1); while ((iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) > MA_prev) || (iHigh(NULL,0,a) < MA_now && iLow(NULL,0,a+1) < MA_prev)) { MA_now = iCustom(NULL,...,a); MA_prev = iCustom(NULL,...,a+1); a++; if (a>=Bars-1) break; } Ich habe dort einfach nur die Bedingung für Short hinzugefügt. Zu dem Bild:- Die Range wird hier gelb markiert und bildet sich aus der Kerze, die mit rotem Pfeil markiert ist.- Der GD läuft hier unterhalb der Kerzen und ist mit der Farbe "Aqua" markiert.- Die Range SOLL an der Kerze aufgebaut werden, die mit blauem Pfeil markiert ist. Deswegen wäre ja hier eigentlich die Logik, dass Kerze_prev < MA_prev && Kerze_now > MA_now.Aber wenn ich das so schreibe, findet er den Cross nicht. Bearbeitet 26. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 26. Februar 201610 Jr. comment_156561 hi,also das mit iLow ist schon richtig so. IF-Schleife habe ich hier nicht. Deine While-Schleife sieht aktuell so aus: int a=1; double MA_now = iCustom(NULL,...,a); double MA_prev = iCustom(NULL,...,a+1); while ((iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) > MA_prev) || (iHigh(NULL,0,a) < MA_now && iLow(NULL,0,a+1) < MA_prev)) { MA_now = iCustom(NULL,...,a); MA_prev = iCustom(NULL,...,a+1); a++; if (a>=Bars-1) break; } Ich habe dort einfach nur die Bedingung für Short hinzugefügt. Zu dem Bild:- Die Range wird hier gelb markiert und bildet sich aus der Kerze, die mit rotem Pfeil markiert ist.- Der GD läuft hier unterhalb der Kerzen und ist mit der Farbe "Aqua" markiert.- Die Range SOLL an der Kerze aufgebaut werden, die mit blauem Pfeil markiert ist. Deswegen wäre ja hier eigentlich die Logik, dass Kerze_prev MA_now.Aber wenn ich das so schreibe, findet er den Cross nicht. Bei Deiner short Bedingung vergleichst Du aber ein High mit dem MA und dann ein Low mit dem MA - das ist bestimmt nicht so gewollt .Auf dem Bild ist wieder nichts zu erkennen - besser ohne die Striche im Hintergrund, nur Kerzen und der MA und dann in besserer Auflösung. Melden
Geschrieben 26. Februar 201610 Jr. Autor comment_156562 Betrachten wir zuerst die Long-Logik hier noch ein Bild: Bearbeitet 26. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 26. Februar 201610 Jr. comment_156563 Also wenn es immer(!) die Kerze rechts davon ist, erhöhe a einfach nochmal um 1. Dann passt es ja.Normalerweise müsste er a schon erhöht haben, aber was ist schon normal ? Melden
Geschrieben 26. Februar 201610 Jr. Autor comment_156565 Du meinst das a dann mit 2 anstatt mit 1 definieren? Melden
Hallo Zusammen,
ich bin mal wieder auf eure Hilfe angewiesen.
Also zu der Theorie:
Ich will eine eigene Rangestraterie aufbauen.
Aktuell funktioniert der Rangeaufbau mit manueller Vorgabe.
Sprich, ich gebe meine Zeitvorgaben manuell vor, in welchem Zeitraum die Range aufgebaut werden soll und ab wann ich traden will.
Ich möchte es folgendermaßen erweitern oder abändern.
Ich habe eine Moving Average.
Sobald eine Kerze z.b. oberhalb der Linie geschlossen wird, will ich diese Kerze als meinen Startpunkt für meinen Rangeaufbau festlegen.
Der Startpunkt der Range sieht aktuell so aus:
Ich stelle es mir grade einfach so vor:
Stelle ich es mir zu einfach vor?
Könnt ihr mir bitte auf die Sprünge helfen.