Jump to content
Tom Next - Daytrading Community

Recommended Posts

Posted (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);

post-1524-0-28962700-1328300813_thumb.png

Edited by whipsaw
quote tag in code tag geändert
Posted

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.

Posted

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?

post-1524-0-95316400-1328312100_thumb.png

Posted

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

Posted
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?
Posted

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.

Posted

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! :)

Posted

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)

 

 

beispiel_hl.JPG

 

schönes Wochenende,

askerix

#HiLo - Daily (Shifted).mq4

Posted (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 by remon
Posted

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.

  • 1 month later...
Posted (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);

post-1524-0-29399300-1331819829_thumb.png

Edited by remon
Posted

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

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

Posted

Vola der olle Coder, will hier auch mal was posten :laugh:

Hat wohl mit dem Broker (Trading Sonntag oder Montag zu tun)

 

 

 

Erschlagt mich ruhig, wenn das nicht stimmt. :vola3:

 

Danke Vola, das wars aber nicht ;-)

Posted

Menno, das wäre der Start einer unglaublichen Coder Karierre gewesen.

Dann eben nicht. :vola3:

 

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)

 

bullet_go.png

#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);
  
}
//+------------------------------------------------------------------+ 

Posted

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]);

Posted

Du wirst lachen, aber das wars glaub ich schon ;)

 

@Mythos

Sollte 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 :rofl:

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...