Пример, как налету можно менять любое свойство графического объекта "Горизонтальная линия" - для этого не нужно удалять объект, для этого нужно просто менять свойство.
Код:
//+------------------------------------------------------------------+//| OBJ_HLINE change properties on the fly.mq5 |//| Copyright 2021, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2021, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//--- input parametersinputstring InpName="HLine"; // Line name//--- an array for storing colors contains 14 elementscolor colors[]=
{
clrRed,clrBlue,clrGreen,clrChocolate,clrMagenta,clrDodgerBlue,clrGoldenrod,
clrIndigo,clrLightBlue,clrAliceBlue,clrMoccasin,clrWhiteSmoke,clrCyan,clrMediumPurple
};
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create timerEventSetTimer(1);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//--- the number of colorsint size=ArraySize(colors);
//--- get a random valueint number=MathRand();
//--- get an index in the col[] array as a remainder of the integer devisionint i=number%size;
//--- set line colorObjectSetInteger(ChartID(),InpName,OBJPROP_COLOR,colors[i]);
ChartRedraw();
}
//+------------------------------------------------------------------+
Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Спасибо, но оставлю свой вариант, он работает. Хотя попробую вместо ObjectDelete(0, name); применить
Совершенно ошибочное решение. Удаление графического объекта и обновление графика никак не заменяют друг друга.
В моём примере сначала проверяется есть-ли объект, в частности трендовая с именем тфьу, это name в русской раскладке клавиатуры))). Затем, если его нет, то рисуется трендовая. При неудачной попытке рисования, выводится сообщение и выход из функции с возвратом false.
Всё что после этого, независимо от наличия уже имеющейся трендовой или только-что нарисованной, ей присваиваются заданные параметры, время и цены координат, тип, толщина и всё что ещё добавите. После чего график обновляется и функция возвращает true.
По скорости выполнения проверить наличие трендовой будет менее затратно, чем её удалить с нарисовать новую.
Но… окончательное решение принимаете вы и если вам нравится чесать левое ухо мизинцем правой ноги, я не имею права вам мешать.
Разница незначительна и тоже приемлемый вариант. Но вот если пользователь решил изменить толщину или цвет, они видимо задаются во входных параметрах, раз имеют переменные, то ваш код уже не поменяет без удаления трендовой.
Совершенно ошибочное решение. Удаление графического объекта и обновление графика никак не заменяют друг друга.
В моём примере сначала проверяется есть-ли объект, в частности трендовая с именем тфьу, это name в русской раскладке клавиатуры))). Затем, если его нет, то рисуется трендовая. При неудачной попытке рисования, выводится сообщение и выход из функции с возвратом false.
Всё что после этого, независимо от наличия уже имеющейся трендовой или только-что нарисованной, ей присваиваются заданные параметры, время и цены координат, тип, толщина и всё что ещё добавите. После чего график обновляется и функция возвращает true.
По скорости выполнения проверить наличие трендовой будет менее затратно, чем её удалить с нарисовать новую.
Но… окончательное решение принимаете вы и если вам нравится чесать левое ухо мизинцем правой ноги, я не имею права вам мешать.
Спасибо огромное. Прислушаюсь вашим советам и переделаю код.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Пример, как налету можно менять любое свойство графического объекта "Горизонтальная линия" - для этого не нужно удалять объект, для этого нужно просто менять свойство.
Код:
Спасибо, но оставлю свой вариант, он работает. Хотя попробую вместо ObjectDelete(0, name); применить
Совершенно ошибочное решение. Удаление графического объекта и обновление графика никак не заменяют друг друга.
В моём примере сначала проверяется есть-ли объект, в частности трендовая с именем тфьу, это name в русской раскладке клавиатуры))). Затем, если его нет, то рисуется трендовая. При неудачной попытке рисования, выводится сообщение и выход из функции с возвратом false.
Всё что после этого, независимо от наличия уже имеющейся трендовой или только-что нарисованной, ей присваиваются заданные параметры, время и цены координат, тип, толщина и всё что ещё добавите. После чего график обновляется и функция возвращает true.
По скорости выполнения проверить наличие трендовой будет менее затратно, чем её удалить с нарисовать новую.
Но… окончательное решение принимаете вы и если вам нравится чесать левое ухо мизинцем правой ноги, я не имею права вам мешать.
И возвращаясь к рисованию трендовой линии. Если нужен код.
Очень плохой код.
Я сделал-бы так
А Я так:
А Я так:
Разница незначительна и тоже приемлемый вариант. Но вот если пользователь решил изменить толщину или цвет, они видимо задаются во входных параметрах, раз имеют переменные, то ваш код уже не поменяет без удаления трендовой.
В общем, о вкусах фломастеров спорить не сто́ит.
Совершенно ошибочное решение. Удаление графического объекта и обновление графика никак не заменяют друг друга.
В моём примере сначала проверяется есть-ли объект, в частности трендовая с именем тфьу, это name в русской раскладке клавиатуры))). Затем, если его нет, то рисуется трендовая. При неудачной попытке рисования, выводится сообщение и выход из функции с возвратом false.
Всё что после этого, независимо от наличия уже имеющейся трендовой или только-что нарисованной, ей присваиваются заданные параметры, время и цены координат, тип, толщина и всё что ещё добавите. После чего график обновляется и функция возвращает true.
По скорости выполнения проверить наличие трендовой будет менее затратно, чем её удалить с нарисовать новую.
Но… окончательное решение принимаете вы и если вам нравится чесать левое ухо мизинцем правой ноги, я не имею права вам мешать.
Спасибо огромное. Прислушаюсь вашим советам и переделаю код.
А Я так:
Огромное спасибо. Код переделаю. Уже переделал, все о кей.
Это вообще не работает что ли? У кого-нибудь возвращает символ объекта? У меня всегда пустая строка.
Или сначала ему надо это свойство задать?..
Это вообще не работает что ли? У кого-нибудь возвращает символ объекта? У меня всегда пустая строка.
Или сначала ему надо это свойство задать?..
Это специфическое свойство - для объекта "График" возвращает символ. А Вы для какого типа объекта пытаетесь получить символ?
Это специфическое свойство - для объекта "График" возвращает символ. А Вы для какого типа объекта пытаетесь получить символ?
для треугольника. Как узнать его "символ"?