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.

Linien nur im aktuellen Tageschart darstellen

Geschrieben

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

Bearbeitet von whipsaw
quote tag in code tag geändert

Featured Replies

Geschrieben

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.

Geschrieben
  • Autor

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

Geschrieben

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

Geschrieben
  • Autor
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?
Geschrieben

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.

Geschrieben
  • Autor

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

Geschrieben

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

Geschrieben
  • Autor

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.

Bearbeitet von remon

Geschrieben

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 Monat später...
Geschrieben
  • Autor

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

Bearbeitet von remon

Geschrieben

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:

Geschrieben
  • Autor

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

Geschrieben

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

Geschrieben

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

Geschrieben

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:

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.