ChartIndicatorAdd

Aggiunge un indicatore con l'handle specificato in una finestra di grafico specificato. Indicatore e grafico dovrebbero essere generati sullo stesso simbolo e timeframe.

bool  ChartIndicatorAdd(
   long  chart_id,                 // ID del Grafico
   int   sub_window                // numero di sotto-finestre
   int   indicator_handle          // handle dell'indicatore
   );

Parametri

chart_id

[in] ID del Grafico. 0 significa il grafico corrente.

sub_window

[in]  Il numero del grafico sotto-finestra. 0 significa la finestra principale del grafico. Per aggiungere un indicatore in una nuova finestra, il parametro deve esserne uno maggiore rispetto all'indice dell'ultima finestra esistente, cioè uguale a CHART_WINDOWS_TOTAL. Se il valore del parametro è maggiore di CHART_WINDOWS_TOTAL, una nuova finestra non verrà creata, e l'indicatore non verrà aggiunto.

indicator_handle

[in] Handle dell'indicatore.

Valore restituito

La funzione restituisce true in caso di successo, altrimenti restituisce false. Al fine di ottenere informazioni sull' errore, chiamare la funzione GetLastError(). Errore 4114 significa che un grafico ed un indicatore aggiunto differiscono dal loro simbolo o timeframe.

Nota

Se un indicatore che deve essere disegnato in una sottofinestra separata (per esempio, il iMACD built-in o un indicatore personalizzato con specificata la proprietà #property indicator_separate_window) viene applicato alla finestra grafico principale, può non essere visibile anche se sarà ancora presente nella lista degli indicatori. Ciò significa che la scala dell'indicatore è diversa dalla scala del grafico dei prezzi ed i valori applicati agli indicatori non possono essere inseriti nel campo visualizzato del grafico dei prezzi. In questo caso, GetLastError() restituisce codice zero, indicando l'assenza di un errore. I valori di tale indicatore "invisibile" possono essere visti nella Finestra Dati e ricevuti da altre applicazioni MQL5.

Esempio:

#property description "L' Expert Advisor dimostra il lavoro con la funzione ChartIndicatorAdd()."
#property description "Dopo il lancio sul chart (e la ricezione dell'errore nel Journal), aprire"
#property description "le proprietà dell'Expert Advisor e specificare correttamente i parametri <simbolo> e <periodo> ."
#property description "L' indicatore MACD verrà aggiunto al chart."
 
//--- parametri di input
input string          symbol="AUDUSD";    // nome del simbolo
input ENUM_TIMEFRAMES period=PERIOD_M12;  // time frame
input int    fast_ema_period=12;          // periodo MACD veloce
input int    slow_ema_period=26;          // periodo MACD lento
input int      signal_period=9;           // periodo del segnale
input ENUM_APPLIED_PRICE apr=PRICE_CLOSE// tipo di prezzo per il calcolo del MACD
 
int indicator_handle=INVALID_HANDLE;
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione dell' Expert                                      |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//---
   indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
//--- prova ad aggiungere l'indicatore sul grafico
   if(!AddIndicator())
     {
      //--- La funzione AddIndicator() rifiuta di aggiungere l'indicatore sul chart
      int answer=MessageBox("Vuoi aggiungere MACD sul chart ad ogni modo?",
                            "Non corretto simbolo e/o timeframe per aggiungere l'indicatore",
                            MB_YESNO // Le selezioni dei bottoni "Si" e "No" verranno mostrate
                            );
      //--- se un utente insiste ancora sull'uso non corretto di ChartIndicatorAdd()
      if(answer==IDYES)
        {
         //--- prima di tutto, verrà creata una riga del Journal a riguardo
         PrintFormat("Attenzione! %s: Si sta tentando di aggiungere l'indicatore MACD(%s/%s) sul chart %s/%s. Ricevuto errore 4114",
                     __FUNCTION__,symbol,EnumToString(period),_Symbol,EnumToString(_Period));
         //--- riceve il numero di una nuova sottofinestra, alla quale tenteremo di aggiungere l'indicatore
         int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
         //--- ora fa un tentativo destinato al fallimento
         if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
            PrintFormat("Fallimento nell'aggiungere l'indicatore MACD sulla finestra del chart %d. Codice errore  %d",
                        subwindow,GetLastError());
        }
     }
//---
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------+
//| Funzione tick dell'Expert                                                      |
//+--------------------------------------------------------------------------------+
void OnTick()
  {
// L' Expert Advisor non esegue nulla
  }
//+--------------------------------------------------------------------------------+
//| La funzione per controllare ed aggiungere l'indicatore sul chart               |
//+--------------------------------------------------------------------------------+
bool AddIndicator()
  {
//--- messaggio visualizzato
   string message;
//--- controlla se il simbolo dell'indicatore ed il simbolo del chart corrispondono l'un l'altro
   if(symbol!=_Symbol)
     {
      message="Visualizza l'uso della funzione Demo_ChartIndicatorAdd():";
      message=message+"\r\n";
      message=message+"Impossibile aggiungere l'indicatore calcolato su un altro simbolo sul chart.";
      message=message+"\r\n";
      message=message+"Specifica il simbolo del chart nelle proprietà dell'Expert Advisor - "+_Symbol+".";
      Alert(message);
      //--- uscita prematura, l'indicatore non verrà aggiunto sul chart
      return false;
     }
//--- controlla se l'indicatore ed il timeframe del chart corrispondono l'un l'altro
   if(period!=_Period)
     {
      message="Impossibile aggiungere l'indicatore calcolato su un altro timeframe sul chart.";
      message=message+"\r\n";
      message=message+"Specifica il timeframe del chart nelle proprietà dell'Expert Advisor - "+EnumToString(_Period)+".";
      Alert(message);
      //--- uscita prematura, l'indicatore non verrà aggiunto sul chart
      return false;
     }
//--- tutti i controlli completati, simbolo e timeframe dell'indicatore corrispondono al chart
   if(indicator_handle==INVALID_HANDLE)
     {
      Print(__FUNCTION__,"  Crea l'indicatore MACD ");
      indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
      if(indicator_handle==INVALID_HANDLE)
        {
         Print("Fallimento nel creare l'indicatore MACD. Error code ",GetLastError());
        }
     }
//--- resetta il codice errore
   ResetLastError();
//--- applica l'indicatore al chart
   Print(__FUNCTION__,"  Aggiunge l'indicatore MACD sul chart");
   Print("MACD viene generato su ",symbol,"/",EnumToString(period));
//--- riceve il numero di una nuova sottofinestra, a cui viene aggiunto l'indicatore MACD
   int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   PrintFormat("Aggiunta dell'indicatore MACD sulla finestra chart chart %d",subwindow);
   if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
     {
      PrintFormat("Fallimento nell'aggiungere l'indicatore MACD sulla finestra del chart %d. Codice errore  %d",
                  subwindow,GetLastError());
     }
//--- Indicatore aggiunto con successo
   return(true);
  }

Vedere anche

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