Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 361
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вопрос в другом , за один тик просчитывать код индикатора 900 раз (3 таймфрейма по 300 баров к примеру), или 3 раза, понятно что с icustom меньше возни, закинул в цикл и делов, как вариант видел с помощью dll передается адрес массива значений индикатора, в советник,но не хочется тягать за собой индикатор в комплекте
Снова ошибка в постановке задачи.. Зачем вам 900 баров в советнике ? Корректно поставленная задача требует 2-3 бара считать из индикатора.. Если уж вам так нужны данные в индикаторе, 900 штук, то в самом индикаторе с ними и работайте, зачем их в советник тащить? Правильно поставленная задача это 50% успеха
Снова ошибка в постановке задачи.. Зачем вам 900 баров в советнике ? Корректно поставленная задача требует 2-3 бара считать из индикатора.. Если уж вам так нужны данные в индикаторе, 900 штук, то в самом индикаторе с ними и работайте, зачем их в советник тащить? Правильно поставленная задача это 50% успеха
МНЕ необходимо сравнивать минимальные и максимальные пики индикатора на 3 таймфреймах к примеру 5мин 15мин и 30мин,для определения трендов, угадать пики у меня не получится,то-есть придется перебрать поочереди всю историю. 300 баров истории я взял для примера.
Все равно с помощью icustom слишком ресурсозатратно.
МНЕ необходимо сравнивать минимальные и максимальные пики индикатора на 3 таймфреймах к примеру 5мин 15мин и 30мин,для определения трендов, угадать пики у меня не получится,то-есть придется перебрать поочереди всю историю. 300 баров истории я взял для примера.
Все равно с помощью icustom слишком ресурсозатратно.
Вопрос остается открытым в ontick функция IndicatorCounted() при первом просчете выдает -1 чем ее заменить в эксперте?
"Ничем её менять не надо"- то-есть с onTick в эксперте она работает также корректно как и с onCalculate в индикаторе?
Нет, я имел ввиду что она там совсем не нужна.
Нет, я имел ввиду что она там совсем не нужна.
Накопал https://www.mql5.com/ru/articles/1456, буду разбираться, но думал ест попроще вариант
Вопрос остается открытым в ontick функция IndicatorCounted() при первом просчете выдает -1 чем ее заменить в эксперте?
Вам не нужно просматривать вершины на каждом тике, они не меняются.
В советнике проверяйте в цикле на открытии бара, и как только вершина найдена - выход с цикла.
Функция IndicatorCounted() применялась ранее в индикаторах с функцией start(). В новых индикаторах с функцией OnCalculate() вместо нее используется второй параметр prev_calculated. Специально изучал их и установил, что они отличаются на 1. Разница мала, и они показывают, сколько баров уже рассчитано. Если 0 (или -1), значит все бары нужно рассчитывать. Это бывает при запуске индикатора, когда он должен отрисовать всю линию и сохранить результат в буферных массивах. На следующих тиках нужно пересчитывать лишь данные последнего бара. Следовательно, то, что делается при нулевом (или -1) значении, нужно поместить в OnInit() советника. Остальное - совсем мало - в OnTick()
Спасибо. Отработаю. В учебнике про тип лонг, почему-то ничего не читал.
Нужно поставить курсор на long int или short (или любое другое слово языка) и нажать F1.
Спасибо огромное, но насколько я понял из описания функции,она выполняет полностью код индикатора для получения одного значения, в указанном мною месте, то есть для получения всех вершин мне необходимо будет просчитать код индикатора n-ое количество раз(перебрать поочереди все бары),а мне необходимо сравнивать порядок вершин этого индикатора на нескольких таймфреймах.
И к тому-же потом вручную искать вершины
Совершенно не верно! Все бары индикатора при вызове из советника с помощью iCustom() пересчитываются только один раз! Все следующие вызовы индикатора работают с уже посчитанными результатами, пересчитываются исключительно не посчитанные бары до предыдущего вызова. К примеру, вызывается индикатор периода М15 с графика Н1 на каждом новом баре, получается что от вызова до вызова индикатор не пересчитывается 4 15-ти мнутных бара. Так вот только эти 4 бара и будет пересчитаны.
Даже если в цикле перебирать последовательность баров от 0 до xxx то индикатор будет пересчитан только 1 раз при первом вызове. Все следующие вызовы никакого пересчёта не будут делать.
Накопал https://www.mql5.com/ru/articles/1456, буду разбираться, но думал ест попроще вариант
Это плохой пример. Ему уже ДЕСЯТЬ лет!!! Язык уже изменился к лучшему.