Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Kerzenzeitpunkt ermitteln

Geschrieben

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 = TIMERHIGH

Stelle ich es mir zu einfach vor?

Könnt ihr mir bitte auf die Sprünge helfen.

 

Featured Replies

Geschrieben

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.

Geschrieben
  • Autor

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

Bearbeitet von Gunner_Duck

Geschrieben

 

 

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.

Geschrieben

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

 

Geschrieben

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

Geschrieben
  • Autor

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 von Gunner_Duck

Geschrieben

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?

Geschrieben

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!

Geschrieben
  • Autor

@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 von Gunner_Duck

Geschrieben

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.

Geschrieben
  • Autor

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 von Gunner_Duck

Geschrieben

Oder das grade gehüpft wie gesprungen?

 

Ja, ist es bye2.gif . 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.

Geschrieben
  • Autor

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

Geschrieben

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.

Geschrieben
  • Autor

Hallo conglom,

 

versuche dich grade über skype zu kontaktieren.

Antwortest du nicht, oder bin an den falschen geraten? pelo1.gif

Geschrieben

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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.