ChartIndicatorDelete

Remove um indicador com um nome especificado a partir de janela do gráfico especificado.

bool  ChartIndicatorDelete(
   long           chart_id,              // ID Gráfico
   int            sub_window             // número da sub-janela
   const string   indicator_shortname    // nome abreviado do indicador
   );

Parâmetros

chart_id

[in]  ID Gráfico. 0 (zero) indica a sub-janela gráfico principal.

sub_window

[in]  Número de sub-janela do gráfico. 0 (zero) indica o sub-janela gráfico principal.

const indicator_shortname

[in]  O nome abreviado do indicador que é definido na propriedade do INDICATOR_SHORTNAME com a função IndicatorSetString(). Para obter o nome abreviado de um indicador usar a função ChartIndicatorName().

Valor do Retorno

Retorna true em caso de sucesso deletando o indicador. Do contrário ele retorna false. Para obter detalhes do erro use a função GetLastError().

Observação

Se houver dois indicadores com nove abreviados iguais na subjanela do gráfico, o primeiro da linha será deletado.

Se outros indicadores neste gráfico são baseadas nos valores do indicador que está sendo deletado, estes indicadores também serão deletados.

Não confundir o nome abreviado do indicador e o nome do arquivo que é especificado ao criar um indicador usando as funções iCustom() e IndicatorCreate(). Se o nome abreviado de um indicador não é definido de forma explicita, o nome do arquivo contendo o código-fonte do indicador será especificado durante a compilação.

Deletando um indicador de um gráfico não significa que seu cálculo será excluído da me mória do terminal. Para liberar o manuseio do indicador usar a função IndicatorRelease().

Nome abreviado do indicador deve ser formado corretamente. a propriedade INDICATOR_SHORTNAME será escrita usando a funçãoIndicatorSetString(). Sé recomendado que o nome abreviado deve conter valores de todos os parâmetros de entrada do indicador, porque sendo o indicador excluído do gráfico pela função ChartIndicatorDelete(), ele é identificado pelo nome abreviado.

Exemplo de exclusão de um indicador após inicialização ter falhado:

//+------------------------------------------------------------------+
//|                                    Demo_ChartIndicatorDelete.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plotar Histograma
#property indicator_label1  "Histogram"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- parâmetros de entrada
input int      first_param=1;
input int      second_param=2;
input int      third_param=3;
input bool     wrong_init=true;
//--- buffers do indicador
double         HistogramBuffer[];
string         shortname;
//+------------------------------------------------------------------+
//| Função de inicialização do indicador customizado                 |
//+------------------------------------------------------------------+
int OnInit()
  {
   int res=INIT_SUCCEEDED;
//---Vincular a array HistogramBuffer para a buffer (memória temporária) do indicador
   SetIndexBuffer(0,HistogramBuffer,INDICATOR_DATA);
//--- Construir um nome abreviado de indicador baseado nos parâmetro de entrada
   shortname=StringFormat("Demo_ChartIndicatorDelete(%d,%d,%d)",
                          first_param,second_param,third_param);
   IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//--- Se a conclusão forçada de um indicador está definida, retornar um valor não-zero
   if(wrong_init) res=INIT_FAILED;
   return(res);
  }
//+------------------------------------------------------------------+
//| Função de iteração do indicador customizado                      |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- Posição de partida para trabalhar num loop
   int start=prev_calculated-1;
   if(start<0) start=0;
//--- Preencher o buffer do indicador com valores
   for(int i=start;i<rates_total;i++)
     {
      HistogramBuffer[i]=close[i];
     }
//--- valor retorno de prev_calculated para a próxima chamada
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Um processador do evento de desinicializada (Deinit)             |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   PrintFormat("%s: Código de razão de finalização=%d",__FUNCTION__,reason);
   if(reason==REASON_INITFAILED)
     {
      PrintFormat("Um indicador com um nome abreviado %s (arquivo %s) se exclui do gráfico",shortname,__FILE__);
      int window=ChartWindowFind();
      bool res=ChartIndicatorDelete(0,window,shortname);
      //--- Analisar o resultado de chamada de ChartIndicatorDelete()
      if(!res)
        {
         PrintFormat("Falha para deletar o indicador %s partir da janela #%d. Código de erro %d",
                     shortname,window,GetLastError());
        }
     }
  }

Também Veja

ChartIndicatorAdd(), ChartIndicatorName(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate(), IndicatorSetString()