Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 850
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Править кривой индикатор. Он у вас может отрисовывать линию только при полном пересчёте, что и происходит по команде контекстного меню.
В mql4 тоже есть.
Спасибо.
Выкрутился с помощью костыля). Мне нужно было, чтобы индикатор обновлялся после ручного перетаскивания вертикальной линии, с которой он брал время. Использовал функцию события перетаскивания объекта и в неё заложил функцию изменения ТФ с возвратом на исходный. Только почему то с задержкой срабатывает обновление, порядка нескольких секунд. Функция переключения ТФ что ли так медленно работает, не понял.
Эта функция асинхронная. Она лишь возвращает результат постановки команды в очередь событий.
Для немедленного обновления нужно после команды переключения графика выполнить команду ChartRedraw()
А вообще конечно неправильный подход. Если нужно обновлять график лишь после завершения перемещения линии, то и цикл пересчёта индикатора нужно вызывать не из OnCalculate(), а из ChartEvent() - поймали смещение линии - вызвали ф-цию пересчёта индикатора, которая выполнит полный цикл перерасчёта линии с новыми данными (линия же нужна для каких-то данных?)
Или индикатор просто не правильно сделан, и на текущих данных не обновляет нулевой бар, и вы ему накостыляли?
Может кто нибудь поможет подправить код советника на МТ5?
Читал мануалы, но не могу победить 2 варнинга при компиляции.
declaration of 'ххх ' hides global declaration
и
possible loss of data due to type conversion
Просто тупо исправил имена глобальных переменных и привёл типы в соответствие.
С вас 10 000 000 можно рублей - за преодоление вашей лени.
Просто тупо исправил имена глобальных переменных и привёл типы в соответствие.
С вас 10 000 000 можно рублей - за преодоление вашей лени.
Спасибо огромное.
Мне стыдно показывать как я исправил)
int CountTrades(long PositionID1)
Эта функция асинхронная. Она лишь возвращает результат постановки команды в очередь событий.
Для немедленного обновления нужно после команды переключения графика выполнить команду ChartRedraw()
А вообще конечно неправильный подход. Если нужно обновлять график лишь после завершения перемещения линии, то и цикл пересчёта индикатора нужно вызывать не из OnCalculate(), а из ChartEvent() - поймали смещение линии - вызвали ф-цию пересчёта индикатора, которая выполнит полный цикл перерасчёта линии с новыми данными (линия же нужна для каких-то данных?)
Или индикатор просто не правильно сделан, и на текущих данных не обновляет нулевой бар, и вы ему накостыляли?
Индикатор считает последние не посчитанные бары. А после перетаскивания вертикали должен полностью пересчитаться после считывания нового времени вертикали. Вот здесь я про него написал и скрины выложил как работает.
Спасибо, попробую вашу идею реализовать. Вообще я в индикаторах слаб, всё время в основном советниками занимался.
Эта функция асинхронная. Она лишь возвращает результат постановки команды в очередь событий.
Для немедленного обновления нужно после команды переключения графика выполнить команду ChartRedraw()
А вообще конечно неправильный подход. Если нужно обновлять график лишь после завершения перемещения линии, то и цикл пересчёта индикатора нужно вызывать не из OnCalculate(), а из ChartEvent() - поймали смещение линии - вызвали ф-цию пересчёта индикатора, которая выполнит полный цикл перерасчёта линии с новыми данными (линия же нужна для каких-то данных?)
Или индикатор просто не правильно сделан, и на текущих данных не обновляет нулевой бар, и вы ему накостыляли?
Сделал как вы посоветовали. Все получилось отлично. Теперь мгновенно после перетаскивания индикатор полностью перерисовывается. Ещё раз спасибо.
Сделал как вы посоветовали. Все получилось отлично. Теперь мгновенно после перетаскивания индикатор полностью перерисовывается. Ещё раз спасибо.
Не за что. Но он и в OnCalculate() должен рисовать, или-таки нет?
Ведь при набрасывании его на график, он ещё ни о каких перемещениях линии не в курсе, но отрисовать-то линию должен.
Не за что. Но он и в OnCalculate() должен рисовать, или-таки нет?
Ведь при набрасывании его на график, он ещё ни о каких перемещениях линии не в курсе, но отрисовать-то линию должен.
При установке на график индикатора в init() создаётся вертикаль и первоначально ей задаётся какое-то время, например Time[10]. Я продублировал код в OnChartEvent() и в OnCalculate(). Только в OnChartEvent пересчёт сделал по всем барам.
При установке на график индикатора в init() создаётся вертикаль и первоначально ей задаётся какое-то время, например Time[10]. Я продублировал код в OnChartEvent() и в OnCalculate(). Только в OnChartEvent пересчёт сделал по всем барам.
А не лучше ли сделать просто функцию Refresh(), например, с нужными формальными параметрами, и вызывать её при необходимости?
И, кстати, при получении rates_total в индикаторе вне функции OnCalculate() при помощи Bars() с диапазоном дат, можно нарваться на зависание индикатора:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Аналог iBarShift
Nikolai Semko, 2018.04.05 23:47
Пока этот вариант, но я сейчас хочу его дополнить, чтобы он обходил этот баг подвисания функции Bars, по поводу которого я уже отписался в сервисдеск.
Суть этого бага в том, что если в функции Bars оба времени start_time и stop_time находятся внутри одного бара или находятся в будущем (правее нулевого бара), то эта функция подвисает на более чем 10 секунд.
Возможно я чуть позже все же сделаю правильный более быстрый вариант, но более громоздкий.