Особенности языка mql5, тонкости и приёмы работы - страница 159
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите, pls.
В индикаторе порядок в сериях, напр. close[], устанавливается ArraySetAsSeries() один раз или как-то иначе ?
Это делается в OnCalculate() или можно в OnInit() ?
Столкнулся с непонятной ситуацией:
Порядок в close[], установленный AS_SERIES при входе на первом тике, на следующем тике спонтанно меняется на обычный, т.е. !AS_SERIES.
Так и не нашел с чем это связано в коде.
в любой функции получающей scalar &arr[] нельзя быть стопроцентно уверенным в направлении индексации массива :-(
более того, если вы внутри поменяете "серийность", то это направление останется и по завершению вашей функции..это получится side-effect, нежданчик которого никто не ждёт
поэтому к сожалению, получая на входе в функцию массив, запоминайте его серийность, ставьте удобную вам и при любом выходе из функции ВСЕГДА возвращайте оригинал обратно
с OnCalculate это редкий случай, но на практике бывало что и его вызывают из прочего кода.
более того, если вы внутри поменяете "серийность", то это направление останется и по завершению вашей функции..
На это собственно я и рассчитывал. Поэтому и поставил ArraySetAsSeries(close,true) в OnCalculate() в блоке, который исполняется только один раз при первом входе. И эта "серийность" действительно была установлена. Однако, к моему удивлению, на втором тике, и дальше, "серийность" была уже противоположная.
с OnCalculate это редкий случай, но на практике бывало что и его вызывают из прочего кода.
У меня нет такой экзотики и, более того, я не меняю "серийность" таймсерий и буферных массивов внутри программы. Поэтому мне было бы достаточно установить ее один раз, в начале работы индикатора. Но, если нельзя быть уверенным в том, что "серийность" этих массивов сохраняется, то надо устанавливать ее в начале каждого цикла OnCalculate(). Это кажется чем-то совершенно неестественным.
Хорошо бы предупреждение генерировать на этапе компиляции.
Если ничего не изменилось с давних времён, NULL != "" На этом попадались уже многие.
Если ничего не изменилось с давних времён, NULL != "" На этом попадались уже многие.
Речь о другом.
Речь о другом.
Тогда объясните почему не может быть. Почему
может быть, а
быть не может.
Тогда объясните почему не может быть.
Приведенный скрипт это показывает.
Приведенный скрипт это показывает.
Если-бы показывал не возникали-бы вопросы. Вы-же всегда считаете, что все вокруг должны читать ваши мысли, или быть подготовленнее вас в программировании.
Если-бы показывал не возникали-бы вопросы. Вы-же всегда считаете, что все вокруг должны читать ваши мысли, или быть подготовленнее вас в программировании.
Не понимаю причин такой реакции. Лаконичный код демонстрирует особенность на 100%.
Не понимаю причин такой реакции. Лаконичный код демонстрирует особенность на 100%.
Нормальная реакция. Я не понимаю ваших кодов, просил объяснить, а в ответ...
NULL такая неопределённость, что с ней надо внимательно разбираться. Особенно в применении к строковым переменным.
Из документации
Следовательно в данном примере NULL означает не то, что длина строки равна нулю, а то что переменная не инициализирована.
В вашем примере
переменная инициализирована. Чем, не понятно для меня, да и нет желания разбираться.
Следовательно
говорит о том, что переменная инициализирована. Опять-же чем, большой вопрос. Почему вы посчитали что инициализировать значением NULL нельзя?
Видимо такая инициализация приводит к тому, что длина строки равна нулю, о чём и говорит эта проверка