#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
//--- spécifions la démonstration de trois niveaux horizontaux dans la fenêtre séparée de l'indicateur
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
//---établissons l'épaisseur des niveaux horizontaux
#property indicator_levelwidth 5
//--- établissons la couleur des niveaux horizontaux
#property indicator_levelcolor clrAliceBlue
//--- établissons le style des niveaux horizontaux
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- spécifions les descriptions des niveaux horizontaux
IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)");
IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)");
IndicatorSetString(INDICATOR_LEVELTEXT,2,"Third Level (index 2)");
//--- spécifions le nom court de l'indicateur
IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetInteger() Demo");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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;
//--- calculons les ticks
tick_counter++;
//--- établissons les couleurs des niveaux horizontaux en fonction du compteur des ticks
ChangeLevelColor(0,tick_counter,3,6,10); // trois derniers paramètres basculent la couleur
ChangeLevelColor(1,tick_counter,3,6,8);
ChangeLevelColor(2,tick_counter,4,7,9);
//--- changeons les styles des niveaux horizontaux
ChangeLevelStyle(0,tick_counter);
ChangeLevelStyle(1,tick_counter+5);
ChangeLevelStyle(2,tick_counter+15);
//--- recevrons l'épaisseur de la ligne, comme le reste de la division entière du nombre des ticks sur 5
int width=tick_counter%5;
//--- passerons selon tous les niveaux horizontaux et exposerons
for(int l=0;l<3;l++)
IndicatorSetInteger(INDICATOR_LEVELWIDTH,l,width+1);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| établissons la couleur de la ligne horizontale dans la fenêtre séparée de l'indicateur |
//+------------------------------------------------------------------+
void ChangeLevelColor(int level, // le numéro de la ligne horizontale
int tick_number,// le dividende, le nombre pour la réception du reste de la division
int f_trigger, // le premier diviseur du basculement de la couleur
int s_trigger, // le deuxième diviseur du basculement de la couleur
int t_trigger) // le troisième diviseur du basculement de la couleur
{
static color colors[3]={clrRed,clrBlue,clrGreen};
//--- l'indice de la couleur du tableau colors[]
int index=-1;
//--- calculons le numéro de la couleur du tableau colors [] pour colorier la ligne horizontale
if(tick_number%f_trigger==0)
index=0; // si le nombre tick_number se divise sans reste sur f_trigger
if(tick_number%s_trigger==0)
index=1; // si le nombre tick_number se divise sans reste sur s_trigger
if(tick_number%t_trigger==0)
index=2; // si le nombre tick_number se divise sans reste sur t_trigger
//--- si la couleur est définie, l'établissons
if(index!=-1)
IndicatorSetInteger(INDICATOR_LEVELCOLOR,level,colors[index]);
//---
}
//+------------------------------------------------------------------+
//| établissons le style de la ligne horizontale dans la fenêtre séparée de l'indicateur |
//+------------------------------------------------------------------+
void ChangeLevelStyle(int level, // le numéro de la ligne horizontale
int tick_number// le nombre pour la réception du reste de la division)
)
{
//--- le tableau pour stocker les styles
static ENUM_LINE_STYLE styles[5]=
{STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//--- l'indice du style du tableau styles[]
int index=-1;
//--- calculons le numéro du tableau styles[] pour établir le style de la ligne horizontale
if(tick_number%50==0)
index=5; // si tick_number se divise sans reste sur 50, le style STYLE_DASHDOTDOT
if(tick_number%40==0)
index=4; // ... le style 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
//--- si le style est défini, l'établissons
if(index!=-1)
IndicatorSetInteger(INDICATOR_LEVELSTYLE,level,styles[index]);
}
|