Цвет штатного индикатора

 

Добрый день!

 Как программно изменить цвет штатного индикатора?

Спасибо, Михаил 

 
Mikalas:

 Как программно изменить цвет штатного индикатора?

Никогда таким вопросом не занимался, но мысль следующая. Надо открыть код штатного индикатора и найти там строчки с indicator_color*

Ну, что-то типа

//--- японские свечи будут рисоваться цветом clrDodgerBlue
#property indicator_color1  clrDodgerBlue

Затем вставить нужный цвет. При этом посмотреть также Справочник MQL5 / Пользовательские индикаторы / Связь между свойствами индикатора и функциями  и Справочник MQL5 / Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования

 

Спасибо, конечно.

Но получается, что каждый раз нужно править код?

 Михаил 

 
Mikalas:

Спасибо, конечно.

Но получается, чито каждый раз нужно править код?

Сделайте "штатный" индикатор своим, - и вставляйте в него свои опции. Например (чисто идея): цвета  вывести в input-параметры, а затем обрабатывать их в Oninit() функцией PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Примеры в Справочнике могут помочь. Тогда можно будет не сам код править, а задавать нужный цвет через свойства индикатора при его запуске или изменении.
 
Mikalas:

Спасибо, конечно.

Но получается, что каждый раз нужно править код?

Что-то логика у Вас хромает. Изначально Вы спрашивали:

Mikalas:

Как программно изменить цвет штатного индикатора?

 
 
abolk:

Что-то логика у Вас хромает. Изначально Вы спрашивали:

 

Уважаемый abolk!

Очевидно, что из своего кода.

 

Михаил 

 
Yedelkin:
Сделайте "штатный" индикатор своим, - и вставляйте в него свои опции. Например (чисто идея): цвета  вывести в input-параметры, а затем обрабатывать их в Oninit() функцией PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Примеры в Справочнике могут помочь. Тогда можно будет не сам код править, а задавать нужный цвет через свойства индикатора при его запуске или изменении.

Большое, спасибо.

Жаль, что разработчики не подумали об этом. 

Этот код должен был работать, НО.... увы... 

params[0].type = TYPE_INT;
        params[0].integer_value = 10;
        
        params[1].type = TYPE_INT;
        params[1].integer_value = 0;
        
        params[2].type = TYPE_INT;
        params[2].integer_value = MODE_SMA;
        
        params[3].type = TYPE_INT;
        params[3].integer_value = PRICE_MEDIAN;
        
        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
        
        ma_handle = IndicatorCreate( NULL, PERIOD_CURRENT, IND_MA, 5, params );
        if ( ma_handle != INVALID_HANDLE )
      {
        ChartIndicatorAdd( 0, 0, ma_handle );
      }
 
Mikalas:

Этот код должен был работать, НО.... увы... 

C функцией IndicatorCreate() не работал - проще оказалось создавать свои пользовательские индикаторы. Тем  не менее, поскольку Вы привели только часть кода, вопрос: Вы переменную params обнуляли перед началом использования? Ну, например, так:

MqlParam params;
ZeroMemory(params); 

И какой код ошибки возварщает Ваша запись?

А это делали:

ArrayResize(params,5);
?

Кроме того, индикатор IND_MA(iMA) не имеет такого параметра, как "Цвет", а у Вас он указан. Посмотрите пример использования iMA вот здесь: Справочник MQL5 / Доступ к таймсериям и индикаторам / IndicatorCreate.

 
Mikalas:

Этот код должен был работать

С чего это? Сначала объясните, с какого перепугу цвет является вещественным числом?

        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
 

Добрый день, stringo и Yedelkin!

 Вы, вероятно, не внимательно читали моё сообщение, где сказано 

"Жаль, что разработчики не подумали об этом. " 

 

А теперь, объясню, почему я написал приведённый выше код.

Из настроек Moving Average ясно видно, что индикатор имеет 7 параметров(5 основных + 2 линии).

В закладке так и  паписано "Параметры" 

Если есть вожможность менять ВСЕ параметры "в ручную" , значит должна быть

возможность изменять ВСЕ параметры программно!  Что и сделали разработчики

в функции IndicatorCreate, но не до конца ( или это БАГ). 

MA 

Структура MqlParam позволяет вводить цвет - TYPE_COLOR(ENUM_DATATYPE);

Из MQL5 справочника: 

Тип color предназначен для хранения информации о цвете и занимает в памяти 4 байта. Первый байт не учитывается, остальные 3 байта содержат RGB-составляющие. 

......

Целочисленное представление записывается в виде шестнадцатеричного или десятичного числа. Шестнадцатеричное число имеет вид 0x00BBGGRR 

//--- целочисленные представления
0xFFFFFF // белый
16777215 // белый
0x008000 // зеленый
32768 // зеленый 

Конец цитирования. 

struct MqlParam
{
ENUM_DATATYPE type; // тип входного параметра, значение перечисления ENUM_DATATYPE
long integer_value; // поле для хранения целочисленного значения
double double_value; // поле для хранения значения double или float
string string_value; // поле для хранения значения строкового типа
}; 

(я сначала пробовал long не получилось, а потом попробовал double - тоже не получилось, что и осталось в коде).

Долно было бы быть так:

MqlParam    params[5];


......... 

params[4].type = TYPE_COLOR;
params[4].integer_value = clrBlue; // - синий цвет 0х00FF0000 (16711680)

stringo, я ответил на Ваш вопрос "с какого перепугу"?

Ещё раз повторяю, жаль, что разработчики не сделали изменение цвета. 

С уважением, Михаил 

 
Mikalas:

Добрый день, stringo и Yedelkin!

 Вы, вероятно, не внимательно читали моё сообщение, где сказано 

"Жаль, что разработчики не подумали об этом. "  

Mikalas, здесь уже развелось столько специалистов  делать выводы за других, что просто караул. Не увеличивайте их число, плз.

Далее. Я Вам в помощь задал конкретные безэмоциональные вопросы. Вместо ответа на них Вы рассказываете, "как дошли до жизни до такой".  Что Вы хотите? -Убедить кого-то в наличии выявленных Вами багов, или "программно" улучшить выбранный Вами код? Если видите некий "баг" - обращайтесь в Сервисдеск  с полным изложением ситуации. Если хотите "программно" поработать - вникайте в суть создания и работы индикаторов.

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