Job finished
![](https://c.mql5.com/i/avatar/avatar_na2.png)
Specification
Создать ИНТЕРАКТИВНЫЙ индикатор согласно подробному техническому заданию.
Входные данные:
1. Линии сопротивления и поддержки.
2. Правила счета количества баров.
Что необходимо от индикатора:
Пользователь на графике создает прямоугольник:
нижняя и верхняя стороны прямоугольников ограничены линиями сопротивления поддержки.
левая и правая стороны прямоугольников задается пользователем.
Индикатор Вычисляет и выводит на график количество баров в зонах между линиями сопротивления поддержки, заданных пользователем.
Пользователь может задать столько прямоугольников сколько ему необходимо.
Индикатор находит эти прямоугольники, подправляет верхнюю и нижнюю сторону прямоугольников под ближайшие линии СП.
Далее индикатор считает количество баров в этом прямоугольнике и выводит результат в левом верхнем углу прямоугольника под линией сопротивления, как показано на рисунке.
Если в зоне между соседними линиями несколько прямоугольников создано пользователем, то индикатор вычисляет количество баров в каждом и суммирует количество баров, как показано на рисунке.
В этом заключается интерактивность пользователя и индикатора.
Пример работы такого индикатора изображен на рисунке во вложении.
Пример кода скрипта с комментариями. Скрипт выполняет построение вышеуказанных линий.
//+------------------------------------------------------------------+
//| S.R.levels.mq4 |
//| Andrii Mazur, A.RE.Capital LLC |
//| www.myfxbook.com/members/andibello |
//+------------------------------------------------------------------+
#property copyright "Andrii Mazur, A.RE.Capital"
#property link "www.myfxbook.com/members/andibello"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
int start()
{
//--------------------------------------------------------------------
double
LBOUND, // Lower boundary of a global flat; default value = 0.0000
UBOUND, // Upper boundary of a global flat; default value = 0.0000
diff, // Difference between upper and lower boundaries
price; // for loop price
int
i, // Counter
num; // Number of S.R. levels above and below U.BOUND and L.BOUND; default value = 10
string
HLName;
//--------------------------------------------------------------------
LBOUND = 1.1009; // Default value L.BOUND for script
UBOUND = 1.1162; // Default value U.BOUND for script
i = 0; // Initial value of counter
num = 10; // Num default value for script
//stl = STYLE_DASH // Line style value
//col = Blue // Line colour value
//--------------------------------------------------------------------
diff=UBOUND-LBOUND;
for(i=0; i <= num - 1; i++)
{
price = LBOUND - i*diff;
HLName = "LBOUND_" + i;
ObjectCreate(HLName, OBJ_HLINE, 0, 0, price);
ObjectSet(HLName, OBJPROP_STYLE,STYLE_DASH);
ObjectSet(HLName,OBJPROP_COLOR,Blue);
price = UBOUND + i*diff;
HLName = "UBOUND_" + i;
ObjectCreate(HLName, OBJ_HLINE, 0, 0, price);
ObjectSet(HLName, OBJPROP_STYLE, STYLE_DASH);
ObjectSet(HLName, OBJPROP_COLOR, Blue);
}
return(0);
}
//+------------------------------------------------------------------+