DRAW_NONE

O estilo DRAW_NONE é projetado para uso em casos onde é necessário calcular os valores de um buffer e mostrá-los na Janela de Dados, mas a plotagem no gráfico não é necessária. Para configurar com precisão use a expressão IndicatorSetInteger(INDICATOR_DIGITS,num_chars) na função OnInit():

int OnInit()
  {
//--- mapeamento de buffers do indicador
   SetIndexBuffer(0,InvisibleBuffer,INDICATOR_DATA);
//--- Define a precisão dos valores a serem exibidos na Janela de Dados
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//---
   return(INIT_SUCCEEDED);
  }

O número de buffers requeridos para plotagem de DRAW_NONE é 1.

Um exemplo do indicador que mostra o número da barra na janela de dados, sobre a qual o mouse passa sobre ela. A numeração corresponde as séries temporais (timeseries), significando que a atual barra inacabada tem índice zero e a mais antiga barra tem o maior índice.

Um exemplo de DRAW_NONE

Note que apesar do fato de ser definida a plotagem para a cor vermelha #1, o indicador não desenha nada no gráfico.

//+------------------------------------------------------------------+
//|                                                    DRAW_NONE.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_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plotar Invisível
#property indicator_label1  "Barra Índice"
#property indicator_type1   DRAW_NONE
#property indicator_style1  STYLE_SOLID
#property indicator_color1  clrRed
#property indicator_width1  1
//--- buffers do indicador
double         InvisibleBuffer[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador customizado                 |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Ligando um array e um buffer de indicador
   SetIndexBuffer(0,InvisibleBuffer,INDICATOR_DATA);
//--- Define a precisão dos valores a serem exibidos na Janela de Dados
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   static datetime lastbar=0;
//--- Se este for o primeiro cálculo do indicador
   if(prev_calculated==0)
     {
      //--- Renumerar as barras pela primeira vez
      CalcValues(rates_total,close);
      //--- Lembrar que a abertura do tempo da barra atual é no fechamento da última barra
      lastbar=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
     }
   else
     {
      //--- Se uma nova barra apareceu, sua abertura de tempo difere da última barra
      if(lastbar!=SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE))
        {
         //--- Renumerar as barras mais uma vez
         CalcValues(rates_total,close);
         //--- Atualizar o tempo de abertura da barra atual com a última barra
         lastbar=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
        }
     }
//--- valor retorno de prev_calculated para a próxima chamada
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Número das barras como numa timeseries                           |
//+------------------------------------------------------------------+
void CalcValues(int total,double const  &array[])
  {
//--- Definir a indexação do buffer do indicador como numa timeseries
   ArraySetAsSeries(InvisibleBuffer,true);
//--- Definir cada barra com sua numeração
   for(int i=0;i<total;i++) InvisibleBuffer[i]=i;
  }