Kleinerbroker Posted May 17, 2012 Report Posted May 17, 2012 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 : 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, wasda wirklich passiert und warum . Dieses Verständnis ist aber offensichtlich nötig, um zu verstehen, warum mir rückwirkend das Signalgeä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
Vola Posted May 17, 2012 Report Posted May 17, 2012 Kang_Gun ist ein sehr eifriger Programmierer u.a. bei FF, vllt. hilft dir eine direkte Anfrage. http://www.forexfactory.com/kang_gun
WOGO Posted May 17, 2012 Report Posted May 17, 2012 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.
Vola Posted May 17, 2012 Report Posted May 17, 2012 Allerdings werden die Extremas auch erst nach 2.5 Tagen qualifiziert.Schade, sieht sooooo schön im fertigen Chart aus ^^
Kleinerbroker Posted May 17, 2012 Author Report Posted May 17, 2012 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 . Mehr die Tage bei Work1 KB
Kleinerbroker Posted May 24, 2012 Author Report Posted May 24, 2012 //+------------------------------------------------------------------+ //| 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 . 2
Vola Posted May 24, 2012 Report Posted May 24, 2012 Hoffe es hilft dem einen oder anderen . Inhaltlich ist es nichts dolles, aber ein paar Kleinigkeiten gefallen dann vielleicht doch .Gratulation 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. Und sind die Pfeile abschaltbar ?
Kleinerbroker Posted May 25, 2012 Author Report Posted May 25, 2012 Werden die Roten Striche auf der Rechten oberen Seite im Chart und die Grünen Links unten wirklich so "zerstückelt und stufenweise" angezeigt ?..Und sind die Pfeile abschaltbar ? ... @Vola : 1.) "Ja" und 2.) jetzt "Ja" Freundliche GrüßeKB 3
Kleinerbroker Posted May 30, 2012 Author Report Posted May 30, 2012 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 .
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now