#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
//--- зададим показ трех горизонтальных уровней в отдельном окне индикатора
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
//--- установим толщину горизонтальных уровней
#property indicator_levelwidth 5
//--- установим цвет горизонтальных уровней
#property indicator_levelcolor clrAliceBlue
//--- установим стиль горизонтальных уровней
#property indicator_levelstyle STYLE_DOT
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- зададим описания горизонтальных уровней
IndicatorSetString(INDICATOR_LEVELTEXT,0,"First Level (index 0)");
IndicatorSetString(INDICATOR_LEVELTEXT,1,"Second Level (index 1)");
IndicatorSetString(INDICATOR_LEVELTEXT,2,"Third Level (index 2)");
//--- зададим короткое имя индикатора
IndicatorSetString(INDICATOR_SHORTNAME,"IndicatorSetInteger()");
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;
//--- считаем тики
tick_counter++;
//--- и устанавливаем цвет горизонтальных уровней в зависимости от счетчика тиков
ChangeLevelsColor(tick_counter,3,6,10); // три последних параметра переключают цвет
//--- поменяем стили горизонтальных уровней
ChangeLevelStyle(tick_counter);
//--- получим толщину линии как остаток целочисленного деления числа тиков на 5
int width=tick_counter%5;
//--- установим толщину горизонтальных уровней
IndicatorSetInteger(INDICATOR_LEVELWIDTH,0,width+1);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
//| Установим цвет горизонтальной линии в отдельном окне индикатора |
//+------------------------------------------------------------------+
void ChangeLevelsColor(int tick_number,// делимое, число для получения остатка деления
int f_trigger, // первый делитель переключения цвета
int s_trigger, // второй делитель переключения цвета
int t_trigger) // третий делитель переключения цвета
{
static color colors[3]={clrRed,clrBlue,clrGreen};
//--- индекс цвета из массива colors[]
int index=-1;
//--- вычислим номер цвета из массива colors[] для раскрашивания горизонтальной линии
if(tick_number%f_trigger==0)
index=0; // если число tick_number делится без остатка на f_trigger
if(tick_number%s_trigger==0)
index=1; // если число tick_number делится без остатка на s_trigger
if(tick_number%t_trigger==0)
index=2; // если число tick_number делится без остатка на t_trigger
//--- если цвет определен, установим его
if(index!=-1)
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,colors[index]);
//---
}
//+------------------------------------------------------------------+
//| Установим стиль горизонтальных линий в отдельном окне индикатора |
//+------------------------------------------------------------------+
void ChangeLevelStyle(int tick_number) // число для получения остатка от деления
{
//--- массив для хранения стилей
static ENUM_LINE_STYLE styles[5]=
{STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//--- индекс стиля из массива styles[]
int index=-1;
//--- вычислим номер из массива styles[] для установки стиля горизонтальной линии
if(tick_number%50==0)
index=5; // если tick_number делится без остатка на 50, то стиль STYLE_DASHDOTDOT
if(tick_number%40==0)
index=4; // ... стиль 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
//--- если стиль определен, установим его
if(index!=-1)
IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,styles[index]);
} |