Jump to content
Tom Next - Daytrading Community

Kerzenzeitpunkt ermitteln


Gunner_Duck

Recommended Posts

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.

  • Upvote 1
Link to comment
Share on other sites

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)

post-5230-0-60980400-1456528294_thumb.jpg

Edited by Gunner_Duck
Link to comment
Share on other sites

 

 

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

 

@WOGO

Bzgl. 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.

Link to comment
Share on other sites

So wie du das machst wird das nix cleanglasses.gif .

 

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

 

  • Upvote 1
Link to comment
Share on other sites

So wie du das machst wird das nix cleanglasses.gif .

 

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 :wink:.

  • Upvote 1
Link to comment
Share on other sites

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 by Gunner_Duck
Link to comment
Share on other sites

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?

Link to comment
Share on other sites

@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 by Gunner_Duck
Link to comment
Share on other sites

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.

  • Upvote 1
Link to comment
Share on other sites

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 by Gunner_Duck
Link to comment
Share on other sites

Ja mit gehüpft wie gesprungen meinte ich, dass ich immer den Zeitpunkt einer Kerze haben muss blush.gif

 

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 wacko.gif

 

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? wacko.gif

 

post-5230-0-67582400-1456692564_thumb.jpg

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...