Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Этого вообще делать не надо. В МТ5 в индикаторах индексация слева направо, самое то, что надо.
Но для фриланса и маркета, хотел более устойчивые программы делать. В справке пишут:
"Чтобы определить направление индексации в массивах time[], open[], high[], low[], close[], tick_volume[], volume[] и spread[], необходимо вызывать функцию ArrayGetAsSeries(). Чтобы не зависеть от умолчаний, необходимо безусловно вызывать функцию ArraySetAsSeries() для тех массивов, с которыми предполагается работать."
Т.е. направление может быть все-таки в разные стороны, возможно могут умолчания меняться в зависимости от версии компилятора.
Поэтому буду пока явно задавать таймсерию.
...
Т.е. направление может быть все-таки в разные стороны, возможно могут умолчания меняться в зависимости от версии компилятора.
...
И подумать от таком не мог. Но отличная идея для МК, зачинить очередной движнячёк?
Кто мешает на каждом OnCalculate выставлять нужный ArraySetAsSeries? Тут уже было правильно сказано (и в документации это написано), что данные хранятся всегда одинаково, слева направо, и это не зависит от флага направления индексации.
Флаг направления индексации позволяет правильно преобразовывать индекс доступа к элементу массива. И всё.
Кто мешает на каждом OnCalculate выставлять нужный ArraySetAsSeries?
Вообще, это немного избыточно.
Даже если содержимое функции - простое присваивание нового значения, если оно отличается от предыдущего, совсем не обязательно делать это несколько раз в секунду по всем буферам.
Я сам оставил вызовы в OnCalculate, но встречал их перенос в OnInit. И это как бы логично.
глобальные массивы можно один раз обработать в OnInit, а вот массивы time[], open[], high[], low[], close[], tick_volume[], volume[] и spread[] придется устанавливать
индексацию при каждом вызове OnCalculate, если нужна индексация отличная от индексации установленной по умолчанию
Вообще, это немного избыточно.
Даже если содержимое функции - простое присваивание нового значения, если оно отличается от предыдущего, совсем не обязательно делать это несколько раз в секунду по всем буферам.
Я сам оставил вызовы в OnCalculate, но встречал их перенос в OnInit. И это как бы логично.
На самом деле выставление нужного флага хоть 100 буферам не приводит к задержкам. Лишний один такт (а это реально 1 такт, так как флаг выставляется напрямую без никаких функций-посредников), на фоне миллиона тактов функции OnCalculate роли никакой не играет.
Анализ предыдущего флага нужен только в сервисных функциях, чтобы вдруг не нарушить логику основной работы. Как это у нас сделано в MovingAverages.mqh
На самом деле выставление нужного флага хоть 100 буферам не приводит к задержкам. Лишний один такт (а это реально 1 такт, так как флаг выставляется напрямую без никаких функций-посредников), на фоне миллиона тактов функции OnCalculate роли никакой не играет.
Анализ предыдущего флага нужен только в сервисных функциях, чтобы вдруг не нарушить логику основной работы. Как это у нас сделано в MovingAverages.mqh