есть ли ошибка в mt5 ObjectDelete? - страница 2

 

Это может быть скорее семантической ошибкой, чем ошибкой.

Цель ObjectDelete - "удалить объект с указанным именем".

В конце выполнения функции на графике остается объект с именем "Несуществующий объект"? Нет... значит, это успех?

Если посмотреть с другой стороны, удалил ли ObjectDelete объект с названием "Несуществующий объект"? Нет... значит, это неудача?

Вы оцениваете успех по результату или по выполненному действию?

Возможно, следует ожидать false, если после выполнения функции названный объект останется на графике. В противном случае это успех.

 
Farzin Sadeghi:
Да, я собираюсь написать об этом. Я ждал вашего подтверждения. спасибо.

Только что попытался сообщить об этом в службе поддержки, и она не принимает мое сообщение, говоря "Ошибка сохранения данных".

Попробовал также с другого места, ПК и браузера (используя мой VPS), и произошло то же самое.

Смогли ли вы сообщить об этом со своей стороны?

 
honest_knave:

Это может быть скорее семантической ошибкой, чем ошибкой.

Цель ObjectDelete - "удалить объект с указанным именем".

В конце выполнения функции на графике остается объект с именем "Несуществующий объект"? Нет... значит, это успех?

Если посмотреть с другой стороны, удалил ли ObjectDelete объект с названием "Несуществующий объект"? Нет... значит, это неудача?

Вы оцениваете успех по результату или по выполненному действию?

Возможно, следует ожидать false, если после выполнения функции названный объект останется на графике. В противном случае это успех.

Если это так, то разница в функциональности между MQL4 и MQL5 не сообщается и не объясняется в документации!
 
Fernando Carreiro:
Если это так, то разница в функциональности между MQL4 и MQL5 не описана и не объяснена в документации!

Согласен. Мне просто интересно, какой из вариантов "они" назовут правильным :-)

Лично я считаю, что лучше возвращать true. Иначе придется добавлять дополнительный код для проверки существования объекта и мириться с 4202 ошибкой.

 
honest_knave:

Согласен. Мне просто интересно, какой из вариантов "они" назовут правильным :-)

Лично я считаю, что лучше возвращать true. Иначе придется добавлять дополнительный код для проверки существования объекта и мириться с 4202 ошибкой.

На мой взгляд, в обоих случаях нужно проверять существование объекта перед удалением, независимо от того, какая версия "правильная".

EDIT: Однако я надеюсь, что они "исправят" его так, чтобы он работал так же, как MQL4. Иначе будет еще одно различие в функциональности, при котором нам придется ставить условную компиляцию в код, сделанный для компиляции на обеих версиях.

 
Fernando Carreiro:
На мой взгляд, в обоих случаях необходимо проверять существование объекта перед удалением, независимо от того, какая версия "правильная".

Интересно! Зачем вам проверять его существование, если вы хотите, чтобы он исчез?

Время, затрачиваемое на проверку существования несуществующего объекта, в основном сравнимо с попыткой удалить несуществующий объект на MT4 (а беглый осмотр на MT5 показывает, что это происходит значительно медленнее), поэтому я не вижу ощутимого выигрыша в производительности от выполнения проверки. Но это добавит больше строк в ваш код.

 
Fernando Carreiro:

EDIT: Однако я надеюсь, что они "исправят" его так, чтобы он работал так же, как MQL4. Иначе будет еще одно различие в функциональности, при котором нам придется помещать условную компиляцию в код, сделанный для компиляции на обеих версиях.

Возможно, это все часть их плана по принуждению нас к MT5 через разочарование!
 
honest_knave:

Интересно! Зачем вам проверять его существование, если вы хотите, чтобы он исчез?

Время, затрачиваемое на проверку существования несуществующего объекта, в основном сравнимо с попыткой удалить несуществующий объект на MT4 (а беглый осмотр на MT5 показывает, что это происходит значительно медленнее), поэтому я не вижу ощутимого выигрыша в производительности от выполнения проверки. Но это добавит больше строк в ваш код.

Когда вы хотите определить, что пользователь случайно удалил его и его нужно создать заново. Я имел в виду это как общее "ведение домашнего хозяйства", а не для функциональности однократного удаления.

Но да, я согласен, для функциональности"OnDeinit()" нет необходимости сначала проверять ее.

 
Fernando Carreiro:

Когда вы хотите определить, если пользователь случайно удалил его и его нужно создать заново. Я имел в виду это как общее "ведение домашнего хозяйства", а не для функциональности однократного удаления.

Но да, я согласен, для функциональности"OnDeinit()" нет необходимости сначала ее тестировать.

Понятно.

В качестве побочного примечания:

#property strict

void OnStart()
  {
   string name = "MysteryObject";
   ulong begin;

   begin = GetMicrosecondCount();
   for(int i=0; i<1000; i++) int result = ObjectFind(0,name);
   printf("ObjectFind took %i μs", GetMicrosecondCount()-begin);

   begin = GetMicrosecondCount();
   for(int i=0; i<1000; i++) bool result = ObjectDelete(0,name);
   printf("ObjectDelete took %i μs", GetMicrosecondCount()-begin);
  }

Запуск на MT4, в ней не так много функций.

Запуск на MT5, она более чем в 50 раз медленнее.

Есть ли у кого-нибудь понимание, почему?

 
honest_knave: Понятно.

В качестве примечания:

Запуск на MT4, в нем не так много.

Запуск на MT5, он более чем в 50 раз медленнее.

Есть ли у кого-нибудь понимание причин?

Какую сборку вы использовали? Поскольку в последней сборке, похоже, есть возможная ошибка с функцией"ObjectDelete()", возможно, есть проблемы и с "ObjectFind()"!
Причина обращения: