ChartIndicatorAdd

Ajoute l'indicateur avec le handle indiqué sur la fenêtre indiquée du graphique. L'indicateur et le graphique doivent être construits sur le même symbole et le temps trame.

bool  ChartIndicatorAdd(
   long  chart_id,                 // l'identificateur du graphique
   int   sub_window                // le numéro de la sous-fenêtre
   int   indicator_handle          //le handle indiqué
   );

Les paramètres

chart_id

[in]   L'identificateur du graphique. 0 signifie le graphique courant.

sub_window

[in]  Le numéro de la sous-fenêtre du graphique. 0 signifie une fenêtre principale du graphique. Pour ajouter un indicateur dans une nouvelle fenêtre, le paramètre doit être plus grand que l'index de la dernière fenêtre existante, alors il doit être égal à CHART_WINDOWS_TOTAL. Si la valeur du paramètre dépasse la valeur CHART_WINDOWS_TOTAL, alors la nouvelle fenêtre ne sera pas créée et l'indicateur ne sera pas ajouté.

indicator_handle

[in]  Le handle de l'indicateur.

La valeur rendue

Rend true en cas du succès, autrement rend false. Pour recevoir l'information sur l'erreur, il est nécessaire d'appeler la fonction GetLastError(). L'erreur 4114 signifie que le graphique et l'indicateur ajouté se distinguent selon le symbole ou le temps trame.

Note

Si sur une principale fenêtre du graphique on ajoute l'indicateur, qui doit être dessiné dans le sous- fenêtre séparé (par exemple, iMACD inséré ou l'indicateur d'utilisateur avec la propriété indiquée #property indicator_separate_window), un tel indicateur peut être invisible, bien qu'il sera dans la liste des indicateurs. Cela signifie que l'échelle de l'indicateur donné se distingue de l'échelle du graphique des prix et les valeurs de l'indicateur ajouté ne se sont pas introduits dans la gamme affichée du graphique de prix. Dans ce cas GetLastError() rendra le code nul signifiant l'absence de l'erreur. On pourra observer les valeurs d'un tel indicateur "invisible" dans "Fenêtre des données" et recevoir des autres programmes MQL5.

Exemple:

#property description "L'expert pour la démonstration du travail avec la fonction ChartIndicatorAdd()."
#property description "Après le lancement sur le graphique (et la réception de l'erreur au Journal) ouvrez"
#property description "les propriétés du conseiller et spécifiez les paramètres justes <symbol> et <period>."
#property description "L'indicateur MACD sera ajouté sur le graphique."
 
//--- input parameters
input string          symbol="AUDUSD";    // le nom du symbole
input ENUM_TIMEFRAMES period=PERIOD_M12;  // le temps trame
input int    fast_ema_period=12;          // la période de la moyenne rapide MACD
input int    slow_ema_period=26;          // la période de la moyenne lente MACD
input int      signal_period=9;           // la période de la prise de moyenne de la différence
input ENUM_APPLIED_PRICE apr=PRICE_CLOSE// le type du prix pour le calcul MACD
 
int indicator_handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
//--- essayons ajouter l'indicateur sur le graphique
   if(!AddIndicator())
     {
      //--- la fonction AddIndicator () a refusé d'ajouter l'indicateur sur le graphique
      int answer=MessageBox("Quand même, essayer d'ajouter MACD sur le graphique?",
                            "Le symbole et/ou le temps trame sont spécifiés incorrectement pour le supplément de l'indicateur",
                            MB_YESNO // les boutons du choix "Yes" et "No" seront montrés
                            );
      //--- si l'utilisateur insiste en tout cas sur l'utilisation incorrecte de ChartIndicatorAdd()
      if(answer==IDYES)
        {
         //--- d'abord communiquons sur cela au journal
         PrintFormat("L'attention! %s: Essayons ajouter l'indicateur MACD(%s/%s) sur le graphique %s/%s. Recevons l'erreur 4114",
                     __FUNCTION__,symbol,EnumToString(period),_Symbol,EnumToString(_Period));
         //--- recevons le numéro du nouveau sous-fenêtre, où tentons d'ajouter l'indicateur
         int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
         //--- maintenant faisons la tentative condamnée à l'erreur
         if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
            PrintFormat("On n'a pas réussi à ajouter l'indicateur MACD sur la fenêtre du graphique %d. Le code de l'erreur %d",
                        subwindow,GetLastError());
        }
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
// l'expert ne fait rien
  }
//+------------------------------------------------------------------+
//| La fonction de la vérification et le supplément de l'indicateur sur le graphique              |
//+------------------------------------------------------------------+
bool AddIndicator()
  {
//--- le message déduit
   string message;
//--- vérifions sur la coïncidence le symbole de l'indicateur et le symbole du graphique
   if(symbol!=_Symbol)
     {
      message="La démonstration de l'utilisation de la fonction Demo_ChartIndicatorAdd():";
      message=message+"\r\n";
      message=message+"On ne peut pas ajouter sur le graphique l'indicateur calculé sur un autre symbole.";
      message=message+"\r\n";
      message=message+"Indiquez le symbole du graphique dans les propriétés de l'expert- "+_Symbol+".";
      Alert(message);
      //--- la sortie anticipé, n'ajoutons pas l'indicateur sur le graphique
      return false;
     }
//--- vérifions sur la coïncidence le temps trame de l'indicateur et le temps trame du graphique
   if(period!=_Period)
     {
      message="On ne peut pas ajouter sur le graphique l'indicateur, calculé sur un autre temps trame.";
      message=message+"\r\n";
      message=message+"Indiquez dans les propriétés de l'expert le temps trame, qui est utilisé sur ce graphique - "+EnumToString(_Period)+".";
      Alert(message);
      //--- la sortie anticipé, n'ajoutons pas l'indicateur sur le graphique
      return false;
     }
//--- toutes les vérificatios ont passé, le symbole et la période de l'indicateur correspondent au graphique
   if(indicator_handle==INVALID_HANDLE)
     {
      Print(__FUNCTION__," Créons l'indicateur MACD");
      indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
      if(indicator_handle==INVALID_HANDLE)
        {
         Print("On n'a pas réussi à créer l'indicateur MACD. Le code de l'erreur ",GetLastError());
        }
     }
//--- obliterons le code de l'erreur
   ResetLastError();
//---appliquons l'indicateur au graphique
   Print(__FUNCTION__," Ajoutons l'indicateur MACD sur le graphique");
   Print("MACD est construit sur ",symbol,"/",EnumToString(period));
//--- recevons le numéro du nouveau sous-fenêtre, où ajoutons l'indicateur MACD
   int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   PrintFormat("Ajoutons l'indicateur MACD ) à la fenêtre du graphique %d ",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
     {
      PrintFormat("On n'a pas réussi à ajouter l'indicateur MACD sur la fenêtre du graphique %d. Le code de l'erreur %d",
                  subwindow,GetLastError());
     }
//--- le supplément de l'indicateur sur le graphique a passé avec succès
   return(true);
  }

Voir aussi

ChartIndicatorDelete(), ChartIndicatorName(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate()