Kann ich die Handelszeiten eines Symbols auslesen?

 

Im Prinzip geht es um die Öffnungszeiten des Marktes, die imho mit dem Symbol verbunden sein müsste.


Kann ich die blau markierten Werte auslesen? Und falls ja, wie?

Wie man erkennen kann sind diese Werte ja nicht statisch. (31.12. und 1.1. gibt es keine Handelszeiten)

Danke für Info!

 

Hab ich im englischen forum irgendwann mal gefunden

hatte ursprünglich noch mehr drin und die vorschau auf 5 tage

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
string DayToString(ENUM_DAY_OF_WEEK _day)
  {
   switch(_day)
     {
      case SUNDAY:    return "Sunday";
      case MONDAY:    return "Monday";
      case TUESDAY:   return "Tuesday";
      case WEDNESDAY: return "Wednesday";
      case THURSDAY:  return "Thursday";
      case FRIDAY:    return "Friday";
      case SATURDAY:  return "Saturday";
      default:        return "Unknown day of week";
     }
   return "";
  }
  
 void PrintInfoForQuoteSessions(string symbol,ENUM_DAY_OF_WEEK _day)
  {
//--- start and end of session
   datetime start,finish;
   uint session_index=0;
   bool session_exist=true;

//--- go over all sessions of this day
   while(session_exist)
     {
      //--- check if there is a quotation session with the number session_index
      session_exist=SymbolInfoSessionQuote(symbol,_day,session_index,start,finish);

      //--- if there is such session
      if(session_exist)
        {
         //--- display the day of week, the session number and the time of start and end
         Print(DayToString(_day),": session index=",session_index,"  start=",
               TimeToString(start,TIME_MINUTES),"    finish=",TimeToString(finish-1,TIME_MINUTES|TIME_SECONDS));
        }
      //--- increase the counter of sessions
      session_index++;
     }
  } 
  
 string SessionTimeInformation(string symbol,ENUM_DAY_OF_WEEK _day)
  {

   datetime start=0,finish=0;
   uint session_index=0;
   bool session_exist=true;

//--- go over all sessions of this day
   while(session_exist)
     {
      //--- check if there is a quotation session with the number session_index
      session_exist=SymbolInfoSessionQuote(symbol,_day,session_index,start,finish);

      session_index++;
     }
   return( DayToString(_day)+": session index="+DoubleToString(session_index,0)+"  start="+ TimeToString(start,TIME_MINUTES)+"    finish="+TimeToString(finish-1,TIME_MINUTES|TIME_SECONDS)); 
     
  } 
 

[edit: ich sehe amando war schneller, doch ich denke es ergänzt sich]

Kann man auslesen mit der Funktion SymbolInfoSessionTrade()

bool  SymbolInfoSessionTrade( 
   string            name,                // symbol name 
   ENUM_DAY_OF_WEEK  day_of_week,         // day of the week 
   uint              session_index,       // session index 
   datetime&         from,                // session beginning time 
   datetime&         to                   // session end time 
   );

Da die Daten aber ja vom Broker zur Verfügung gestellt werden, ist es ebenfalls brokerabhängig, ob die Daten um Feiertage herum korrekt angepasst werden. Gemäß Deinem Screenshot scheint das bei Dir ja zu funktionieren.

Die Frage, ob der Handel zum Beginn einer Session bereits wieder begonnen hat erübrigt sich ja in der Regel, da bis dahin ja auch keine neuen Ticks generiert werden. Die wirklich interessante Frage ist vermutlich ja meist, wann die Session zuende ist (und dass man das rechtzeitig VORHER weiß!), z.B. wenn man Handel über Nacht vermeiden will (roll-over Gebühren..) oder halt am Freitagabend oder vor Feiertagen wenn man vermeiden will nach der Handelsunterbrechung von einer Kurslücke überrascht zu werden, oder schlicht weil man nicht 10 Minuten vor dem Wochenende eine neue Position eröffnen will.

Falls ich richtig vermute, dass dergleichen der Hintergrund ist, kann ich die folgende Funktion beisteuern, mit der man abfragen kann in wievielen Sekunden die aktuelle Session endet (kann sein dass ich das schon mal gepostet habe):

//+------------------------------------------------------------------+
//| get seconds until end of current trading session                 |
//+------------------------------------------------------------------+
int session_end(string symbolstring)
  {
   // define variables
   uint session_index=0;
   datetime dt_server,dt_start,dt_end;
   MqlDateTime server_struct,start_struct,end_struct;
   int seconds_until_session_end=0;
   
   // get seconds since midnight (server time)
   dt_server=TimeTradeServer();
   TimeToStruct(dt_server,server_struct);
   ENUM_DAY_OF_WEEK day_of_week=(ENUM_DAY_OF_WEEK)server_struct.day_of_week;
   int server_seconds=server_struct.hour*3600+server_struct.min*60+server_struct.sec;
   
   // cycle through existing sessions (while-loop breaks if session_index is invalid)
   while (SymbolInfoSessionTrade(symbolstring,day_of_week,session_index,dt_start,dt_end))
     {
      // get seconds since midnight (server time) for start and end of the session
      TimeToStruct(dt_start,start_struct);int start_seconds=start_struct.hour*3600+start_struct.min*60+start_struct.sec;
      TimeToStruct(dt_end,end_struct);int end_seconds=end_struct.hour*3600+end_struct.min*60+end_struct.sec;
      
      // check if the current server time is in between start and end of the designated session
      if (server_seconds>start_seconds && server_seconds<end_seconds){seconds_until_session_end=end_seconds-server_seconds;}
      session_index++;
     }
   return seconds_until_session_end;
  }
 
Chris70:

[edit: ich sehe amando war schneller, doch ich denke es ergänzt sich]

Kann man auslesen mit der Funktion SymbolInfoSessionTrade()

Da die Daten aber ja vom Broker zur Verfügung gestellt werden, ist es ebenfalls brokerabhängig, ob die Daten um Feiertage herum korrekt angepasst werden. Gemäß Deinem Screenshot scheint das bei Dir ja zu funktionieren.

Die Frage, ob der Handel zum Beginn einer Session bereits wieder begonnen hat erübrigt sich ja in der Regel, da bis dahin ja auch keine neuen Ticks generiert werden. Die wirklich interessante Frage ist vermutlich ja meist, wann die Session zuende ist (und dass man das rechtzeitig VORHER weiß!), z.B. wenn man Handel über Nacht vermeiden will (roll-over Gebühren..) oder halt am Freitagabend oder vor Feiertagen wenn man vermeiden will nach der Handelsunterbrechung von einer Kurslücke überrascht zu werden, oder schlicht weil man nicht 10 Minuten vor dem Wochenende eine neue Position eröffnen will.

Falls ich richtig vermute, dass dergleichen der Hintergrund ist, kann ich die folgende Funktion beisteuern, mit der man abfragen kann in wievielen Sekunden die aktuelle Session endet (kann sein dass ich das schon mal gepostet habe):

Danke euch beiden. Ja es ist mir wichtig feststellen zu können in wievielen Sekunden die aktuelle Session endet.

Wieder was dazugelernt. SymbolInfoSessionQuote() und SymbolInfoSessionTrade() habe ich noch nicht gekannt.

Grund der Beschwerde: