Gunner_Duck Posted February 26, 2016 Author Report Share Posted February 26, 2016 Du meinst das a dann mit 2 anstatt mit 1 definieren? Quote Link to comment Share on other sites More sharing options...
WOGO Posted February 26, 2016 Report Share Posted February 26, 2016 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. 1 Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted February 26, 2016 Author Report Share Posted February 26, 2016 (edited) 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) Edited February 26, 2016 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 27, 2016 Report Share Posted February 27, 2016 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. Quote Link to comment Share on other sites More sharing options...
WOGO Posted February 27, 2016 Report Share Posted February 27, 2016 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--; } 1 Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 27, 2016 Report Share Posted February 27, 2016 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 . 1 Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted February 27, 2016 Author Report Share Posted February 27, 2016 (edited) 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. Edited February 27, 2016 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 27, 2016 Report Share Posted February 27, 2016 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? Quote Link to comment Share on other sites More sharing options...
WOGO Posted February 28, 2016 Report Share Posted February 28, 2016 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! Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted February 28, 2016 Author Report Share Posted February 28, 2016 (edited) @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. Edited February 28, 2016 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 28, 2016 Report Share Posted February 28, 2016 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. 1 Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted February 28, 2016 Author Report Share Posted February 28, 2016 (edited) 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? Edited February 28, 2016 by Gunner_Duck Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 28, 2016 Report Share Posted February 28, 2016 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. Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted February 28, 2016 Author Report Share Posted February 28, 2016 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? Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 28, 2016 Report Share Posted February 28, 2016 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. Quote Link to comment Share on other sites More sharing options...
Gunner_Duck Posted February 29, 2016 Author Report Share Posted February 29, 2016 Hallo conglom, versuche dich grade über skype zu kontaktieren. Antwortest du nicht, oder bin an den falschen geraten? Quote Link to comment Share on other sites More sharing options...
conglom-o Posted February 29, 2016 Report Share Posted February 29, 2016 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 . 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.