ChartIndicatorAdd

Setzt Indikator mit dem angegebenen handle in das angegebene Fenster des Charts zu. Indikator und Chart sollten auf dem gleichen Symbol und Zeitrahmen gebaut werden.

bool  ChartIndicatorAdd(
   long  chart_id,                 // Identifikator des Charts 
   int   sub_window                // Nummer des Unterfensters 
   int   indicator_handle          // handle des Indikators 
   );

Parameter

chart_id

[in]  Identifikator des Charts. 0 bedeutet das laufende Chart.

sub_window

[in] Nummer des Unterfensters des Charts. 0 bedeutet das Hauptfenster des Charts. Um ein Indikator in ein neues Fenster hinzuzufügen, der Parameter muss um eins größer als der Index des letzten existierten Fensters sein, d.h. dem CHART_WINDOWS_TOTAL gleich sein. Wen der Parameterwert mehr als CHART_WINDOWS_TOTAL ist, das neue Fenster wird nicht erstellt werden und der Indikator wird nicht hinzufügt werden.

indicator_handle

[in]  Handle des Indikators.

Rückgabewert

Gibt true im Erfolgsfall zurück, anderenfalls false. Um die Information über den Fehler zu erhalten, muss man die Funktion GetLastError() aufrufen. Fehler 4114 bedeutet, dass der Chart und das hinzugefügte Indikator haben verschiedenen Symbol oder Zeitrahmen.

Hinweis

Wenn ein Indikator, der in einem separaten Fenster gezeichnet werden soll (z. B. integrierte IMACD oder benutzerdefinierter Indikator mit dem angegebenen #property indicator_separate_window) in den Hauptfenster des Charts hinzugefügt wird, kann dieser Indikator unsichtbar sein, obwohl er in der Liste der Indikatoren angezeigt wird. Dies bedeutet, dass Skala des Indikators von der Skala des Charts sich unterschiedet, und Werte des Indikators sind unsichtbar in angezeigte Skala des Charts. In diesen Fall gibt GetLastError() Code von Null zurück, das bedeute keinen Fehler. Die Werte dieses "unsichtbaren" Indikators wird in der "Datenfenster" sichtbar und können auch von anderen MQL5-Programme erhalten werden.

Beispiel:

#property description "Expert Advisor demonstriert Funktion ChartIndicatorAdd()."
#property description "Nach dem Start auf dem Chart (und Bekommen von Fehler im Log), öffnen Sie"
#property description "Eigenschaften von Expert Advisor und geben Sie die richtigen Parameter <symbol> und <period> ein."
#property description "Indikator MACD wird auf dem Chart hinzugefügt."
 
//--- input parameters
input string          symbol="AUDUSD";    // Symbolname
input ENUM_TIMEFRAMES period=PERIOD_M12;  // Zeitrahmen
input int    fast_ema_period=12;          // Periode der raschen MACD
input int    slow_ema_period=26;          // Periode der langsamen MACD
input int      signal_period=9;           // Mittelungsperiode der Unterschied
input ENUM_APPLIED_PRICE apr=PRICE_CLOSE// Preisetyp für Berechnen von 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);
//--- versuchen wir den Indikator zum Chart hinzuzufügen
   if(!AddIndicator())
     {
      //--- Funktion AddIndicator() weigerte sich, den Indikator zum Chart hinzuzufügen
      int answer=MessageBox("Trotzdem versuchen MACD auf dem Chart hinzufügen?",
                            "Falscher Symbol und/oder der Zeitrahmen für die Zugabe des Indikators",
                            MB_YESNO // Auswahlschaltfläche "Yes" und "No" gezeigt werden
                            );
      //--- wenn Benutzer beharrt auf dem Missbrauch von ChartIndicatorAdd()
      if(answer==IDYES)
        {
         //--- erst anzeigen es im Log
         PrintFormat("Achtung! %s: Wir versuchen indikator MACD(%s/%s) auf dem Chart %s/%s hinzuzufügen. Bekommen den Fehler 4114",
                     __FUNCTION__,symbol,EnumToString(period),_Symbol,EnumToString(_Period));
         //--- erhalten den Nummer von neuen Sub-Fenster, in dem wir versuchen, einen Indikator hinzufügen
         int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
         //--- jetzt einen fehleranfälligen Versuch machen
         if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
            PrintFormat("MACD konnte nicht auf dem Fenster %d des Charts hinzugefügt werden. Fehlercode  %d",
                        subwindow,GetLastError());
        }
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
// Expert Advisor mach nichts
  }
//+------------------------------------------------------------------+
//| Funktion prüft und fügt den Indikator auf den Chart zu               |
//+------------------------------------------------------------------+
bool AddIndicator()
  {
//--- Nachricht
   string message;
//--- Prüfen wir den Symbol des Indikators und Symbol des Charts
   if(symbol!=_Symbol)
     {
      message="Demonstrieren die Verwendung der Funktion Demo_ChartIndicatorAdd():";
      message=message+"\r\n";
      message=message+"Sie können nicht den Indikator, der an anderem Symbol berechnet war, auf dem Chart hinzufügen.";
      message=message+"\r\n";
      message=message+"Geben Sie den Chartsymbol in Eigenschaften des Experts ein - "+_Symbol+".";
      Alert(message);
      //--- Frühausgang, hinzufügen wir keinen Indikator zum Chart
      return false;
     }
//--- Prüfen wir Zeitrahmen des Indikators und Zeitrahmen des Charts
   if(period!=_Period)
     {
      message="Sie können nicht den Indikator, der an anderer Zeitrahmen berechnet war, auf dem Chart hinzufügen.";
      message=message+"\r\n";
      message=message+"Geben Sie Zeitrahmen des Charts in Eigenschaften von Expert Advisor ein - "+EnumToString(_Period)+".";
      Alert(message);
      //--- Frühausgang, hinzufügen wir keinen Indikator zum Chart
      return false;
     }
//--- alle Tests bestanden haben, Symbol und Periode des Indikators mit Chart gleich sind
   if(indicator_handle==INVALID_HANDLE)
     {
      Print(__FUNCTION__,"  Erstellen wir MACD");
      indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
      if(indicator_handle==INVALID_HANDLE)
        {
         Print("MACD konnte nicht erstellt werden. Fehlercode",GetLastError());
        }
     }
//--- reset Fehlercode
   ResetLastError();
//--- Fügen den Indikator auf dem Chart hinzu
   Print(__FUNCTION__,"  Fügen den Indikator MACD auf dem Chart hinzu");
   Print("MACD ist gebaut auf ",symbol,"/",EnumToString(period));
//--- Bekommen wir den Nummer des neuen Fenster, auf dem MACD hinzugefügt wird
   int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   PrintFormat("Fügen den Indikator auf dem Fenster %d des Charts hinzu",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
     {
      PrintFormat("MACD konnte nicht auf dem Fenster %d des Chart hinzugefügt werden. Fehlercode %d",
                  subwindow,GetLastError());
     }
//--- Indikator war erfolgreich auf dem Chart hinzugefügt
   return(true);
  }

Sehen Sie auch

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