Вопрос к знатокам MQL - страница 3

 

Где то мне попадался совет, всегда проверять наличие объекта перед использованием ObjectCreate (или ObjectSet? не помню)

В общем, использую такой вариант

if (ObjectFind("AsignalGF")==-1)
      {ObjectCreate("AsignalGF",OBJ_LABEL,0,0,0,0,0);
      ObjectSet("AsignalGF",OBJPROP_CORNER,1);
      ObjectSet("AsignalGF",OBJPROP_XDISTANCE,12*1);
      ObjectSet("AsignalGF",OBJPROP_YDISTANCE,1*5);
      ObjectSetText("AsignalGF",CharToStr(110),38,"Wingdings",DimGray);}
 
leonid553:

Добрый день.

Полдня уже истратил и не могу разобраться.

Пож. подскажите, в чем здесь может быть ошибка ? Может быть в функции INIT ?

ошибка может быть

1. если вы вызываете WindowFind() в init() или в функции, которая вызывается в инит

2. WindowFind() и у вас декларировано #property indicator_chart_window, т.к. WindowFind() вызывается для подокон

3. индикатор с искомым именем отсутствует в окне

 
keekkenen:

3. индикатор с искомым именем отсутствует в окне

ммм... в сысле объект?
 
Abzasc:
ммм... в сысле объект?

при чем тут объект ?

объект тут вторичен, т.к. производится попытка его отрисовки в несуществующем окне,

к тому же если объект создан, то ошибки не произойдет, если объект вторично создать - ObjectCreate() вернет false

 
keekkenen:

при чем тут объект ?

объект тут вторичен, т.к. производится попытка его отрисовки в несуществующем окне,

к тому же если объект создан, то ошибки не произойдет, если объект вторично создать - ObjectCreate() вернет false

Понял, спасибо :)
 
keekkenen:

ошибка может быть

1. если вы вызываете WindowFind() в init() или в функции, которая вызывается в инит

2. WindowFind() и у вас декларировано #property indicator_chart_window, т.к. WindowFind() вызывается для подокон

3. индикатор с искомым именем отсутствует в окне


1. Нет, функцию я вызываю в СТАРТЕ :   object("Symbol1", Symbol_1, 11, Color_1, 5);

2. Задеклариривано  #property indicator_separate_window

3.  Как же индикатор может отсутствовать, если его окно присутствует ? 

Вот сама функция : 

void object(string name, string _text, int fontsize, color color_, int value) {
// задаем окно индикатора
 ObjectCreate(name+ WindowExpertName(), OBJ_LABEL, WindowFind(WindowExpertName()), 0, 0);
 // задаем текстовую метку в окне
ObjectSetText(name+ WindowExpertName(), _text, fontsize, "Times New Roman", color_);
 ObjectSet(name+ WindowExpertName(), OBJPROP_CORNER, 1);//задаем правый угол
 ObjectSet(name+ WindowExpertName(), OBJPROP_XDISTANCE, 4);//задаем х-координату
 ObjectSet(name+ WindowExpertName(), OBJPROP_YDISTANCE, value);//задаем у-коордтнату 
                                     }
В ИНИТе я вообще ничего не вызываю. Может надо и там что-то добавить ?


 

 
Abzasc:

Где то мне попадался совет, всегда проверять наличие объекта перед использованием ObjectCreate (или ObjectSet? не помню)

В общем, использую такой вариант

 

Какое имя мне нужно задавать в  (ObjectFind("AsignalGF") - 

имя индикатора или имя (массива)  линии, которую отрисовывает индюк? 

 
leonid553:

Какое имя мне нужно задавать в  (ObjectFind("AsignalGF") - 

имя индикатора или имя (массива)  линии, которую отрисовывает индюк? 

Имя объекта, который создается/меняется.
 

Понял вроде. Имя обьекта я задаю в функции.

ObjectCreate(name+ WindowExpertName(), OBJ_LABEL, WindowFind(WindowExpertName()), 0, 0);


 
leonid553:

Имя обьекта я задаю в функции. ObjectCreate(name+ WindowExpertName(), ....);

Ну да, от этого и ищем.
Причина обращения: