Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1374
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вас кто-то плохо учил. Переменная _LastError будет хранить полученное значение до тех пор, пока не произойдёт следующая, очередная ошибка.
Ну вот смотрите, вначале основного кода происходит например такая ошибка:
ERR_INVALID_DATETIME
4010
Неправильное значение даты и/или времени
А далее по коду создается объект и _LastError перезаписывается на
ERR_OBJECT_NOT_FOUND
4202
Графический объект не найден
Если проверка _LastError стоит в конце кода, как я обычно делаю, то я получу 4202 и просто проигнорирую ее. То есть ошибка 4010 останется незамеченной. Где я ошибаюсь?
Требованием маркета является отсутствие ошибок исполнения получаемых от сервера брокера\дц.
Спасибо, этого не знал, думал все ошибки запрещены.
Ну вот смотрите, вначале основного кода происходит например такая ошибка:
ERR_INVALID_DATETIME
4010
Неправильное значение даты и/или времени
А далее по коду создается объект и _LastError перезаписывается на
ERR_OBJECT_NOT_FOUND
4202
Графический объект не найден
Если проверка _LastError стоит в конце кода, как я обычно делаю, то я получу 4202 и просто проигнорирую ее. То есть ошибка 4010 останется незамеченной. Где я ошибаюсь?
Спасибо, этого не знал, думал все ошибки запрещены.
Именно так. Вы не ошибаетесь…
Здравствуйте, может кто подсказать.
Записываю в массив значения времени конкретно каждого бара. На графике стоит ограничение 3000 баров.
Задача:
- Смещать массив значений при каждом новом баре.
Не получается настроить чтобы слаженно работало.
Правильно же я смещаю массив при новом баре, если (this.m_rt-this.m_pc)=1?
Здравствуйте, может кто подсказать.
Записываю в массив значения времени конкретно каждого бара. На графике стоит ограничение 3000 баров.
Задача:
- Смещать массив значений при каждом новом баре.
Не получается настроить чтобы слаженно работало.
Правильно же я смещаю массив при новом баре, если (this.m_rt-this.m_pc)=1?
То-есть размер массива должен быть ровно 3000 и при образовании нового бара нулевой индекс надо переписать первым ……… и в конец дописать новое значение?
Если я правильно понял, то зачем цикл? Просто надо копировать массив сам в себя в нулевой индекс начиная с первого, а потом в последний индекс вписать новое значение.
Если объект не найден, то это и есть ошибка поиска объекта…
ERR_OBJECT_NOT_FOUND
4202
Графический объект не найден
Не надо его алертить…
Провел пару тестов... тут вот какое дело получается. На MQL5 использовать при создании объектов ObjectFind() вовсе необязательно.
Объект можно создавать без всяких предварительных проверок его существования (просто через ObjectCreate) и даже внутри OnTick такой код не вызывается никаких ошибок _LastError.
Не знаю как это реализовано в недрах системного кода MQL5, возможно там уже уже зашита какая-то проверка, что объект будет создаваться только, если его еще нет. Но получается, что по крайней мере при создании объекта внутри MQL5 ObjectFind() просто не нужен. И видимо все его свойства безвариантно постоянно обновляются на каждом тике.
Чего не не скажешь про MQL4. Там создание объекта поверх уже существующего вызывается ошибку 4200 ("Объект уже существует"). То есть для его создания использование ObjectFind() уже обязательно. При этом остается простая возможность закрыть его свойства от постоянного переобновления без генерации ошибок _LastError.
Прошу подтвердить мои выводы.
То-есть размер массива должен быть ровно 3000 и при образовании нового бара нулевой индекс надо переписать первым ……… и в конец дописать новое значение?
Если я правильно понял, то зачем цикл? Просто надо копировать массив сам в себя в нулевой индекс начиная с первого, а потом в последний индекс вписать новое значение.
Ну да вроде все понятно, но если появляется обрыв, например задержка, появилось два бара, их записываю.
Спасибо понял, попробую через CopyTime.
Провел пару тестов... тут вот какое дело получается. На MQL5 использовать при создании объектов ObjectFind() вовсе необязательно.
Объект можно создавать без всяких предварительных проверок его существования (просто через ObjectCreate) и даже внутри OnTick такой код не вызывается никаких ошибок _LastError.
Не знаю как это реализовано в недрах системного кода MQL5, возможно там уже уже зашита какая-то проверка, что объект будет создаваться только, если его еще нет. Но получается, что по крайней мере при создании объекта внутри MQL5 ObjectFind() просто не нужен. И видимо все его свойства безвариантно постоянно обновляются на каждом тике.
Чего не не скажешь про MQL4. Там создание объекта поверх уже существующего вызывается ошибку 4200 ("Объект уже существует"). То есть для его создания использование ObjectFind() уже обязательно. При этом остается простая возможность закрыть его свойства от постоянного переобновления без генерации ошибок _LastError.
Прошу подтвердить мои выводы.
Ну да вроде все понятно, но если появляется обрыв, например задержка, появилось два бара, их записываю.
Спасибо понял, попробую через CopyTime.
Ну, так если через CopyTime то вообще нет проблем. Просто копируйте от текущего 3000 баров и все дела.
Как задать уровень штатного трейлинг-стопа в коде программы при выставлении отложенного ордера или при открытии позиции с рынка?
Как это делается вручную, понятно. Программки для нештатных трейлинг-стопов не интересуют.
Заранее благодарю.
Почему такая конструкция не работает? Где ошибка... (в журнале пусто)
И енам, тоже пусто