Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Какой билд вы использовали? Поскольку в последней сборке, похоже, есть возможная ошибка с функцией"ObjectDelete()", возможно, есть проблемы и с "ObjectFind()"!
MT5: Build 1495 (09 декабря 2016)
MT5: Build 1495 (09 Dec 2016)
Я запустил ваш код на билде 1491 и получил аналогичные результаты:
Я запустил ваш код на сборке 1491 и получил аналогичные результаты:
Это может быть скорее семантической ошибкой, чем ошибкой.
Цель ObjectDelete - "удалить объект с указанным именем".
В конце выполнения функции на графике остается объект с именем "Несуществующий объект"? Нет... значит, это успех?
Если посмотреть с другой стороны, удалил ли ObjectDelete объект с названием "Несуществующий объект"? Нет... значит, это неудача?
Вы оцениваете успех по результату или по выполненному действию?
Возможно, следует ожидать false, если после выполнения функции названный объект останется на графике. В противном случае, это был успех.
Возможно, то, что вы говорите, правда, но поскольку мы переходим с MQL4 на MQL5, мы ожидаем увидеть тот же результат или, по крайней мере, результат, который четко прописан в возвращаемом значении ссылки.
Минуя эту первую проблему, я протестировал функцию ObjectMove, и снова я получаю результат TRUE! Это выходит за рамки вашего объяснения, что поскольку объект недоступен в конце, то истина верна.
При использовании ObjectMove на объекте, который недоступен, должно возвращаться false!
moveResult=ObjectMove(ChartID(), "not available trend line",1,time[4950],low[4980]);
Print(__LINE__,"-moveResult=",moveResult);
2016.12.11 17:22:39.367 Far-Test-ChangeTrendLine (EURUSD,H1) 44-moveResult=true
Здравствуйте, я пишу индикатор на MQL5, но что бы я не написал как строковое имя ObejectDelete возвращает true! даже на пустом графике без объектов!
Описание функций чтения объектов
Это группа функций, предназначенных для работы с графическими объектами, относящимися к любому заданному графику.
Функции, определяющие свойства графических объектов, а также операции ObjectCreate() и ObjectMove() для создания и перемещения объектов по графику фактически используются для отправки команд графику. При успешном выполнении этих функций команда включается в общую очередь событий графика. Визуальные изменения свойств графических объектов реализуются при обработке очереди событий графика.
Прочитать описание функций объекта
Это означает, что команда "Удалить этот объект" успешно принята. Вы можете контролировать результат вашей команды с помощью GetLastError(). Попробуйте - какой код возвращается?Я изменил код таким образом :
int ObjCount = ObjectsTotal(ChartID(),/*0=основное подокно*/0,/*все типы объектов*/-1);
ResetLastError();
bool deleteResult=ObjectDelete(ChartID(), "несуществующий объект");
Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError());
вот результат :
2016.12.12 12:38:43.373 Far-TestObjectDelete (EURUSD,H1) 38-true | ObjCount=0 | LastError=0
ERR_SUCCESS
0
Операция завершилась успешно
поэтому она не возвращает ошибку, чтобы выяснить, например, что не удалось получить доступ к объекту. но в MT4 она возвращает ошибку.
ERR_SUCCESS
0
Операция завершена успешно
поэтому он не возвращает ошибку, чтобы узнать, например, что он не смог получить доступ к этому объекту. но в MT4 он возвращает ошибку.
OK. Как я выяснил, в MQL5 мы не выдаем ошибку в таком случае, потому что эти операции асинхронны. Поэтому у вас есть 2 варианта:
OK. Как я выяснил, в MQL5 мы не выдаем ошибку в таком случае, потому что эти операции анизохронны. Поэтому у вас есть два варианта:
OK. Как я выяснил, в MQL5 мы не выдаем ошибку в таком случае, потому что эти операции асинхронны. Поэтому у вас есть 2 варианта:
Как это может вернуть false в этом случае?
Вдокументации к ObjectDelete() сказано:
Возвращаемое значение
Возвращает true, если удаление прошло успешно, иначе возвращает false.
Документация должна быть более ясной, в ней не сказано "true, если команда принята".
Если мы хотим быть уверены, что объект удален, мы должны проверить, существует ли он после команды delete, это бессмысленно.
Как оно может возвращать false в этом случае?
Вдокументации ObjectDelete() сказано:
Документация должна быть более ясной, в ней не сказано "true, если команда принята".
Будет исправлено таким образом
Возвращаемое значение
Возвращает true, если команда помещена в общую очередь событий графика , иначе возвращает false.