Добрый день, помогите пожалуйста разобраться в индикаторе
в OnCalculate
есть код:
так вот, в ЭКСПЕРТАХ через промежуток времени, каждый раз выходит сообщение:
2019.07.12 23:02:01.066 test GBPUSD,H4: Label: Код
ошибки = 4200
Как я понял она означает что уже создана текстовая метка
Что делать? как
избавиться от этого не удалив просто
Print
Может нужно как то проверить создана
она или нет, и если не создана создать её. Подскажите как правильно. Спасибо
Всё зависит от задачи. Функция Label(...)в Вашем коде пытается постоянно создать объект, но при её вызове имя у него не меняется и всегда = "Menuel0". Соответственно нужно либо удалять объект "Menuel0" перед вызовом функции, либо придумать уникальное имя которое не будет повторятся, например "Menuel1".
Если же Вы просто хотите изменить объект(например изменить текст метки) то лучше создать его один раз, например в OnInit(),а потом просто менять его свойства.
Всё зависит от задачи. Функция Label(...)в Вашем коде пытается постоянно создать объект, но при её вызове имя у него не меняется и всегда = "Menuel0". Соответственно нужно либо удалять объект "Menuel0" перед вызовом функции, либо придумать уникальное имя которое не будет повторятся, например "Menuel1".
Если же Вы просто хотите изменить объект(например изменить текст метки) то лучше создать его один раз, например в OnInit(),а потом просто менять его свойства.
Самый лучший вариант, перед созданием проверить существование объекта с таким именем. Зачем удалять и создавать новый? Какой в этом смысл???
проверить существование объекта с таким именем.
Спасибо всем кто отписался, подскажите пожалуйста как сделать:
Привет. Можно через функцию.
- docs.mql4.com
2019.07.12 23:02:01.066 test GBPUSD,H4: Label: Код ошибки = 4200
Что лучше всего сделать?
Спасибо, подскажите почему при нажатии на какую либо кнопку в индикаторе снова появляется текст:
Что лучше всего сделать?
Проще перед ObjectCreate() написать строчку:
ObjectDelete(chart_ID, name);
Самый лучший вариант, перед созданием проверить существование объекта с таким именем. Зачем удалять и создавать новый? Какой в этом смысл???
Проверять не обязательно, т.к. это же происходит при попытке создания нового объекта. Вместо ObjectFind() можно так:
void Text(int i,string text="",color Color=EMPTY_VALUE,int Anch=ANCHOR_RIGHT_UPPER,int shift=0) { string name=obj_pref+IntegerToString(i); if(ObjectCreate(0,name,OBJ_LABEL,0,0,0)) { ObjectSetInteger(0,name,OBJPROP_CORNER,Corn); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,4+shift); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,(i+1)*(int)(FS*1.4)+2); ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); ObjectSetInteger(0,name,OBJPROP_HIDDEN,true); ObjectSetString (0,name,OBJPROP_FONT,"Arial"); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FS); ObjectSetInteger(0,name,OBJPROP_ANCHOR,Anch); } ObjectSetInteger(0,name,OBJPROP_COLOR,Color==EMPTY_VALUE?CL:Color); ObjectSetString (0,name,OBJPROP_TEXT,text); }
Смысл в том, что (для данного примера) текст и цвет может меняться, а остальное - нет. Если создание с ошибкой (т.е. метка уже есть) изменить цвет и текст.
В вашем случае, вместо удаления можно привязку сделать за видимой областью.
Удаление может создать моргание. Не приятно для глаз ;)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
в OnCalculate
есть код:
так вот, в ЭКСПЕРТАХ через промежуток времени, каждый раз выходит сообщение:
2019.07.12 23:02:01.066 test GBPUSD,H4: Label: Код ошибки = 4200
Как я понял она означает что уже создана текстовая метка
Что делать? как избавиться от этого не удалив просто Print
Может нужно как то проверить создана она или нет, и если не создана создать её. Подскажите как правильно. Спасибо