Ошибки, баги, вопросы - страница 1177

 
svds75:

Здравствуйте. Подскажите, почему при запросе свойств трендовой линии переменная res всегда true, хотя в ручную ставлю флаг показ только W1, или только MN1?

Необходимо что-бы она показывалась только  на одном из таймов.

...get... - это получение свойств. И если res=true - это всего лишь признак удачного получения свойства.

Для установки свойств служит ...set...

 

В продолжение своего прошлого поста.  Методом научного тыка мне удалось отыскать проблемное место, приводящие к багу.

Имеем такую библиотеку с функцией:

//---- testbuglib.mq5 ------

#property library

class A { }; class B   { private:    A* a; public:    A* b; }; int Test() export {   return 0; }

А вот основной файл:

#include <Files\File.mqh>  // тут можно указать любой файл mqh

#import "testbuglib.ex5"
  int Test();
#import  

int OnInit() {  Test(); return 0; }

 Получившийся советник не работает, в логе выдаётся: "EX5 loading failed"

Файлы:
TestBug.mq5  1 kb
 
svds75:

Здравствуйте. Подскажите, почему при запросе свойств трендовой линии переменная res всегда true, хотя в ручную ставлю флаг показ только W1, или только MN1?

Необходимо что-бы она показывалась только  на одном из таймов.

Неверное количество параметров, вы вызываете функцию как 1 вариант, а надо как второй или сравнивать результат.
 
TheLiteShadow:
Так-то оно так, но получается, что при каждом новом баре обязательно "чистить" все последние "индексы" заданных буферов? Спрашивается зачем? В МТ4 такой ситуации не было, я понимаю, при первичной инициализации я его почистил, но потом по идее это должен делать сам МТ, впрочем по идее и при инициализации это должен делать МТ, а не программист, с какой целью буфер индикатора - это просто выделение памяти я не совсем понимаю...
Когда я несколько лет назад задавал этот вопрос, мне ответили, что так сделано в целях оптимизации. Вы проинициализируете ровно столько, сколько нужно. А если вы сразу заливаете туда какие-то рассчетные данные, то и вовсе не нужно предварительно записывать нули. МТ5 отличается от МТ4 во многом.
 
marketeer:
Когда я несколько лет назад задавал этот вопрос, мне ответили, что так сделано в целях оптимизации. Вы проинициализируете ровно столько, сколько нужно. А если вы сразу заливаете туда какие-то рассчетные данные, то и вовсе не нужно предварительно записывать нули. МТ5 отличается от МТ4 во многом.
То что МТ4 отличается от МТ5 понимают все, но насчёт оптимизации я бы не согласился, а программисту слишком много того, что приходится отслеживать дополнительно, не сравнимо с языками низкого уровня, но по мне так лишнее, в общем ясно, спасибо...
 
TheLiteShadow:
Неверное количество параметров, вы вызываете функцию как 1 вариант, а надо как второй или сравнивать результат.
Пробовал и так. Хотя реально флаги работают (линия кажет только на одном тайме), а эксперт видит что оба флага включены.
long res;
ObjectGetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1|OBJ_PERIOD_MN1,res);
if((bool)res) Alert("линия line показывается на OBJ_PERIOD_W1 и OBJ_PERIOD_MN1");
 
svds75:
Пробовал и так. Хотя реально флаги работают (линия кажет только на одном тайме), а эксперт видит что оба флага включены.

А чего вы собственно хотите? Вы же запрашиваете видимость на недельном ИЛИ месячном таймфрейме. Так что программа вам вернет true если хотя бы один из них включен.

Запрашиваейте раздельно через 2 вызова. 

 
svds75:
Пробовал и так. Хотя реально флаги работают (линия кажет только на одном тайме), а эксперт видит что оба флага включены.

Так может Вам нужно прямо задавать видимость?

 ObjectSetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1);
 
svds75:

Здравствуйте. Подскажите, почему при запросе свойств трендовой линии переменная res всегда true, хотя в ручную ставлю флаг показ только W1, или только MN1?

Необходимо что-бы она показывалась только  на одном из таймов.

Потому что линия всегда существует, потому и всегда считывается значение. Невидимость линии не означает ее отсутсвия.
 
barabashkakvn:

Так может Вам нужно прямо задавать видимость?

Нет задавать мне нужно в ручную, а проверять программно.
Причина обращения: