Jump to content
Tom Next - Daytrading Community

Kang_Gun Fractal


Kleinerbroker

Recommended Posts

Hallo ,

 

leider verstehe ich einen Code nicht und die Lösung des Problems ist für mich ziemlich wichtig . Hoffentlich könnt Ihr mir helfen :

 

Chart 4 Std Silber mit Signal aus dem Tages-TF :

Silver_4Std.png

 

Die jeweils ersten ein oder zwei grünen oder roten Punkte sollen mir das allererste Signal für einen Trade liefern . Ich muss also genau zu Beginn einer neuen Linie erkennen, das ein neuer Wert vorliegt und dann die Order platzieren .

Zuerst dachte ich , dass es sich einfach nur um jeweils neue HH oder LL handelt, dass ist aber falsch . Im Backtest habe ich nun beobachtet, dass teils bereits gezeichnete Linien wieder gelöscht und neu an anderer Stelle gezeichnet wurden ... also zum Beispiel Linien am Bar[5] oder Bar[6] sich plötzlich an einem anderem Preis befinden , als ursprünglich .

Dies der Code mit Quellenangabe der aber von mir bereits teilweise modifiziert (Vorbereitung für Pfeile) wurde , der Kern aber ist natürlich unverändert :

//+------------------------------------------------------------------+
//|									  KG Support & Resistance.mq4 |
//|					  Copyright © 2007, MetaQuotes Software Corp. |
//|										http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Kang_Gun"
#property link	  "http://www.free-knowledge.com"
#property indicator_chart_window
#property indicator_buffers 4

//---- input parameters
extern int Barsback		 = 1500;// Berechnungszeitraum
//---- buffers
double ExtMapBuffer3[],
   ExtMapBuffer4[],
   arrow_up[],
   arrow_down[];
int KG;
//+------------------------------------------------------------------+
//| Custom indicator initialization function						 |
//+------------------------------------------------------------------+
int init()
 {
  int limit = Bars - Barsback;
  IndicatorBuffers(4);
//---- indicators
  // Resistance Dot´s
  SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3,Red);
  SetIndexDrawBegin(0,KG-1);
  SetIndexBuffer(0,ExtMapBuffer3);
  SetIndexLabel(0,"Resist Day");
  SetIndexArrow(0, 158);
  // Support Dot´s
  SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3,DarkGreen);
  SetIndexDrawBegin(1,KG-1);
  SetIndexBuffer(1,ExtMapBuffer4);
  SetIndexLabel(1,"Support Day");
  SetIndexArrow(1, 158);
  // arrow for short selling
  SetIndexStyle	 (2, DRAW_ARROW, STYLE_SOLID, 1,Red);
  SetIndexArrow	 (2, 234);  // down  226 234  242
  SetIndexBuffer	(2, arrow_down);
  SetIndexLabel	 (2, "Down");
  SetIndexDrawBegin (2, limit);
  // arrow for long buying
  SetIndexStyle	 (3, DRAW_ARROW, STYLE_SOLID, 1,Green);
  SetIndexArrow	 (3, 233);   //UP   225  233 241
  SetIndexBuffer	(3, arrow_up);
  SetIndexLabel	 (3, "Up");
  SetIndexDrawBegin (3, limit);
 
//----
  return(0);
 }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function					   |
//+------------------------------------------------------------------+
int deinit()
 {
  return(0);
 }
//------------------------------------------------------------------
bool Fractal (string M,int P, int shift)	// P == Timeframe , shift == Position im Chart
 {
  if (Period()>P) return(-1)			   ;// Wenn Chart-TF größer ist als Referenz,dann Fehler
  P=P/Period()*2+MathCeil(P/Period()/2)   ;//
  if (shift<P)return(-1);
  if (shift>Bars-P)return(-1);
  for (int i=1;i<=P;i++)
 {
  if (M=="U")
	{
	 if (High[shift+i]>High[shift])return(-1);
	 if (High[shift-i]>=High[shift])return(-1);	
	}
  if (M=="L")
	{
	 if (Low[shift+i]<Low[shift])return(-1);
	 if (Low[shift-i]<=Low[shift])return(-1);
	}	  
 }
  return(1);  
 }
//------------------------------------------------------------------
int start()
 {
  int  DAY=1440;
  KG=Bars;
  while(KG>=0)
  {
   if (Fractal("U",DAY,KG)==1) ExtMapBuffer3[KG]=High[KG];
   else ExtMapBuffer3[KG]=ExtMapBuffer3[KG+1];
   if (Fractal("L",DAY,KG)==1) ExtMapBuffer4[KG]=Low[KG];
   else ExtMapBuffer4[KG]=ExtMapBuffer4[KG+1];
  
   KG--;
  }


  return(0);
 }
//+------------------------------------------------------------------+

 

Der Kern ist wohl die Funktion Fractal() und dort die Zeile " P=P/Period()*2+MathCeil(P/Period()/2) ;// " von besonderer Bedeutung .

Sie entscheidet , welcher Bereich des Charts nach einem HH/LL gescannt werden soll .... aber ich habe nicht herausbekommen, was

da wirklich passiert und warum . Dieses Verständnis ist aber offensichtlich nötig, um zu verstehen, warum mir rückwirkend das Signal

geändert wird .

Generell würde ich aber sehr gerne diesen Indikator einem simplen HH oder LL des nächst höheren TF vorziehen .

 

Daher bitte ich Euch um Unterstützung .

Google hat auch schon etwas geholfen ...die ersten drei Links führen etwas weiter , ich hatte gehofft dort Erklärungen zu finden .

 

Kleinerbroker

Link to comment
Share on other sites

Ich würd mich garnicht so sehr an der Formel aufhalten.

Der Indikator berechnet - wenn ich das richtig sehe - ganz einfach immer die Hochs/Tiefs bei denen 2.5 Tage vorher und 2.5 Tage nachher der Kurs das Extrema nicht überschritten hat.

Allerdings werden die Extremas auch erst nach 2.5 Tagen qualifiziert.

Link to comment
Share on other sites

Schade, sieht sooooo schön im fertigen Chart aus ^^

 

Na ja, ich habe noch weitere Hilfen, und da wir ja Wahrscheinlichkeiten handeln (sollten) habe ich da schon noch Lösungen in Vorbereitung . Wäre auch zu schön gewesen , um wahr (so einfach) zu sein .

Vielen Dank @Wogo , ich habe zwar erkannt, dass da was nachträglich passiert, auch einen Faktor P gesehen, aber das Verständnis eben nicht entwickelt . Es hat eben nicht "Klick" gemacht, nun ist aber klar . wub.png

 

Mehr die Tage bei Work1

 

KB

Link to comment
Share on other sites

//+------------------------------------------------------------------+
//|													 SLV_HHLL.mq4 |
//|									   Kleinerbroker was here   |
//|										  http://www.Tom-Next.com |
//+------------------------------------------------------------------+
#property copyright "KleinerBroker was here"
#property link	  "http://www.Tom-Next.com"
#property indicator_chart_window
#property indicator_buffers 4
//---- input parameters
extern string Bestimmung_des = " HIGHEST HIGH und LOWEST LOW ";// Comment only
extern string Analyse_Timeframe = ""	;// Comment only
extern int TimeFrame		=  240	  ;// Minuten haben 4 Stunden
extern string Betrachtungszeitraum = "" ;// Comment only
extern int Horizont		 =  120	  ;// 20 Tages HH / LL zu ermitteln
extern string Darstellungs_Zeitraum = "";// Comment only
extern int Barsback		 = 1500	  ;// Berechnungszeitraum
//---- buffers
double   Resistance[],
	 Support[],
	 arrow_up[],
	 arrow_down[];
	
//---- variables		
int	  KB,HH_Bar,LL_Bar,y,limit;
double   HH_Price,LL_Price;
datetime TimeArray[],Begin;
//+------------------------------------------------------------------+
//| Initialization function										  |
//+------------------------------------------------------------------+
int init()
 {
  limit = Bars - Barsback;
  IndicatorBuffers(4);
//---- indicators
  // Resistance Dot´s
  SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1,Red);
  SetIndexDrawBegin(0,KB-1);
  SetIndexBuffer(0,Resistance);
  SetIndexLabel(0,(TimeFrame+"-Resist"));
  SetIndexArrow(0, 158);
  // Support Dot´s
  SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1,DarkGreen);
  SetIndexDrawBegin(1,KB-1);
  SetIndexBuffer(1,Support);
  SetIndexLabel(1,(TimeFrame+"-Support"));
  SetIndexArrow(1, 158);
  // arrow for short selling
  SetIndexStyle	 (2, DRAW_ARROW, STYLE_SOLID, 1,Red);
  SetIndexArrow	 (2, 234);  // down  226 234  242
  SetIndexBuffer	(2, arrow_down);
  SetIndexLabel	 (2, "Down");
  SetIndexDrawBegin (2, limit);
  // arrow for long buying
  SetIndexStyle	 (3, DRAW_ARROW, STYLE_SOLID, 1,DarkGreen);
  SetIndexArrow	 (3, 233);   //UP   225  233 241
  SetIndexBuffer	(3, arrow_up);
  SetIndexLabel	 (3, "Up");
  SetIndexDrawBegin (3, limit);
 
//----
  return(0);
 }
//+------------------------------------------------------------------+
//| deinitialization function										|
//+------------------------------------------------------------------+
int deinit()
 {
  return(0);
 }
//------------------------------------------------------------------
//------------------------------------------------------------------
int start()
 {
  // Plot defined time frame on to current time frame
  ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
  //
  KB = Barsback;
  Begin = Time[KB];
  y=iBarShift(Symbol(),TimeFrame,Begin,true);
  if (y < 0){Print("Alarm, Bar fehlt");deinit();}
 
  while (KB >= 0 )
  {
   if (Time[KB]>TimeArray[y]) y--;
   //
   HH_Bar= iHighest(Symbol(),TimeFrame,MODE_HIGH,Horizont,y);
   HH_Price = iHigh(Symbol(),TimeFrame,HH_Bar);
   Resistance[KB] = HH_Price;
   if (Resistance[KB]>Resistance[KB+1]) {
	   arrow_down[KB] = HH_Price + 0.2 ;
	   }				
   LL_Bar= iLowest(Symbol(),TimeFrame,MODE_LOW,Horizont,y);
   LL_Price = iLow(Symbol(),TimeFrame,LL_Bar);
   Support[KB]= LL_Price;
   if (Support[KB]<Support[KB+1]) {
	   arrow_up[KB] = LL_Price - 0.2 ;
	   }
   KB-- ;		
  }
  return(0);
 }
//+------------------------------------------------------------------+

 

Der Code zeigt im Preischart das HighestHigh( Resistance) bzw LowestLow (Support) durch rote/grüne Linie an . Wenn ein neues höheres HH oder ein neues tieferes LL gefunden wird, dann wird ein Signal generiert .

 

Die Standardeinstellung sucht im 4 Std Chart nach den Extremen der letzten 4 Wochen .

 

Der Indikator zeigt im (frei wählbaren) Standard nur die Werte in den letzten 1500 Bars an .

 

Hoffe es hilft dem einen oder anderen . Inhaltlich ist es nichts dolles, aber ein paar Kleinigkeiten gefallen dann vielleicht doch .

 

KB

 

PS.: Dieser Code ist von mir geschrieben, aber aus Anregungen anderer Codes entstanden .

 

silber_hh_ll.gif

  • Upvote 2
Link to comment
Share on other sites

Hoffe es hilft dem einen oder anderen . Inhaltlich ist es nichts dolles, aber ein paar Kleinigkeiten gefallen dann vielleicht doch .

Gratulation top.gif

Inhaltlich nicht doll ist vllt. etwas Understatement.

Ich glaube ja immer noch, dass die einfachsten Dinge mit am besten funktionieren.

 

Werden die Roten Striche auf der Rechten oberen Seite im Chart und die Grünen Links unten wirklich so "zerstückelt und stufenweise" angezeigt ?

Wenn ja, würde ich das sehr interessant finden und erspare mir bei deiner kurzen Antwort den Test per download, Indikator erstellen usw. door.gif

Und sind die Pfeile abschaltbar ?

Link to comment
Share on other sites

   HH_Bar= iHighest(Markt,TimeFrame,MODE_HIGH,Horizont,KB) ;

 

Irgend etwas funktioniert nun , beim Umwandeln des Indikators in eine Funktion, nicht mehr .

Wenn die Variable KB und Horizont in Summe den Wert 1000 übersteigen, bekomme ich einen Error "-1" =>

 

Markt = Silver-fx ;

TimeFrame = 240 ;

in der Historie habe ich mehr als 18000 Zeilen zurück bis 2001 ;

Horizont = 120 ;

KB war bei verschiedenen Tests entsprechend immer im 900++ Bereich .

Bei KB=1000 bekomme ich LL=HH=1000 , bei KB=1001 eben "-1"

 

Fast so, als ob der Befehl iHighest nur 1000 Bars maximal analysieren darf . Eine solche Regel kenne ich aber nicht .

 

Ihr vielleicht ?

 

KB

 

 

//+-----------------------------------------------------------------------------------------------+
											 //											   |
void SLV_HHLL()								  //											   |
 {											  //0											  |
  bool Flag									;// locale Variablen für verschiedene Counter	 |
  if(hilfe1)Print(" ZYKLUS 1.3.: ENTRY SLV_HHLL");//											 |
//------------------------------------------------------------------------------------------------|
//   1.Stufe der Trenderkennung => Erkennen von Support & Resistance							  |
											 //											   |
											 //											   |
  KB = Barsback								;//											   |
  while (KB >= 0 )							  //											   |
  {										  //1											  |
   HH_Bar= iHighest(Markt,TimeFrame,MODE_HIGH,Horizont,KB) ;//								|
   HH_Price = iHigh(Markt,TimeFrame,HH_Bar) ;//											   |
   Resistance[KB] = HH_Price				;//											   |
   if (Resistance[KB]>Resistance[KB+1])	 {//2											  |
	   HH_Arrow_Down[KB] = HH_Price + 0.2   ;//											   |
	   }									 //2											  |
   LL_Bar= iLowest(Markt,TimeFrame,MODE_LOW,Horizont,KB)   ;//								|
   LL_Price = iLow(Markt,TimeFrame,LL_Bar)  ;//											   |
   Support[KB]= LL_Price					;//											   |
   if (Support[KB]<Support[KB+1])		   {//2											  |
	   LL_Arrow_Up[KB] = LL_Price - 0.2	 ;//											   |
	   }									 //2											  |
//------------------------------------------------------------------------------------------------|
if (KB==700 || KB==500 || KB==995){// ******* Ausserordentliches Debugging START *****************|
Print("KB=",KB," , Horizont =",Horizont)	   ;//											   |  
Print("HH_Bar=",HH_Bar,",HH_Price",HH_Price," , LL_Bar=",LL_Bar,",LL_Price",LL_Price)   ;//	   |
Print("Resistance UET : durch Bar =[",HH_Bar,"]um ",TimeToStr							//	   |
   (iTime(Markt,TimeFrame,HH_Bar),TIME_DATE|TIME_MINUTES)," bei = ",HH_Price)	   ;//	   |
											 //											   |
Print("Support UET : durch Bar =[",LL_Bar,"]um ",TimeToStr							   //	   |
   (iTime(Markt,TimeFrame,LL_Bar),TIME_DATE|TIME_MINUTES)," bei = ",LL_Price)	   ;//	   |
}					  // ******* Ausserordentliches Debugging END *****************			  |
//------------------------------------------------------------------------------------------------|
   KB--									 ;//											   |
  }										  //1											  |
//------------------------------------------------------------------------------------------------|
  if (hilfe1 && (Flag != Longtrend)) Print(" !!!!! Trendbruch 240 erkannt !!!!!!!");//		   |
//------------------------------------------------------------------------------------------------+
//------------------------------------------------------------------------------------------------+
  if(hilfe1)Print(" ZYKLUS 1.4.: EXIT SLV_HHLL  ",TF, ", UET =",Ernten_Old[0][1] ) ;//		   |
  return									   ;//											   |
 }											  //0											  |
//------------------------------------------------------------------------------------------------+
//+-----------------------------------------------------------------------------------------------+

 

 

PS.: Was kann ich an der Formatierung des Quellcodes verbessern ? Das Prob hatte ich bislang nicht .

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