CustomSymbolSetSessionTrade

Définit les heures de début et de fin de la session de trading spécifiée pour le symbole et le jour de la semaine spécifiés.

bool  CustomSymbolSetSessionTrade(
   const string      symbol_name,         // nom du symbole
   ENUM_DAY_OF_WEEK  day_of_week,         // jour de la semaine
   uint              session_index,       // indice de la session
   datetime          from,                // date/heure de début de la session
   datetime          to                   // date/heure de fin de la session
   );

Paramètres

symbol_name

[in]  Nom du symbole personnalisé.

ENUM_DAY_OF_WEEK

[in]  Jour de la semaine, une valeur de l'énumération ENUM_DAY_OF_WEEK.

uint

[in]  Indice de la session pour laquelle les heures de début et de fin vont être définies. L'indexation des sessions commence à 0.

from

[in]  Heure de début de la session en secondes depuis 00:00, la valeur des données de la variable est ignorée.

to

[in]  Heure de fin de la session en secondes depuis 00:00, la valeur des données de la variable est ignorée.

Valeur de Retour

true — en cas de succès — false sinon. Pour obtenir des informations sur l'erreur, il faut appeler la fonction GetLastError().

Note

Si la session avec le session_index spécifié existe déjà, la fonction modifie simplement le début et la fin de la session.

Si aucun paramètre de début et de fin n'ont été passés pour la session (from=0 et to=0), la session correspondante au session_index est supprimée, tandis que l'indexation des sessions est décalée vers le bas.

Les sessions ne peuvent être ajoutées que de façon séquentielle. En d'autres termes, vous ne pouvez ajouter avec session_index=1 que si une session avec l'indice 0 existe déjà. Si cette règle est cassée, aucune nouvelle session n'est créée, et la fonction elle-même reourne 'false'.

 

Exemple :

//+------------------------------------------------------------------+
//|                                  CustomSymbolSetSessionTrade.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   CUSTOM_SYMBOL_NAME     Symbol()+".C"           // nom du symbole personnalisé
#define   CUSTOM_SYMBOL_PATH     "Forex"                 // nom du groupe dans lequel le symbole sera créé
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()                // nom du symbole à partir duquel le symbole personnalisé sera créé
 
#define   SESSION_0_FROM         D'1970.01.01 00:15:00'  // heure de démarrage de la session 0
#define   SESSION_0_TO           D'1970.01.01 11:59:00'  // heure de fin de la session 0
#define   SESSION_1_FROM         D'1970.01.01 12:15:00'  // heure de démarrage de la session 1
#define   SESSION_1_TO           D'1970.01.01 23:59:00'  // heure de fin de la session 1
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- obtient le code d'erreur lors de la création d'un symbole personnalisé
   int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN);
   
//--- si le code d'erreur est différent de 0 (symbole créé avec succès) et pas 5304 (le symbole a déjà été créé) - on sort
   if(create!=0 && create!=5304)
      return;
    
//--- affiche l'en-tête avec le symbole de base et l'indice de la session et
//--- affiche les heures de début et de fin de chaque session de trading dans une boucle par jour de la semaine du lundi (Mon) au vendredi (Fri) dans le journal
   for(int session=0session<2session++)
     {
      PrintFormat("Trade session %d of the '%s' symbol from which the custom '%s' was created"sessionCUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME); 
      for(int day_of_week=MONDAYday_of_week<SATURDAYday_of_week++) 
         SymbolInfoSessionQuotePrint(CUSTOM_SYMBOL_ORIGIN, (ENUM_DAY_OF_WEEK)day_of_weeksession);      
     }
     
//--- dans une boucle par 2 sessions
   bool res=true;
   for(int session=0session<2session++)
     {
      datetime from = SESSION_0_FROM;
      datetime to   = SESSION_0_TO;
      if(session>0)
        {
         from = SESSION_1_FROM;
         to   = SESSION_1_TO;
        }
      //--- définit les heures des sessions de cotations pour un symbole personnalisé pour chaque jour de la semaine
      ResetLastError();
      for(int day_of_week=MONDAYday_of_week<SATURDAYday_of_week++)
         res &=CustomSymbolSetSessionQuote(CUSTOM_SYMBOL_NAME, (ENUM_DAY_OF_WEEK)day_of_weeksessionfromto);
     }
 
//--- s'il y a eu une erreur lors de la définition d'une des sessions, affiche un message correspondant dans le journal
   if(!res)
      Print("CustomSymbolSetSessionTrade() failed. Error "GetLastError());
   
//--- affiche l'en-tête avec le symbole de base et l'indice de la session et
//--- affiche les heures de début et de fin de chaque session de trading dans une boucle par jour de la semaine du lundi (Mon) au vendredi (Fri) dans le journal
   for(int session=0session<2session++)
     {
      PrintFormat("Trade session %d of a custom symbol '%s' based on '%s'"sessionCUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_ORIGIN); 
      for(int day_of_week=MONDAYday_of_week<SATURDAYday_of_week++) 
         SymbolInfoSessionQuotePrint(CUSTOM_SYMBOL_NAME, (ENUM_DAY_OF_WEEK)day_of_weeksession);     
     }
     
//--- affiche une infobulle sur les touches de fin de script dans le commentaire du graphique
   Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit"CUSTOM_SYMBOL_NAME));
//--- attend que la touche Echap ou Suppr soit appuyée pour sortir de la boucle sans fin
   while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
     {
      Sleep(16);
      //--- lors de l'appui sur la touche Suppr, le symbole personnalisé est supprimé
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
        {
         if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
            PrintFormat("Custom symbol '%s' deleted successfully"CUSTOM_SYMBOL_NAME);
         break;
        }
     }
//--- efface le graphique avant de sortir
   Comment("");
   /*
   résultat :
   Trade session 0 of the 'EURUSDsymbol from which the custom 'EURUSD.Cwas created
   - Monday     00:15 - 23:55
   - Tuesday    00:15 - 23:55
   - Wednesday  00:15 - 23:55
   - Thursday   00:15 - 23:55
   - Friday     00:15 - 23:55
   Trade session 1 of the 'EURUSDsymbol from which the custom 'EURUSD.Cwas created
   - Monday     Session not set
   - Tuesday    Session not set
   - Wednesday  Session not set
   - Thursday   Session not set
   - Friday     Session not set
   Trade session 0 of a custom symbol 'EURUSD.Cbased on 'EURUSD'
   - Monday     00:15 - 11:59
   - Tuesday    00:15 - 11:59
   - Wednesday  00:15 - 11:59
   - Thursday   00:15 - 11:59
   - Friday     00:15 - 11:59
   Trade session 1 of a custom symbol 'EURUSD.Cbased on 'EURUSD'
   - Monday     12:15 - 23:59
   - Tuesday    12:15 - 23:59
   - Wednesday  12:15 - 23:59
   - Thursday   12:15 - 23:59
   - Friday     12:15 - 23:59
   */
  }
//+------------------------------------------------------------------+
//| Crée un symbole personnalisé, retourne un code d'erreur          |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_nameconst string symbol_pathconst string symbol_origin=NULL)
  {
//--- définit le nom du symbole à partir duquel le symbole personnalisé sera construit
   string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
   
//--- si le symbole personnalisé n'a pas pu être créé et que le code de l'erreur n'est pas 5304, rapporte cette erreur dans le journal
   ResetLastError();
   int error=0;
   if(!CustomSymbolCreate(symbol_namesymbol_pathorigin))
     {
      error=GetLastError();
      if(error!=5304)
         PrintFormat("CustomSymbolCreate(%s, %s, %s) failed. Error %d"symbol_namesymbol_pathoriginerror);
     }
//--- succès
   return(error);
  }
//+------------------------------------------------------------------+
//| Supprime un symbole personnalisé                                 |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
  {
//--- cache le symbole de la fenêtre du Market Watch
   ResetLastError();
   if(!SymbolSelect(symbol_namefalse))
     {
      PrintFormat("SymbolSelect(%s, false) failed. Error %d"GetLastError());
      return(false);
     }
      
//--- en cas d'échec de la suppression du symbole personnalisé, rapporte cette erreur dans le journal et retourne 'false'
   ResetLastError();
   if(!CustomSymbolDelete(symbol_name))
     {
      PrintFormat("CustomSymbolDelete(%s) failed. Error %d"symbol_nameGetLastError());
      return(false);
     }
//--- succès
   return(true);
  }
//+------------------------------------------------------------------+
//| Envoie les heures de début et de fin des sessions spécifiées     |
//| pour le symbole et le jour spécifiés, dans le journal            |
//+------------------------------------------------------------------+ 
void SymbolInfoSessionTradePrint(const string symbolconst ENUM_DAY_OF_WEEK day_of_weekconst uint session_index
  { 
//--- déclare les variables pour enregistrer le début et la fin de la session de cotation
   datetime date_from;  // heure de début de la session
   datetime date_to;    // heure de fin de la session
    
//--- crée le nom du jour de la semaine à partir de la constante de l'énumération
   string week_day=EnumToString(day_of_week); 
   if(week_day.Lower()) 
      week_day.SetChar(0ushort(week_day.GetChar(0)-32)); 
  
//--- récupère les données de la session de cotation par symbole et par jour de la semaine
   if(!SymbolInfoSessionTrade(symbolday_of_weeksession_indexdate_fromdate_to)) 
     { 
      int err=GetLastError();
      string message=(err==4307 ? StringFormat("- %-10s Session not set"week_day) : 
                      StringFormat("SymbolInfoSessionTrade(%s, %s, session %d) failed. Error %d"symbolweek_daysession_indexGetLastError()));
      Print(message); 
      return
     } 
      
//--- envoie dans le journal les données de la session de trading spécifiée
   PrintFormat("- %-10s %s - %s"week_dayTimeToString(date_fromTIME_MINUTES), TimeToString(date_toTIME_MINUTES)); 
  }

 

Voir aussi

SymbolInfoSessionTrade, Symbol info, TimeToStruct, structure Date