Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Конечно можно все вручную самому делать.
Может чтобы более наглядным было. Код, который предоставлял выше перенес в четверку (во вложении). Единственное заменил PlotIndexSetDouble() на SetIndexEmptyValue().
И ячейка содержит нужный мне EMPTY_VALUE:
Как в МТ5 сделать, чтобы точно также работало, а не нули выдавал?
Дык оно точно так же и работает - в массиве art[] - неопределенное значение.
Ты ж не заполнял этот массив еще ? В нем мусор должен быть, и как я вижу - мусор и есть... Просто совпадает с EMPTY_VALUE. Не факт, что оно всегда там будет такое.
Если хочешь, чтобы в массиве было EMPTY_VALUE - должен использовать ArrayFill(), независимо от того, МТ4, МТ5 или какой-то другой язык.
Дык оно точно так же и работает - в массиве art[] - неопределенное значение.
Ты ж не заполнял этот массив еще ? В нем мусор должен быть, и как я вижу - мусор и есть... Просто совпадает с EMPTY_VALUE. Не факт, что оно всегда там будет такое.
Если хочешь, чтобы в массиве было EMPTY_VALUE - должен использовать ArrayFill(), независимо от того, МТ4, МТ5 или какой-то другой язык.
Работает не точно так же. Прикладываю коды.
Разница в них только в том, что заменил PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 1) на SetIndexEmptyValue(0, 1).
Поставил умолчательное значение 1. Я не заполнял массив ни в 4-ке, ни в 5-ке. Но вот результат их работы:
МТ5
МТ4
Сформулирую немного по другому вопрос. Есть ли в MQL5 аналог четверочной функции SetIndexEmptyValue(), которая в OnInit() задает значение по умолчанию и инициализацию новых буферных ячеек в дальнейшем?
Сформулирую немного по другому вопрос. Есть ли в MQL5 аналог четверочной функции SetIndexEmptyValue(), которая в OnInit() задает значение по умолчанию и инициализацию новых буферных ячеек в дальнейшем?
Нет, такого нет, в пятерке нужно кое-что из того, что в четверке было автоматом, делать самому.
Понятно, спасибо.
Сформулирую немного по другому вопрос. Есть ли в MQL5 аналог четверочной функции SetIndexEmptyValue(), которая в OnInit() задает значение по умолчанию и инициализацию новых буферных ячеек в дальнейшем?
Нет, конечно.
В МТ4 эта функция работает "с превышением полномочий", она лезет в индикаторные буффера, и изменяет их значение, хотя во-первых, по логике этого не должно быть, а во-вторых, насколько я знаю, и в документации об этом не говорится.
Вобще, в МТ4 "для облегчения жизни" довольно многие вещи сделаны вот так, "по умолчанию" (заполнение пустым значением, заполнение нулями), что приучает программистов не обращать внимания на важные моменты, что, в свою очередь, приводит к трудновыявляемым "плавающим" ошибкам.
На мой взгляд, любые инициализации должны вызываться явно. Более того, лично я сразу после объявления любой переменной всегда ее инициализирую, если нет значения по умолчанию - то некорректным значением. Как раз для того, чтобы не было возможности случайно использовать неинициализированную переменную.
Нет, конечно.
В МТ4 эта функция работает "с превышением полномочий", она лезет в индикаторные буффера, и изменяет их значение, хотя во-первых, по логике этого не должно быть, а во-вторых, насколько я знаю, и в документации об этом не говорится.
Вобще, в МТ4 "для облегчения жизни" довольно многие вещи сделаны вот так, "по умолчанию" (заполнение пустым значением, заполнение нулями), что приучает программистов не обращать внимания на важные моменты, что, в свою очередь, приводит к трудновыявляемым "плавающим" ошибкам.
На мой взгляд, любые инициализации должны вызываться явно. Более того, лично я сразу после объявления любой переменной всегда ее инициализирую, если нет значения по умолчанию - то некорректным значением. Как раз для того, чтобы не было возможности случайно использовать неинициализированную переменную.
Т.е. получается PlotIndexSetDouble() вызывать в OnInit() нет смысла? И ее нужно использовать уже когда есть размерность у буфера? Это как аналог ArrayInitialize()?
Нет.
Это совершенно разные функции. Первая - устанавливает дубль-свойства индикатора. А вторая - инициализирует массив. Нужны обе функции, каждая в своем месте. (Обычно, и ту и другую вызывают в OnInit())
Нет.
Это совершенно разные функции. Первая - устанавливает дубль-свойства индикатора. А вторая - инициализирует массив. Нужны обе функции, каждая в своем месте. (Обычно, и ту и другую вызывают в OnInit())
Понятно. Я просто не мог уловить предназначение PlotIndexSetDouble(): Задает значение соответствующего свойства соответствующей линии индикатора.
" Соответствующее свойство" у этой функции одно:
PLOT_EMPTY_VALUE
Пустое значение для построения, для которого нет отрисовки
Сейчас разобрался.
Т.е. если я задал через эту функцию в OnInit() значение "1". А у меня диапазон линии, например, от 5 до -5, тогда на значении "1" просто будет "исчезать" линия отрисовки.
а вот что не так в коде, что в профилировщике идёт прямая линия от индикатора вниз?
при обычном запуске индикатора её нет. в тестере тоже нет.
кажется что это зависит от компилирования. или просто носит случайный характер. из 10 компиляций+запусков 1 с таким феноменом.