Вы файл ошибочно приложили или автор темы вам что-то очень плохое сделал?
Просто код в приложенном файле на каждом тике удаляет линию и вновь её создаёт.
int start(){
ObjectDelete("1_bars");
ObjectCreate("1_bars",OBJ_VLINE,0,Time[Create_bar],Bid);// Time [0] - ставиться на нулевой бар, самый первый на графике. если 1 значит на первый
ObjectSet ("1_bars",OBJPROP_COLOR,Line_1_barsColor);
ObjectSet ("1_bars",OBJPROP_STYLE,Line_1_barsStyle);
ObjectSet ("1_bars",OBJPROP_WIDTH,Line_1_barsWidth);
ObjectSet ("1_bars",OBJPROP_BACK,Draw_as_Background);
return(0);}
Видны и другие не оптимальные моменты.
P./S.: Да и сконструировать в коде перемещение линии при появлении нового бара (вместо создания-удаления каждый раз) - как-то по оптимальнее будет, полагаю.
Вы файл ошибочно приложили или автор темы вам что-то очень плохое сделал?
Просто код в приложенном файле на каждом тике удаляет линию и вновь её создаёт.
Видны и другие не оптимальные моменты.
P./S.: Да и сконструировать в коде перемещение линии при появлении нового бара (вместо создания-удаления каждый раз) - как-то по оптимальнее будет, полагаю.
Нет ничего проще сделать функцию, которая будет и линию строить, и перемещать её, и другие нужные изменения с ней проводить. Каждый раз, при необходимости создать линию, или поменять её параметры, или восстановить случайно удалённую, вызывается одна и та же функция с нужными параметрами.
Нет ничего проще сделать функцию, которая будет и линию строить, и перемещать её, и другие нужные изменения с ней проводить. Каждый раз, при необходимости создать линию, или поменять её параметры, или восстановить случайно удалённую, вызывается одна и та же функция с нужными параметрами.
Разный подход к этому может быть.
Но проверка наличия объекта, да, и я считаю должна быть.
У меня это может применяться, например, по такой схеме:
где для создания объектов, например, отдельная функция на основе из Документации:
//+------------------------------------------------------------------+//| Создает вертикальную линию |//+------------------------------------------------------------------+//| На основе: |//| Справочник MQL5 / Стандартные константы, перечисления и структуры| //| / Константы объектов / Типы объектов / OBJ_VLINE |//+------------------------------------------------------------------+bool VLineCreate(constlong chart_ID=0, // ID графикаconststring name="VLine", // имя линииconstint sub_window=0, // номер подокнаdatetime time=0, // время линииconststring toolTip="\n", // текст всплывающей подсказкиconstcolor clr=clrRed, // цвет линииconstENUM_LINE_STYLE style=STYLE_SOLID, // стиль линииconstint width=1, // толщина линииconstbool back=false, // на заднем планеconstbool selection=true, // выделить для перемещенийconstbool ray=true, // продолжение линии внизconstbool hidden=true, // скрыт в списке объектовconstlong z_order=0, // приоритет на нажатие мышьюconstint timeFrames=OBJ_ALL_PERIODS)//отображение объекта на различных периодах
{
//--- если время линии не задано, то проводим ее через последний барif(!time)
time=TimeCurrent();
//--- сбросим значение ошибкиResetLastError();
//--- создадим вертикальную линиюif(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0))
{
Print(LINE_NUMBER,__FUNCTION__,
": failed to create a vertical line! Error code = ",GetLastError());
return(false);
}
//--- установим текст всплывающей подсказки
ObSetString(chart_ID,name,OBJPROP_TOOLTIP,toolTip);
//--- установим цвет линии
ObSetIntegerColor(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
ObSetIntegerLineStyle(chart_ID,name,style);
//--- установим толщину линии
ObSetIntegerInt(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
ObSetIntegerBool(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения линии мышью//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
ObSetIntegerBool(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObSetIntegerBool(chart_ID,name,OBJPROP_SELECTED,selection);
//--- включим (true) или отключим (false) режим отображения линии в подокнах графика
ObSetIntegerBool(chart_ID,name,OBJPROP_RAY,ray);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObSetIntegerBool(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObSetIntegerLong(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- установка видимости объекта на различных таймфреймах
ObSetIntegerInt(chart_ID,name,OBJPROP_TIMEFRAMES,timeFrames);
//--- успешное выполнениеreturn(true);
}
Где, в свою очередь, ObSetString(), ObSetIntegerColor(), ObSetIntegerLineStyle() и т.д. - это отдельные функции с проверочными условиями (вместе с функциями по созданию объектов, они у меня здесь в Кодобазе выложены одним включаемым файлом).
Для перемещения же объектов сама предпочитаю применение отдельных целенаправленных функций.
Как и для различных модификаций объектов (т.е., применение отдельных функций, состоящих, в т.ч., возможно из каких-то отдельных с включением каких-то проверочных условий). Чтоб не поднимать и не перезаписывать то, что не требуется, когда это возможно. Пример из таких функций:
//+--------------------------------------------------------------------+//| ObSetString (Установка значения свойства, не имеющего модификатора)|//| значения перечислений ENUM_OBJECT_PROPERTY_STRING: |//+--------------------------------------------------------------------+//| OBJPROP_NAME - Имя объекта - string; |//+--------------------------------------------------------------------+//| OBJPROP_TEXT - Описание объекта (текст, содержащийся в объекте)- |//| string; |//+--------------------------------------------------------------------+//| OBJPROP_TOOLTIP - Текст всплывающей подсказки. Если свойство не |//| задано, то показывается подсказка, автоматически сформированная |//| терминалом. Можно отключить показ подсказки, установив для нее |//| значение "\n" (перевод строки)- string; |//+--------------------------------------------------------------------+//| OBJPROP_FONT - Шрифт - string; |//+--------------------------------------------------------------------+//| OBJPROP_SYMBOL Символ для объекта "График" - string. |//+--------------------------------------------------------------------+bool ObSetString(long chart_ID,// идентификатор графикаstring name,// имя объектаENUM_OBJECT_PROPERTY_STRING prop_id,// свойствоstring prop_value)// значение
{
ResetLastError();
if(!ObjectSetString(chart_ID,name,prop_id,prop_value))
{
Print(LINE_NUMBER,__FUNCTION__,", Error Code = ",
GetLastError());
return(false);
}
return(true);
}
RamsesBor: Ребята всем привет! Ищу индикатор который бы на каждую новую свечу последовательно рисовал вертикальную линию вместе с подвалом. А предыдущие вертикальные линии убирал. Короче каждая новая свеча сразу появлялась с новой вертикальной линией и линия исчезала с появлением новой свечи. Если нету такого индикатора, то плиз его написать помоему просто, выложите кто нибудь. Чтоб в настройках индюка можно было менять тип линии и толщину и цвет. Плиз помогите.
Вы файл ошибочно приложили или автор темы вам что-то очень плохое сделал?
Просто код в приложенном файле на каждом тике удаляет линию и вновь её создаёт.
Видны и другие не оптимальные моменты.
P./S.: Да и сконструировать в коде перемещение линии при появлении нового бара (вместо создания-удаления каждый раз) - как-то по оптимальнее будет, полагаю.
Вы файл ошибочно приложили или автор темы вам что-то очень плохое сделал?
Просто код в приложенном файле на каждом тике удаляет линию и вновь её создаёт.
Видны и другие не оптимальные моменты.
P./S.: Да и сконструировать в коде перемещение линии при появлении нового бара (вместо создания-удаления каждый раз) - как-то по оптимальнее будет, полагаю.
Нет ничего проще сделать функцию, которая будет и линию строить, и перемещать её, и другие нужные изменения с ней проводить. Каждый раз, при необходимости создать линию, или поменять её параметры, или восстановить случайно удалённую, вызывается одна и та же функция с нужными параметрами.
Нет ничего проще сделать функцию, которая будет и линию строить, и перемещать её, и другие нужные изменения с ней проводить. Каждый раз, при необходимости создать линию, или поменять её параметры, или восстановить случайно удалённую, вызывается одна и та же функция с нужными параметрами.
Разный подход к этому может быть.
Но проверка наличия объекта, да, и я считаю должна быть.
У меня это может применяться, например, по такой схеме:
где для создания объектов, например, отдельная функция на основе из Документации:
Где, в свою очередь, ObSetString(), ObSetIntegerColor(), ObSetIntegerLineStyle() и т.д. - это отдельные функции с проверочными условиями (вместе с функциями по созданию объектов, они у меня здесь в Кодобазе выложены одним включаемым файлом).
Для перемещения же объектов сама предпочитаю применение отдельных целенаправленных функций.
Как и для различных модификаций объектов (т.е., применение отдельных функций, состоящих, в т.ч., возможно из каких-то отдельных с включением каких-то проверочных условий). Чтоб не поднимать и не перезаписывать то, что не требуется, когда это возможно. Пример из таких функций:
Как-то так.
Т.е., если конструировать программу чисто только в рамках вопроса автора темы, то, с моей точки зрения, примерно такая схема:
Если MQL4, то наличие #property strict в коде. Если MQL5, то без него.
Входные параметры через input.
В OnDeinit() примерно такое удаление, как в этой функции или через эту или подобную функцию:
В OnCalculate():
Ребята всем привет! Ищу индикатор который бы на каждую новую свечу последовательно рисовал вертикальную линию вместе с подвалом. А предыдущие вертикальные линии убирал. Короче каждая новая свеча сразу появлялась с новой вертикальной линией и линия исчезала с появлением новой свечи. Если нету такого индикатора, то плиз его написать помоему просто, выложите кто нибудь. Чтоб в настройках индюка можно было менять тип линии и толщину и цвет. Плиз помогите.