Ошибки, баги, вопросы - страница 1391
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я говорю о показаниях индикатора Ишимоку в данном случае. Речь о показаниях индикаторов, которые используются в текущем, то есть в OnCalculate. Чтобы они рассчитывались до вызова OnCalculate, как это было в МТ4.
Я говорю о показаниях индикатора Ишимоку в данном случае. Речь о показаниях индикаторов, которые используются в текущем, то есть в OnCalculate. Чтобы они рассчитывались до вызова OnCalculate, как это было в МТ4. Или чтобы можно было в OnCalculate дождаться их расчета. Иначе пользователям придется несколько раз нажимать на Обновить чтобы построить индикатор. Так как не все индикаторы строятся на всей истории за 1 секунду, бывают сложные индикаторы которые рассчитываются дольше. Все это время пользователю нужно будет куковать над кнопкой "Обновить", а в МТ4 нужно было просто ждать отрисовки.
Периодически эта проблема всплывает на форуме. К сожалению вызов OnCalculate() в OnTimer() не решает проблему.
Но всё же попробуйте. Пример есть в этой статье: Рецепты MQL5 - Разработка мультивалютного индикатора волатильности на MQL5.
Напишите потом, если не сложно, получилось или нет.
В OnInit() осуществляется подготовка торгового окружения для индикатора. И только в OnCalculate() уже можно пользоваться данными индикатора.
Периодически эта проблема всплывает на форуме. К сожалению вызов OnCalculate() в OnTimer() не решает проблему.
Но всё же попробуйте. Пример есть в этой статье: Рецепты MQL5 - Разработка мультивалютного индикатора волатильности на MQL5.
Напишите потом, если не сложно, получилось или нет.
Оказывается, что нельзя, не нажав кнопку "Обновить" на графике один или несколько раз (либо подождав 1/несколько тиков), если в индикаторе используются другие индикаторы с других символов и/или тф.
А если более внимательно просмотреть на работу кода, который я дал? И, в частности, в "Эксперты"? После перезапуска терминала на выходных:
Отлично видно, что расчёт прошёл только на втором вызове OnCaalculate(). Таким образом никто не снимает с программиста ответственности по проверкам: проверяйте результат CopyBuffer() в OncalCulate() - если ничего не вернула функция, значит нужно проверить на следующем входе в OnCalculate().
Периодически эта проблема всплывает на форуме. К сожалению вызов OnCalculate() в OnTimer() не решает проблему.
Но всё же попробуйте. Пример есть в этой статье: Рецепты MQL5 - Разработка мультивалютного индикатора волатильности на MQL5.
Напишите потом, если не сложно, получилось или нет.
Статью пока не прочитал, но прием с OnTimer работает отлично
В общем тут по-кривому показано, что вызов OnCalculate из OnTimer работает) Нужно добавить передачу правильных значений в таймсериях
Статью пока не прочитал, но прием с OnTimer работает отлично
Статью пока не прочитал, но прием с OnTimer работает отлично
Пользуйтесь Стилизатором - так лучше выявлять ошибки.
Увеличение переменной count нужно делать перед выходом из OnCalculate() - в таком случае эта переменная будет правильно считать все заходы в OnCalculate....
В общем тут по-кривому показано, что вызов OnCalculate из OnTimer работает)
Нужно добавить передачу правильных значений в таймсериях
В статье, как раз этот пример и показан. )
Вот ещё пример для тестов с таким же методом: Рецепты MQL5 - Разработка мультивалютного индикатора для анализа расхождения цен >>>
Увеличение переменной count нужно делать перед выходом из OnCalculate() - в таком случае эта переменная будет правильно считать все заходы в OnCalculate.
Там нужно было считать не все, а только до расчета Ишимоку. Все это время count было больше либо равно 0, а потом -1. Вообще это не имеет значения. Важно, что
1) При первом запуске индикатор запускался 1 раз (OnCalculate) и больше не запускается до следующего тика (на выходных и праздниках до нескольких суток), если не нажимать кнопку "Обновить"
2) При этом первом вызове индикатор Ишимоку не успел рассчитаться (что уж говорить о более сложных индикаторах)
3) Если использовать вместо OnCalculate OnTimer (либо вызывать OnCalculate из OnTimer), то пользователь может запустить индикатор, который построится сам, иначе ему придется нажимать на Обновить (возможно, несколько раз) либо ждать следующих тиков. Что является очевидным неудобством по сравнению с тем же МТ4.
В простых индикаторах вполне нормально. А вот в более сложных, почему-то иногда буксует. )