Как программно изменить цвет штатного индикатора?
Никогда таким вопросом не занимался, но мысль следующая. Надо открыть код штатного индикатора и найти там строчки с indicator_color*
Ну, что-то типа
//--- японские свечи будут рисоваться цветом clrDodgerBlue #property indicator_color1 clrDodgerBlue
Затем вставить нужный цвет. При этом посмотреть также Справочник MQL5 / Пользовательские индикаторы / Связь между свойствами индикатора и функциями и Справочник MQL5 / Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Спасибо, конечно.
Но получается, что каждый раз нужно править код?
Михаил
Спасибо, конечно.
Но получается, чито каждый раз нужно править код?
Спасибо, конечно.
Но получается, что каждый раз нужно править код?
Что-то логика у Вас хромает. Изначально Вы спрашивали:
Как программно изменить цвет штатного индикатора?
Что-то логика у Вас хромает. Изначально Вы спрашивали:
Уважаемый abolk!
Очевидно, что из своего кода.
Михаил
Сделайте "штатный" индикатор своим, - и вставляйте в него свои опции. Например (чисто идея): цвета вывести в 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 ); }
Этот код должен был работать, НО.... увы...
C функцией IndicatorCreate() не работал - проще оказалось создавать свои пользовательские индикаторы. Тем не менее, поскольку Вы привели только часть кода, вопрос: Вы переменную params обнуляли перед началом использования? Ну, например, так:
MqlParam params; ZeroMemory(params);
И какой код ошибки возварщает Ваша запись?
А это делали:
ArrayResize(params,5);?
Кроме того, индикатор IND_MA(iMA) не имеет такого параметра, как "Цвет", а у Вас он указан. Посмотрите пример использования iMA вот здесь: Справочник MQL5 / Доступ к таймсериям и индикаторам / IndicatorCreate.
Этот код должен был работать
С чего это? Сначала объясните, с какого перепугу цвет является вещественным числом?
params[4].type = TYPE_COLOR; params[4].double_value = clrBlue;
Добрый день, stringo и Yedelkin!
Вы, вероятно, не внимательно читали моё сообщение, где сказано
"Жаль, что разработчики не подумали об этом. "
А теперь, объясню, почему я написал приведённый выше код.
Из настроек Moving Average ясно видно, что индикатор имеет 7 параметров(5 основных + 2 линии).
В закладке так и паписано "Параметры"
Если есть вожможность менять ВСЕ параметры "в ручную" , значит должна быть
возможность изменять ВСЕ параметры программно! Что и сделали разработчики
в функции IndicatorCreate, но не до конца ( или это БАГ).
Структура 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, я ответил на Ваш вопрос "с какого перепугу"?
Ещё раз повторяю, жаль, что разработчики не сделали изменение цвета.
С уважением, Михаил
Добрый день, stringo и Yedelkin!
Вы, вероятно, не внимательно читали моё сообщение, где сказано
"Жаль, что разработчики не подумали об этом. "
Mikalas, здесь уже развелось столько специалистов делать выводы за других, что просто караул. Не увеличивайте их число, плз.
Далее. Я Вам в помощь задал конкретные безэмоциональные вопросы. Вместо ответа на них Вы рассказываете, "как дошли до жизни до такой". Что Вы хотите? -Убедить кого-то в наличии выявленных Вами багов, или "программно" улучшить выбранный Вами код? Если видите некий "баг" - обращайтесь в Сервисдеск с полным изложением ситуации. Если хотите "программно" поработать - вникайте в суть создания и работы индикаторов.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Как программно изменить цвет штатного индикатора?
Спасибо, Михаил