Описание горизонтальных уровней для индикаторов

 

Кто знает, как описать горизонтальные уровни для индикаторов? Перерыл все документацию - ничего не нашел.

 
ram25:
Можно подробнее, покажите скриншот или опишите ситуауию

Например, МАСД. Ручками можно описать уровень. Вопрос как сделать это программными средствами?

 
 

У каждой MQL4 программы можно указать дополнительные специфические параметры #property, которые помогают клиентскому терминалу правильно обслуживать программы без необходимости их явного запуска. В первую очередь это касается внешних настроек индикаторов.

#property идентификатор значение


Константа Тип Описание
link string ссылка на сайт компании-производителя
copyright string название компании-производителя
stacksize int размер стека для рекурсивных вызовов
library библиотека; не назначается никакой стартовой функции, не удаляются функции, которые не вызываются из других функций
indicator_chart_window void выводить индикатор в окно графика
indicator_separate_window void выводить индикатор в отдельное окно
indicator_buffers int количество буферов для расчета индикатора, максимум до 8
indicator_minimum double нижнее ограничение шкалы отдельного окна индикатора
indicator_maximum double верхнее ограничение шкалы отдельного окна индикатора
indicator_colorN color цвет для вывода линии N, где N от 1 до 8
indicator_widthN int толщина линии N, где N от 1 до 8
indicator_styleN int стиль линии N, где N от 1 до 8

indicator_levelN

double

горизонтальный уровень N в отдельном окне индикатора, где N от 1 до 8

 
kharko писал (а):
ram25:
Можно подробнее, покажите скриншот или опишите ситуауию

Например, МАСД. Ручками можно описать уровень. Вопрос как сделать это программными средствами?
   Просто сравните значение переменной индикатора с численным значением уровня, которое тоже можно задать как внешнюю переменную.
 


Мне надо, чтобы горизонтальные уровни были подписаны.

Парадокс, можно задать цвет стиль значение, а описать нет ничего. Может пробел в возможностях MQL4?
 
kharko:


Мне надо, что горизонтальные уровни были подписаны.

Мне кажется, что такого программно нельзя реализовать.
 
Уровни измеряются в разных единицах, где-то в процентах, где-то в абсолютных или относительных значениях переменной индикатора . Конкретно поставьте задачу - сравнить такое то значение индикатора, с таким -то уровнем для этого индикатора. Чем подписывать уровень, литрами что-ли?
 
Вот пример (не проверял, но работать вроде должен). Допустим, MACD - в окне 1.

ObjectCreate( "MACD_level_1", OBJ_HLINE, 1, 0, 0.001 );
ObjectSetText( "MACD_level_1", "Первонах" );
Проверил. Не работает, гад! А зачем тогда нужен такой дескриптор, который на графике не виден?

Ну тогда остается либо OBJ_LABEL, либо и впрямь создавать Фибо по "цене" и программно назначать уровни вместе с описаниями.
 
Всё же отбразить названия уровней возможно:
double Level_1=0.001,Level_2=-0.0005;
ObjectCreate( "MACD_level_1", OBJ_HLINE, 1, 0,Level_1 );
ObjectCreate( "MACD_level_text1", OBJ_TEXT, 1, TimeCurrent( ) ,Level_1 );
ObjectSetText( "MACD_level_text1", "Level 1",10, "Times New Roman",  White );
ObjectCreate( "MACD_level_2", OBJ_HLINE, 1, 0, Level_2 );
ObjectCreate( "MACD_level_text2", OBJ_TEXT, 1, TimeCurrent( ) ,Level_2 );
ObjectSetText( "MACD_level_text2", "Level 2",10,"Times New Roman",  White );

Правда, позиционировать текст относительно линий для различных периодов довольно сложно.
 
Valmars:

Всё же отбразить названия уровней возможно:
double Level_1=0.001,Level_2=-0.0005;
ObjectCreate( "MACD_level_1", OBJ_HLINE, 1, 0,Level_1 );
ObjectCreate( "MACD_level_text1", OBJ_TEXT, 1, TimeCurrent( ) ,Level_1 );
ObjectSetText( "MACD_level_text1", "Level 1",10, "Times New Roman",  White );
ObjectCreate( "MACD_level_2", OBJ_HLINE, 1, 0, Level_2 );
ObjectCreate( "MACD_level_text2", OBJ_TEXT, 1, TimeCurrent( ) ,Level_2 );
ObjectSetText( "MACD_level_text2", "Level 2",10,"Times New Roman",  White );

Правда, позиционировать текст относительно линий для различных периодов довольно сложно.
Примерно так я и думал, но все равно такое решение не подходит.
Есть такие функции:

void SetLevelValue( int level, double value)
Устанавливает значение для указанного горизонтального уровня индикатора, выводимого в отдельное окно.
Параметры:
level - Номер уровня (0-31).
value - Значение для указанного уровня.

void SetLevelStyle( int draw_style, int line_width, color clr=CLR_NONE)
Устанавливает новый стиль, ширину и цвет для горизонтальных уровней индикатора, выводимого в отдельное окно.
Параметры:
draw_style - Стиль линии. Может быть одним из перечисленных стилей линии. Пустое значение (EMPTY) указывает, что стиль не будет изменен.
line_width - Ширина линии. Допустимые значения - 1,2,3,4,5. Пустое значение (EMPTY) указывает, что ширина не будет изменена.
clr - Цвет линии. Пустое значение CLR_NONE указывает, что цвет не будет изменен.


Через них можно все задать, а вот сделать простое описание не возможно. Обратите внимание на количество возможных уровней (0-31).

indicator_levelN

double

горизонтальный уровень N в отдельном окне индикатора, где N от 1 до 8


Через #property indicator_levelN их всего 8. Явная не стыковка и пробел в MQL4.

Свою задачу пока решил так: программно задаю уровни (они у меня динамично изменяются), а текст набиваю ручками. Текст остается, если не удалять индикатор.
 

1. Не нужно путать уровни (32) с индикаторными линиями (8).
2. Графические объекты могут быть привязаны к окну индикатора двумя способами:
а) координатами в пикселях экрана (например, OBJ_LABEL);
б) координатами цены и времени (например, OBJ_TEXT).
Если макс и мин. индикатора жёстко закреплены, то можно использовать б).
Если макс и мин не фиксированы, то нужно использовать а), при этом на каждом баре пересчитывать координату по времени - сдвигать объект вправо на 1 бар (если этого не делать, то граф. объект всё время будет ехать влево). Координату по Y можно пересчитывать только если уровни по ходу работы меняются.

Причина обращения: