Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 427

 
Artyom Trishkin:
А вы почитайте сколько раз инициализируется статическая переменная. И вопрос сам отпадёт за его несуразностью ;)

Тогда как понять это: Локальные переменные, объявленные с ключевым словом static, сохраняют свои значения в течение всего времени существования функции. При каждом следующем вызове функции такие локальные переменные содержат те значения, которые они имели при предыдущем вызове. Разве переменная, объявленная в пользовательской функции не является локальной?

 
Alekseu Fedotov:

По второму вопросу,

если первый тик не поймает,поймает второй.

Возвращает время открытия бара. Оно будет одним и тем же на протяжении всего бара.
 
novichok2018:

Тогда как понять это: Локальные переменные, объявленные с ключевым словом static, сохраняют свои значения в течение всего времени существования функции. При каждом следующем вызове функции такие локальные переменные содержат те значения, которые они имели при предыдущем вызове. Разве переменная, объявленная в пользовательской функции не является локальной?

Модификатор static делает её статической, и она хранится уже в памяти для статических переменных, а не локальных.
 
Artyom Trishkin:
Возвращает время открытия бара. Оно будет одним и тем же на протяжении всего бара.

Вот здесь понял. Спасибо.

 
Artyom Trishkin:
Модификатор static делает её статической, и она хранится уже в памяти для статических переменных, а не локальных.

А вот здесь не понял. По-моему, не важно, где хранится, по коду при каждом обращении к функции мы сбрасываем значение переменной до нуля. Зачем?

 
novichok2018:

А вот здесь не понял. По-моему, не важно, где хранится, по коду при каждом обращении к функции мы сбрасываем значение переменной до нуля. Зачем?

Для первого запуска - при объявлении. Далее уже вы сами контролируете её содержимое.
 
Artyom Trishkin:
Для первого запуска - при объявлении. Далее уже вы сами контролируете её содержимое.

Всё-таки по-моему, это не так: код каждый раз читается построчно, и каждый раз натыкается на ноль, а при первом запуске даже если и нет инициализации, переменная приняла бы нулевое значение. Выходит, строка static datetime New_Time=0; заставляет программу делать ненужную работу.

 
novichok2018:

Всё-таки по-моему, это не так: код каждый раз читается построчно, и каждый раз натыкается на ноль, а при первом запуске даже если и нет инициализации, переменная приняла бы нулевое значение. Выходит, строка static datetime New_Time=0; заставляет программу делать ненужную работу.

Вам говорят "нет", вы говорите "да"...
Просто выведите значение переменной в журнал и поглядите. Чего упираться-то когда вам объясняют простейшие вещи?
Далее без меня, пока сами не проверите.
 
Artyom Trishkin:
Вам говорят "нет", вы говорите "да"...
Просто выведите значение переменной в журнал и поглядите. Чего упираться-то когда вам объясняют простейшие вещи?
Далее без меня, пока сами не проверите.
Обижаться не надо. Но видно программисты по-другому читают текст. Я всегда считал, что если в программе написано "приравняй нулю", комп обязан приравнять нулю, не зависимо, при запуске или при повторном обращении к строке кода. А за доказательством излишности инициализации нулём не надо ходить ни в какой журнал, достаточно просто её убрать: static datetime New_Time; дает абсолютно те же результаты, что и static datetime New_Time=0; Не знаю, на сколько это ускоряет работу программы, допускаю, что совсем не существенно, но всё же убирается "лишнее телодвижение".
 
novichok2018:
Обижаться не надо. Но видно программисты по-другому читают текст. Я всегда считал, что если в программе написано "приравняй нулю", комп обязан приравнять нулю, не зависимо, при запуске или при повторном обращении к строке кода. А за доказательством излишности инициализации нулём не надо ходить ни в какой журнал, достаточно просто её убрать: static datetime New_Time; дает абсолютно те же результаты, что и static datetime New_Time=0; Не знаю, на сколько это ускоряет работу программы, допускаю, что совсем не существенно, но всё же убирается "лишнее телодвижение".
Я не обижаюсь на упёртость. Зачем?
А переменные нужно явно инициализировать. Потом когда-нибудь дойдёте до важности инициализации. А пока можете выкидывать из кода всё, что внутри фигурных скобок.