vikke Posted February 3, 2012 Report Posted February 3, 2012 (edited) Hi, ich versuche mich schon eine Weile daran die Höchst- und Tiefstkurse vom Vortag so darstellen zu lassen, dass die Horizontalen nicht durchgehend links vom aktuellen Intraday-Tageschart zu sehen sind, sondern nur im momentanen Tagesfenster erscheinen. Habe es schon mehrfach mit Loops versucht, jedoch reicht mein Wissen nocht nicht aus. Kann mir jemand vielleicht die Lösung aufzeigen? #property indicator_chart_window string objname1 = "Line1"; string objname2 = "Line2"; //+------------------------------------------------------------------+ int init() { //+------------------------------------------------------------------+ ObjectCreate(objname1,OBJ_HLINE,0,0,0); ObjectCreate(objname2,OBJ_HLINE,0,0,0); return(0); } //+------------------------------------------------------------------+ int deinit() { //+------------------------------------------------------------------+ ObjectDelete(objname1); ObjectDelete(objname2); return(0); } //+------------------------------------------------------------------+ int start() { //+------------------------------------------------------------------+ double hi,lo,hi1,lo1; hi = iHigh(NULL,PERIOD_D1,1); lo = iLow(NULL,PERIOD_D1,1); ObjectSet(objname1,OBJ_HLINE,hi); ObjectSet(objname1,OBJPROP_RAY,STYLE_SOLID); ObjectSet(objname1,OBJPROP_COLOR,Violet); ObjectSet(objname2,OBJ_HLINE,lo); ObjectSet(objname2,OBJPROP_STYLE,STYLE_SOLID); ObjectSet(objname2,OBJPROP_COLOR,Violet); } return(0); Edited February 4, 2012 by whipsaw quote tag in code tag geändert
WOGO Posted February 3, 2012 Report Posted February 3, 2012 Hi, ich versuche mich schon eine Weile daran die Höchst- und Tiefstkurse vom Vortag so darstellen zu lassen, dass die Horizontalen nicht durchgehend links vom aktuellen Intraday-Tageschart zu sehen sind, sondern nur im momentanen Tagesfenster erscheinen. Habe es schon mehrfach mit Loops versucht, jedoch reicht mein Wissen nocht nicht aus. Kann mir jemand vielleicht die Lösung aufzeigen?Du musst eine Trendlinie nehmen, also anstelle OBJ_HLINE OBJ_TREND.Dafür brauchst du dann zwar 2 Punkte, aber du kannst einfach den Level deines ersten errechneten Punktes nehmen und diesen um eine Zeiteinheit nach rechts versetzen, also inetwa so: ... ObjectCreate(objname1,OBJ_Trend,0,Time[0],0,Time[1],0); ObjectSet(objname1,OBJPROP_RAY,true); ... ObjectSet(objname1,OBJPROP_TIME1, Time[1]); ObjectSet(objname1,OBJPROP_TIME2, Time[0]); ObjectSet(objname1,OPJPROP_PRICE1, hi); ObjectSet(objname1,OPJPROP_PRICE2, hi); .... Mit OBJPROP_RAY true stellst du ein, dass die Linie nach rechts weitergeht.
vikke Posted February 3, 2012 Author Report Posted February 3, 2012 Danke WOGO:) Die Linien fangen jetzt jeweils bei den aktuellen Bars an. Ist es vielleicht möglich die Linien jeweils von Tagesbeginn aus starten zu lassen?
lutzs Posted February 4, 2012 Report Posted February 4, 2012 Danke WOGO:) Die Linien fangen jetzt jeweils bei den aktuellen Bars an. Ist es vielleicht möglich die Linien jeweils von Tagesbeginn aus starten zu lassen? Den Zeitpunkt des Starts im Codeschnipsel dorthin setzen? Lutz
vikke Posted February 4, 2012 Author Report Posted February 4, 2012 Ja Lutz, das wär es. Habe schon "if(Hour() == 0)" und ähnliches versucht in Time[] einzufügen, klappt nur noch nicht. Theoretisch ist doch "ObjectSet(objname1,OBJPROP_TIME1, Time[1]);" für den Startzeitpunkt der Linie zuständig, hier sollte doch also die Zeitvariable rein?
WOGO Posted February 4, 2012 Report Posted February 4, 2012 Ja Lutz, das wär es. Habe schon "if(Hour() == 0)" und ähnliches versucht in Time[] einzufügen, klappt nur noch nicht. Theoretisch ist doch "ObjectSet(objname1,OBJPROP_TIME1, Time[1]);" für den Startzeitpunkt der Linie zuständig, hier sollte doch also die Zeitvariable rein?Du könntest z.B. etwas in der Art machen: datetime Starttime = Time[0]-TimeHour(Time[0])*3600-TimeMinute(Time[0])*60; ObjectSet(objname1,OBJPROP_Time1, Starttime); Dann sollte immer ab 0:00Uhr des aktuellen Tages gezeichnet werden.
vikke Posted February 4, 2012 Author Report Posted February 4, 2012 Du könntest z.B. etwas in der Art machen: datetime Starttime = Time[0]-TimeHour(Time[0])*3600-TimeMinute(Time[0])*60; ObjectSet(objname1,OBJPROP_Time1, Starttime); Dann sollte immer ab 0:00Uhr des aktuellen Tages gezeichnet werden. Tausend Dank WOGO, das war es! :)
askerix Posted February 4, 2012 Report Posted February 4, 2012 Hi, hier ist eine daily High/Low Variante die ich von einem Pivot Indicator (original gibt auch frei im netz) erstellt habe - du kannst mit dem shift_Parameter auch auf CET High/low wechseln auch wenn du einen US Broker hast. sieht dann so wie im screenshot aus (blau und Orange) schönes Wochenende, askerix#HiLo - Daily (Shifted).mq4
vikke Posted February 4, 2012 Author Report Posted February 4, 2012 (edited) Danke Askerix! Mir ging es haupsächlich um die Funktionsweise, da ich noch andere statistische Parameter in verschiedene Horizontale anzeigen lassen will. Werde mir den Code anschauen, Shift ist bei Oanda immer gefragt. Edited February 4, 2012 by remon
askerix Posted February 4, 2012 Report Posted February 4, 2012 Mir ging es haupsächlich um die Funktionsweise, da ich noch andere statistische Parameter in verschiedene Horizontale anzeigen lassen will. Werde mir den Code anschauen, Shift ist bei Oanda immer gefragt. Dafür ist der Code ideal - ich habe mir aus dem Original für die Täglichen Pivots noch einen Indi für die Mediane zw den Pivots, Weekly und Monthly Pivots erstellt.
vikke Posted March 15, 2012 Author Report Posted March 15, 2012 (edited) Hi, ich habe eine Linie, die die Wocheneröffnung darstellt, nun macht sie das zwar korrekt, jedoch fängt sie immer eine Bar zu früh an. Kann mir jemand meinen Fehler aufzeigen? // Current weekly bar open price double wo = iOpen(NULL, PERIOD_W1, 0); datetime Starttime2 = iTime(NULL,PERIOD_W1,0); // Weekly open line ObjectCreate("Weekly_Open_Line", OBJ_TREND, 0, Time[0], wo); ObjectSet("Weekly_Open_Line",OBJPROP_RAY,false); ObjectSet("Weekly_Open_Line",OBJPROP_TIME1,Starttime2); ObjectSet("Weekly_Open_Line",OBJPROP_TIME2,Time[0]); ObjectSet("Weekly_Open_Line",OBJPROP_PRICE1, wo); ObjectSet("Weekly_Open_Line",OBJPROP_PRICE2,wo); ObjectSet("Weekly_Open_Line", OBJPROP_COLOR, WeeklyOpen_Color); ObjectSet("Weekly_Open_Line", OBJPROP_STYLE, GetLineStyle()); ObjectSet("Weekly_Open_Line", OBJPROP_WIDTH, WeeklyOpen_Width); Edited March 15, 2012 by remon
Vola Posted March 15, 2012 Report Posted March 15, 2012 Hi, ich habe eine Linie, die die Wocheneröffnung darstellt, nun macht sie das zwar korrekt, jedoch fängt sie immer eine Bar zu früh an. Kann mir jemand meinen Fehler aufzeigen? // Current weekly bar open price double wo = iOpen(NULL, PERIOD_W1, 0);Vola der olle Coder, will hier auch mal was posten Hat wohl mit dem Broker (Trading Sonntag oder Montag zu tun) The first trading day in a week is Monday Depends on the broker..If the broker is open for trade on the Sunday, the first daily bar (DayOfWeek()==0) will be dated same as the week Otherwise the first daily bar will be for Monday (DayOfWeek==1) Erschlagt mich ruhig, wenn das nicht stimmt.
vikke Posted March 15, 2012 Author Report Posted March 15, 2012 Vola der olle Coder, will hier auch mal was posten Hat wohl mit dem Broker (Trading Sonntag oder Montag zu tun) Erschlagt mich ruhig, wenn das nicht stimmt. Danke Vola, das wars aber nicht ;-)
Vola Posted March 15, 2012 Report Posted March 15, 2012 Menno, das wäre der Start einer unglaublichen Coder Karierre gewesen.Dann eben nicht. Aber da du ja Online bist, vllt. kannst du hier etwas raus lesen:(Bei mir funzt es, allerdings geht es bei diesem Indi um die Highs/Lows) #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 DodgerBlue #property indicator_color2 Black #property indicator_color3 DodgerBlue //---- indicator buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; extern string Time_Frame_value = "0,M1,M5,M15,M30,H1,H4,D1,W1,MN1"; extern string Time_Frame = ""; int timeFrame; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { if (Time_Frame == "M1") { timeFrame = PERIOD_M1; } else if (Time_Frame == "M5") { timeFrame = PERIOD_M5; } else if (Time_Frame == "M15") { timeFrame = PERIOD_M15; } else if (Time_Frame == "M30") { timeFrame = PERIOD_M30; } else if (Time_Frame == "H1") { timeFrame = PERIOD_H1; } else if (Time_Frame == "H4") { timeFrame = PERIOD_H4; } else if (Time_Frame == "D1") { timeFrame = PERIOD_D1; } else if (Time_Frame == "W1") { timeFrame = PERIOD_W1; } else if (Time_Frame == "MN1") { timeFrame = PERIOD_MN1; } else { timeFrame = 0; } if (timeFrame < Period()) { Alert("The timeframe must be higher than the current"); deinit(); } SetIndexBuffer(0, ExtMapBuffer1); SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(1, ExtMapBuffer2); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(2, ExtMapBuffer3); SetIndexStyle(2, DRAW_LINE); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { Comment(""); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int shift, i, CurDay, BarCount; double DayMax, DayMin; double DayOpen, DayClose, Avg; for (shift=Bars-1; shift>=0; shift--) { int timeFrameIndex = iBarShift(NULL, timeFrame, Time[shift], true); if (CurDay != iTime(NULL, timeFrame, timeFrameIndex)) { for (i=BarCount; i>=0; i--) { ExtMapBuffer1[shift+i] = DayMax; ExtMapBuffer2[shift+i] = (DayMax+DayMin)/2; ExtMapBuffer3[shift+i] = DayMin; } CurDay = iTime(NULL, timeFrame, timeFrameIndex); BarCount = 0; DayMax = 0; DayMin = 1000; DayOpen = Open[shift]; } if (DayMax < High[shift]) { DayMax = High[shift]; } if (DayMin > Low[shift]) { DayMin = Low[shift]; } BarCount = BarCount + 1; } for (i=BarCount; i>=0; i--) { ExtMapBuffer1[shift+i] = DayMax; ExtMapBuffer2[shift+i] = (DayMax+DayMin)/2; ExtMapBuffer3[shift+i] = DayMin; } DayClose = Close[0]; Avg = (DayMax+DayMin)/2; return(0); } //+------------------------------------------------------------------+
Mythos Posted March 15, 2012 Report Posted March 15, 2012 Danke Vola, das wars aber nicht ;-) Du wirst lachen, aber das wars glaub ich schon ;)Bei mir hier hat der aktuelle Wochebar als Zeit den 11.3. 00:00... der erste Stundenbar startet aber am 12.3. 00:00. Beim Trendlinienzeichnen scheint er hier abzurunden und deswegen einen Bar früher zu starten. Versuchs mal damit: ObjectSet("Weekly_Open_Line",OBJPROP_TIME1,Time[iBarShift(NULL,0,Starttime2)-1]); um ganz sicher zu gehen wäre noch sowas möglich int shift= iBarShift(NULL,0,Starttime2,true); if(shift== -1) shift= iBarShift(NULL,0,Starttime2,false)-1; ... ObjectSet("Weekly_Open_Line",OBJPROP_TIME1,Time[shift]);
Vola Posted March 15, 2012 Report Posted March 15, 2012 Du wirst lachen, aber das wars glaub ich schon ;) @MythosSollte es das wirklich gewesen sein, mußt du dich in Zukunft warm anziehen,mir fehlt nach diesem Erfolg nicht mehr viel um Chefprogrammierer bei Metaqoutes zu werden
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now