IndicatorSetInteger

La funzione imposta il valore della proprietà indicatore corrispondente. La proprietà indicatore deve essere di int o di tipo color. Ci sono due varianti della funzione.

Chiamare specificando l'identificatore di proprietà.

bool  IndicatorSetInteger(
   int  prop_id,           // identificatore
   int  prop_value         // valore da impostare
   );

Chiamare specificando l'identificatore della proprietà ed il modificatore.

bool  IndicatorSetInteger(
   int  prop_id,           // identificatore
   int  prop_modifier,     // modificatore
   int  prop_value         // valore da impostare
   )

Parametri

prop_id

[in] Identificatore della proprietà dell'indicatore. Il valore può essere uno dei valori dell'enumerazione ENUM_CUSTOMIND_PROPERTY_INTEGER.

prop_modifier

[in] Modificatore della proprietà specificata. Solo le proprietà livello richiedono un modificatore.

prop_value

[in]  Valore della proprietà.

Valore restituito

In caso di esecuzione avvenuta con successo, restituisce true, altrimenti - false

Nota

La numerazione delle proprietà (modificatori) comincia da 1 (uno) quando si utilizza la direttiva #property, mentre la funzione utilizza la numerazione da 0 (zero). Nel caso in cui il numero di livello è impostato in modo errato, la visualizzazione dell' indicatore può differire da quanto previsto.

Ad esempio, al fine di impostare lo spessore della prima linea orizzontale, usa l'indice zero:

  • IndicatorSetInteger(INDICATOR_LEVELWIDTH, 0, 5) - l'indice 0 viene usato per impostare lo spessore del primo livello.

Esempio: Indicatore che imposta il colore, lo stile e lo spessore delle linee orizzontali dell'indicatore.

Esempio di uso della funzione indicatore IndicatorSetInteger()

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
//--- visualizza tre livelli orizzontali in una finestra indicatore separata
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
//--- imposta lo spessore dei livelli orizzontali
#property indicator_levelwidth 5
//--- imposta il colore dei livelli orizzontali
#property indicator_levelcolor clrAliceBlue
//--- imposta lo stile dei livelli orizzontali
#property indicator_levelstyle STYLE_DOT
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione Indicatore Personalizzato                         |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//--- imposta le descrizioni dei livelli orizzontali
   IndicatorSetString(INDICATOR_LEVELTEXT,0,"Primo livello (indice 0)");
   IndicatorSetString(INDICATOR_LEVELTEXT,1,"Secondo livello (indice 1)");
   IndicatorSetString(INDICATOR_LEVELTEXT,2,"Terzo livello (indice 2)");
//--- imposta il nome corto per l'indicatore
   IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetInteger() Demo");
   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 int tick_counter=0;
//--- calcola i ticks
   tick_counter++;
//--- e calcola i colori dei livelli orizzontali a seconda del contatore del tick
   ChangeLevelColor(0,tick_counter,3,6,10); // gli ultimi tre paramteri cambiano colore
   ChangeLevelColor(1,tick_counter,3,6,8);
   ChangeLevelColor(2,tick_counter,4,7,9);
//--- modifica lo stile delle linee orizzontali
   ChangeLevelStyle(0,tick_counter);
   ChangeLevelStyle(1,tick_counter+5);
   ChangeLevelStyle(2,tick_counter+15);
//--- ottiene lo spessore come resto della divisione intera del numero di ticks per 5
   int width=tick_counter%5;
//--- iterazione su tutti i livelli orizzontali ed impostazioni dello spessore
   for(int l=0;l<3;l++)
      IndicatorSetInteger(INDICATOR_LEVELWIDTH,l,width+1);
//--- restituisce il valore di prev_calculated per la prossima chiamata
   return(rates_total);
  }
//+--------------------------------------------------------------------------------+
//| Imposta il colore della linea orizzontale nella finestra indicatore separata   |
//+--------------------------------------------------------------------------------+
void ChangeLevelColor(int level,      // numero di linee orizzontali
                      int tick_number,// dividendo, numero per ottenere il resto della divisione
                      int f_trigger,  // primo divisore del cambio di colore
                      int s_trigger,  // secondo divisore del cambio di colore
                      int t_trigger)  // terzo divisore del cambio di colore
  {
   static color colors[3]={clrRed,clrBlue,clrGreen};
//--- indice del colore dall'array colors[]
   int index=-1;
//--- calcola il numero di colori dall'array colors[] per disegnare una linea orizzontale
   if(tick_number%f_trigger==0)
      index=0;   // se tick_number è diviso per f_trigger senza dare resto
   if(tick_number%s_trigger==0)
      index=1;   // se tick_number è diviso per s_trigger senza dare resto
   if(tick_number%t_trigger==0)
      index=2;   // se tick_number è diviso per t_trigger senza dare resto
//--- se il colore è definito, impostarlo      
   if(index!=-1)
      IndicatorSetInteger(INDICATOR_LEVELCOLOR,level,colors[index]);
//---
  }
//+--------------------------------------------------------------------------------+
//| Imposta lo stile della linea orizzontale nella finestra indicatore separata    |
//+--------------------------------------------------------------------------------+
void ChangeLevelStyle(int level,     // numero della linea orizzontale
                      int tick_number// numer per ottenere il resto della divisione
                      )
  {
//--- array per memorizzare gli stili
   static ENUM_LINE_STYLE styles[5]=
     {STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//--- indice degli stili dall'array styles[]
   int index=-1;
//--- calcola il numero dall'array styles[] per impostare lo stile della linea orizzontale
   if(tick_number%50==0)
      index=5;   // se tick_number diviso per 50 è senza resto, allora lo stile è STYLE_DASHDOTDOT
   if(tick_number%40==0)
      index=4;   // ... lo stile è STYLE_DASHDOT
   if(tick_number%30==0)
      index=3;   // ... STYLE_DOT
   if(tick_number%20==0)
      index=2;   // ... STYLE_DASH
   if(tick_number%10==0)
      index=1;   // ... STYLE_SOLID
//--- se lo stile è definito, impostarlo      
   if(index!=-1)
      IndicatorSetInteger(INDICATOR_LEVELSTYLE,level,styles[index]);
  }

Vedi anche

Proprietà Indicatori Personalizzati, Proprietà Programmi (#property), Stili di disegno