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 26. Februar 201610 Jr. comment_156566 Ich hab das hier jetzt nur quer gelesen, aber so wie ich das verstehe, willst du den Zeitpunkt (die Kerze) ermitteln, wenn eine Kerze von unten den MA kreuzt und dann komplett überhalb des MA schliesst und umgekehrt.Wenn dem so ist, dann kannst du das nicht in einer while-Schleife abhandeln.Du brauchst zwei. Eine für den Fall, dass du von unten nach oben kreuzt und eine zweite für von oben nach unten.Beide wären dann if-verknüpft, so dass sie sich gegenseitig ausschliessen. Du musst dir also merken, kommst du von unten oder von oben.Noch ein Tip. Anstelle von iLow(NULL,0,a) kannst du auch einfach Low[a] schreiben.Ferner tust du dich leichter, wenn du den MA in einen Buffer schreibst, dann brauchst du ihn nicht immer 2x (MA_now, MA_prev) berechnen. Warum deine Erkennung einen Versatz hat ist aber anhand des Codes, den du hier postest nicht zu erkennen. Da müsstest du mal mehr zeigen. Melden
Geschrieben 26. Februar 201610 Jr. Autor comment_156567 so wie ich das verstehe, willst du den Zeitpunkt (die Kerze) ermitteln, wenn eine Kerze von unten den MA kreuzt und dann komplett überhalb des MA schliesst und umgekehrt. Das hast du richtig erkannt ;-) Ich glaube, dass die aktuelle Logik schon gut ist. Aber es fehlt nur eine Kleinigkeit. Schließen wir jetzt einfach mal die LONG-Bedingung aus und bleiben nur bei Short.Aktuell sieht die Bedingung z.B. für Short ja so aus: while (iHigh(NULL,0,a) < MA_now && iLow(NULL,0,a+1) < MA_prev) Ist jetzt erstmal egal, ob ich iLow nehme oder Low[ ] (Aber auf jeden Fall danke für den Tipp). Die Bedingung sagt ja: ist mein Low[1] größer MA[1] und Low[2] größer MA[2], dann merke Kerze! Ist ja auch eigentlich soweit richtig laut diesem Screenshot. Das Problem dabei ist aber nicht nur, dass erst die zweite Kerze gespeichert wird, sondern meine Bedingung eigentlich auch immer dann erfüllt ist, solange ein definitiver Trend vorliegt.Und das darf so nicht so sein. Ich will ja nur das kreuzen betrachten. Richtiger wäre die Logik aber doch für meinen Fall eigentlich, wenn ich sage:ist mein Low[1] größer MA[1] und Low[2] kleiner MA[2], dann merke Kerze! Aber wenn ich das so ändere, dann findet er den Cross nach unten einfach nicht. Und das verstehe ich nicht. P.S.: das mit den Buffern kenne ich noch nicht (Anfänger) Bearbeitet 26. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 27. Februar 201610 Jr. comment_156569 while (iHigh(NULL,0,a) < MA_now && iLow(NULL,0,a+1) < MA_prev) Die Bedingung sagt ja: ist mein Low[1] größer MA[1] und Low[2] größer MA[2], dann merke Kerze! Genau das tut sie mit Deinem Quelltext eben NICHT (siehe eines meiner vorherigen Postings). @WOGOBzgl. iLow und Low: ich hatte ihm geraten, dass so zu bauen, weil im Ursprungsquelltext die Zeitebene frei einstellbar war. Das würde mit Low nicht umsetzbar sein. Melden
Geschrieben 27. Februar 201610 Jr. comment_156570 So wie du das machst wird das nix . Du kannst nicht von rechts nach links im Chart suchen, wenn du eine Erkennung von links nach rechts haben willst.Und dein Problem mit dem Kreuzen kannst du so lösen, wie ich geschrieben hab. Unterschiedliche Pfade für Kreuzen von oben nach unten und unten nach oben.Etwa so: ... double MA_prev; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); int i=Bars-counted_bars-1; int direction=1; //1:Suche Kreuzen unten => oben //2:Suche Kreuzen oben => unten while(i>=0) { MA_prev=iCustom(...,i+1) if(direction==1) { if(Low[i+1]>MA_prev) { direction=2; ...//hier machst du dein Range-Handling } } else { if(High[i+1]<MA_prev) { direction=1; ...//hier machst du dein Range-Handling } } i--; } Melden
Geschrieben 27. Februar 201610 Jr. comment_156571 So wie du das machst wird das nix . Du kannst nicht von rechts nach links im Chart suchen, wenn du eine Erkennung von links nach rechts haben willst. Natürlich kannst Du das. Genau das macht nämlich die while Schleife. Vorgehen ist folgendes: gehe so lange von rechts nach links bis die linke der zwei betrachteten Kerzen nicht mehr über (bzw. unter) dem GD ist. Das dürfte sogar für long und short gleichzeitig gehen. Aber man sollte High, Low und Close schon konsequent einsetzen und nicht irgendwas verwurschteln . Melden
Geschrieben 27. Februar 201610 Jr. Autor comment_156576 Hallo Wago,danke für deinen Ansatz.Ich habe das ganze jetzt mal mit meiner Bedingung verknüpft, aber das geht so gar nicht... /+------------------------------------------------------------------+ //|========================CROSS-OVER-LOGIK==========================| //+------------------------------------------------------------------+ double MA_now, MA_prev; datetime Range_Start_Hour; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); int a=Bars-counted_bars-1; int direction=1; { //1:Suche Kreuzen unten => oben //2:Suche Kreuzen oben => unten while(i>=0) MA_now = iCustom(NULL,...,a); MA_prev = iCustom(NULL,...,a+1); if(direction==1) { if(iLow(NULL,0,a) > MA_now && iLow(NULL,0,a+1) < MA_prev) { direction=2; Range_Start_Hour = TimeHour(iTime(NULL,0,a)); } } else { if(iHigh(NULL,0,a) < MA_now && iLow(NULL,0,a+1) > MA_prev) { direction=1; Range_Start_Hour = TimeHour(iTime(NULL,0,a)); } } a--; } Die Funktion "indikator counted" - kann ich sie überhaupt in einem EA aufrufen?Ich habe diese Funktion bisher nur in einem Indikator gesehen. Sorry, wenn die Frage absolut doof klingt, bin wie schon erwähnt ein Anfänger. Der Ansatz sieht an sich aber schon ganz gut aus. Aber komischerweise siehts auch so aus, als würde der EA gar nicht starten können.Weil ich habe ich noch einige Kommentarfunktionen integriert. Und selbst diese tauchen beim Testen nicht auf. @Conglom-O:dein code funktioniert ja auch super. Das Problem für mich ist halt nur, dass mir diese zweite Kerze schon teilweise zu spät ist.Ich brauche direkt die erste Kerze, die über/unter dem GD ist. Und was noch dazu kommt, dass hiermit meine Kerze auch dann gespeichert wird, wenn ich im direkten Trend bin. Sprich z.B. Kerze[1] > Kerze[2] ist. Ich brauche ja nur den Cross. Bearbeitet 27. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 27. Februar 201610 Jr. comment_156578 dein code funktioniert ja auch super. Das Problem für mich ist halt nur, dass mir diese zweite Kerze schon teilweise zu spät ist.Ich brauche direkt die erste Kerze, die über/unter dem GD ist. Und was noch dazu kommt, dass hiermit meine Kerze auch dann gespeichert wird, wenn ich im direkten Trend bin. Sprich z.B. Kerze[1] > Kerze[2] ist. Ich brauche ja nur den Cross. Meiner ja. Aber Dein erweiterter hat einen FEHLER!!!Oder hast Du den jetzt schon korrigiert? Hast Du Skype? Melden
Geschrieben 28. Februar 201610 Jr. comment_156579 Die Funktion "indikator counted" - kann ich sie überhaupt in einem EA aufrufen?Ich habe diese Funktion bisher nur in einem Indikator gesehen.Achso, du willst die Erkennung direkt in einen EA einbauen. Dann geht "indikator_counted" nicht! Melden
Geschrieben 28. Februar 201610 Jr. Autor comment_156580 @conglom-o:welchen Fehler meinst du? Also ich habe jetzt deinen Code nochmal abgekürzt und nur noch die Long-Bedingung gelassen. Und der Code sieht so aus: int a=1; double MA_now = iCustom(NULL,...,a); double MA_prev = iCustom(NULL,...,a+1); while (iLow(NULL,60,a) > MA_now && iLow(NULL,60,a+1) > MA_prev) { MA_now = iCustom(NULL,...,a); MA_prev = iCustom(NULL,...,a+1); a++; if (a>=Bars-1) break; } Wie gesagt, der Code funktioniert ja soweit so gut.Aber er sagt aus, dass Kerze[1] und Kerze[2] über dem MA sein sollen. Soll aber nur Kerze[1] über dem MA und Kerze[2] muss unter MA sein. Somit würde ich doch den Cross anschauen.Demzufolge müsste mein "while" doch so hier aussehen: while (iLow(NULL,60,a) > MA_now && iLow(NULL,60,a+1) < MA_prev) Oder denke ich hier etwas zu perplex? P.S.: Skype nutze ich zwar nicht, kann es aber installieren wenn es sein muss.P.P.S: was ich aber an deinem Code auch super finde, dass die Range direkt neu aufgebaut wird, sobald ich den MA nochmal berühre. Bearbeitet 28. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 28. Februar 201610 Jr. comment_156581 P.S.: Skype nutze ich zwar nicht, kann es aber installieren wenn es sein muss.P.P.S: was ich aber an deinem Code auch super finde, dass die Range direkt neu aufgebaut wird, sobald ich den MA nochmal berühre. Muss nicht, Du kannst mich gerne auch anrufen. Glaube es ist im direkten Gespräch schneller erklärt.Bin noch bis ca. 15:30h zu erreichen und dann wieder ab 18:00h. Melden
Geschrieben 28. Februar 201610 Jr. Autor comment_156582 Also...ich habe jetzt einen MA-Crossover-Indikator gefunden und konnte ihn auch soweit einstellen, dass meine Bedingung mit einem Pfeil in die entsprechende Richtung angezeigt wird. Ist es möglich jetzt über die iCustom-Funktion den Zeitpunkt des jeweiligen Pfeils auszulesen oder halt den Zeitpunkt auszulesen, indem ein Pfeil gezeichnet wurde? Oder das grade gehüpft wie gesprungen? Bearbeitet 28. Februar 201610 Jr. von Gunner_Duck Melden
Geschrieben 28. Februar 201610 Jr. comment_156583 Oder das grade gehüpft wie gesprungen? Ja, ist es . Bei Custom Indikatoren hast Du aber immer das Problem, dass Du von denen abhängig bist.Aber wenn es funktioniert, kannst Du es mit denen machen. Melden
Geschrieben 28. Februar 201610 Jr. Autor comment_156584 Ja mit gehüpft wie gesprungen meinte ich, dass ich immer den Zeitpunkt einer Kerze haben muss Also zu dem Indikator:Er hat zwei Buffer, die zur jeweiligen Bedingung, die ich eingestellt habe, den jeweiligen Long oder Short-Pfeil in den Chart einzeichnet. Zusätzlich lese ich den Zeitpunkt dieses Pfeiles in dem Indikator hiermit aus. Range_Start_Hour = TimeHour(iTime(NULL,60,i));Gleichzeitig lasse ich diesen Zeitpunkt hiermit anzeigen: Comment("Cross_hour: ",Range_Start_Hour,"\n"); Das funktioniert in dem Indi soweit sehr gut. Aber wie kann ich diesen Wert jetzt in meinen EA einpflegen / einlesen?Das geht ja, glaube ich, nur mit dem iCustom?!Aber, das ist wieder mal einfacher gesagt, als getan Wäre jetzt natürlich geil, wenn ich den Wert einfach aus der Indikator-Comment-Funktion irgendwie übernehmen könnte (Wunschdenken). Mein iCustom sieht soweit so hier aus: int=1; double Cross_1_now = iCustom(NULL,Zeiteinheit,iCross,0,1,70,0,a); Aber wenn ich mir diesen double-Wert jetzt einfach mal als Comment anzeigen lasse, bekomme ich eine sehr große Zahl raus.Sowas wie 2171384850 oder so. Soweit ich weiß, muss dieser Wert jetzt noch in TimeHour gewandelt werden, oder? Wie würdest du hier bei diesem Puzzle weiter vorgehen? Melden
Geschrieben 28. Februar 201610 Jr. comment_156585 Ruf mich morgen einfach mal an. Dann basteln wir das per Teamviewer oder so. Lösung kann dann ja immer noch hier rein.Kontaktdaten findest Du über meinen Link in der Signatur. Ab 9:30h bis 18:00h bin ich erreichbar. Melden
Geschrieben 29. Februar 201610 Jr. Autor comment_156587 Hallo conglom, versuche dich grade über skype zu kontaktieren. Antwortest du nicht, oder bin an den falschen geraten? Melden
Geschrieben 29. Februar 201610 Jr. comment_156588 So, Problem per Skype / Teamviewer gelöst. Es lag weniger an der while Schleife (die aber auch etwas geändert werden musste) als an dem, was danach mit den Daten angestellt wurde . 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.