DRAW_NONE

Lo stile DRAW_NONE è progettato per l'utilizzo in casi in cui è necessario calcolare i valori di un buffer e mostrarli nella Finestra Dati, ma il tracciamento sul grafico non è necessario. Per impostare la precisione usare l'espressione IndicatorSetInteger (INDICATOR_DIGITS, num_chars) nella funzione OnInit():

int OnInit()
  {
//--- mappatura buffers indicatore
   SetIndexBuffer(0,InvisibleBuffer,INDICATOR_DATA);
//--- Imposta la precisione dei valori da visualizzare nella finestra dei dati
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//---
   return(INIT_SUCCEEDED);
  }

Il numero di buffer necessari per tracciare DRAW_NONE è 1.

Un esempio di indicatore che mostra il numero della barra su cui il mouse attualmente si muove, nella Finerstra Dati. La numerazione corrisponde alle timeseries, ovvero che l'attuale barra incompiuta ha l'indice pari zero, e la barra più vecchia ha l'indice più grande.

Un esempio di DRAW_NONE

Si noti che nonostante il fatto che per il colore rosso è impostato il plotting #1, l'indicatore non disegna nulla sul grafico.

//+--------------------------------------------------------------------------------+
//|                                                                  DRAW_NONE.mq5 |
//|                                      Copyright 2011, MetaQuotes Software Corp. | 
//|                                                           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
//--- plot Invisible
#property indicator_label1  "Bar Index"
#property indicator_type1   DRAW_NONE
#property indicator_style1  STYLE_SOLID
#property indicator_color1  clrRed
#property indicator_width1  1
//--- buffers indicatore
double         InvisibleBuffer[];
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione Indicatore Personalizzato                         |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//--- Associa un array e un buffer indicatore
   SetIndexBuffer(0,InvisibleBuffer,INDICATOR_DATA);
//--- Imposta la precisione dei valori da visualizzare nella finestra dei dati
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//---
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------+
//| Funzione di iterazione indicatore personalizato                                |
//+--------------------------------------------------------------------------------+
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 questo è il primo calcolo dell'indicatore
   if(prev_calculated==0)
     {
      //--- Rinumera le barre per la prima volta
      CalcValues(rates_total,close);
      //--- Ricorda il tempo di apertura della barra corrente in lastbar
      lastbar=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
     }
   else
     {
      //--- Se una nuova barra è apparsa, il suo tempo di apertura differisce da lastbar
      if(lastbar!=SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE))
        {
         //--- Rinumera le barre ancora una volta
         CalcValues(rates_total,close);
         //--- Aggiornare l'orario di apertura della barra corrente in lastbar
         lastbar=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
        }
     }
//--- restituisce il valore di prev_calculated per la prossima chiamata
   return(rates_total);
  }
//+--------------------------------------------------------------------------------+
//| Numera le barre come in una timeseries                                         |
//+--------------------------------------------------------------------------------+
void CalcValues(int total,double const  &array[])
  {
//--- Imposta l' indicizzazione del buffer indicatore come in una timeseries
   ArraySetAsSeries(InvisibleBuffer,true);
//--- Riempie ogni barra con il suo numero
   for(int i=0;i<total;i++) InvisibleBuffer[i]=i;
  }