#property tester_everytick_calculate может решит проблемы?
24. MQL5: Добавлено новое свойство для пользовательских индикаторов #property tester_everytick_calculate. Оно используется в тестере стратегий и позволяет принудительно влючить расчет индикаторов на каждом тике.
25.Tester: Теперь при невизуальном тестировании/оптимизации все используемые индикаторы (стандартные и пользовательские) рассчитываются только по запросу данных. Исключение составляют индикаторы, содержащие вызовы функции EventChartCustom и использующие обработчик OnTimer. Ранее в тестере стратегий при приходе любого тика (даже от чужого инструмента) все индикаторы рассчитывались безусловно. Нововведение позволило существенно ускорить тестирование и оптимизацию.
Чтобы принудительно включить расчет индикаторов на каждом тике, добавьте для программы свойство #property tester_everytick_calculate.
Индикаторы, скомпилированные предыдущими версиями компилятора, будут рассчитываться как раньше — на каждом тике.
Также всегда рекомендовалось, если работаете с чужим таймфреймом - то раз в минуту необходимо получать OHLC с этого таймфрейма (любая CopyXXXX функция).
Отсюда выходит - при работе с чужим таймфреймом не нужно использовать атавизмы iXXXX, а необходимо пользовать CopyXXXX функции.
Также всегда рекомендовалось, если работаете с чужим таймфреймом - то раз в минуту необходимо получать OHLC с этого таймфрейма (любая CopyXXXX функция).
Отсюда выходит - при работе с чужим таймфреймом не нужно использовать атавизмы iXXXX, а необходимо пользовать CopyXXXX функции.
Не серьёзно!
Зачем тогда: iHigh(Symbol(),TF,i);
P.S. В мт4 всё работает без проблем с первых дней его основания, почему не сделать также в мт5, чтобы не было танцев с бубном? Если работает в мт4 - значит возможно также наладить работу и в мт5Не серьёзно!
Зачем тогда: iHigh(Symbol(),TF,i);
P.S. В мт4 всё работает без проблем с первых дней его основания, почему не сделать также в мт5, чтобы не было танцев с бубном? Если работает в мт4 - значит возможно также наладить работу и в мт5Также всегда рекомендовалось, если работаете с чужим таймфреймом - то раз в минуту необходимо получать OHLC с этого таймфрейма (любая CopyXXXX функция). Это было всегда.
double high_k = NormalizeDouble(iHigh(Symbol(),TimeFrames, k),DigitsM); double low_k = NormalizeDouble(iLow(Symbol(),TimeFrames, k),DigitsM); double open_k = NormalizeDouble(iOpen(Symbol(),TimeFrames, k),DigitsM); double close_k = NormalizeDouble(iClose(Symbol(),TimeFrames, k),DigitsM);
Попробуйте перед этим обновлять котировки через RefreshRates.
Попробуйте перед этим обновлять котировки через RefreshRates.
"RefreshRates" - несуществующая функция.
"RefreshRates" - несуществующая функция.
Версия этого индикатора на MQL4 работает уже более 2-х лет и такого рода проблем/ошибок не было выявлено ни разу.
Ни какие CopyXXX вам не помогут. Это баг МТ5 который начался с 30-го билда и по 44 включительно не исправлен. Почитайте последние 5-6 страниц https://www.mql5.com/ru/forum/285631/page29 и увидите ,что вы не одиноки.
- 2018.11.13
- www.mql5.com
Доброго времени суток!
В данный момент переношу ранее написанные индикаторы с MQL4 в MQL5. Не большие танцы с бубнами и вроде как все нормально, но....
В какой то момент, данные индикатора перестают обновляться, долго не мог понять где именно ошибка, чисто случайно обратил внимание, что значения iClose/iOpen и т.д. в какой то момент перестают обновляться, т.е. возращают одно и тоже значение.
Самое смешное, что даже если выполнить перекомпиляцию исходного кода, индикатор все так же будет давать некорректное данные, при это я вижу что индикатор выполнил функции:
Только если открыть свойства индикатора и закрыть через "Ок", данные обновляются и корректно отражаются, но до какого то момента, который может возникнуть в любое время(но 100% это происходит). В данном случае индикатор перестал обновлять данные в 2018.11.14 00:00, в общем это происходить через какое-то время регулярно.
Ранее выявился другой баг, функция iBars(Symbol(),TimeFrames)/Bars(Symbol(),TimeFrames) возвращает нулевое значение. Благо этот баг не носит характер постоянной ошибки, но так же возникает и приходиться ее контролировать.
Тут выясняется, что MQ прекращают поддержку MQL4, это замечательно, но с такими багами что наблюдаются в MQL5, все будет очень печально.
И так, как решается выше описанная проблема?
1) Замерьте время выполнения одного обсчета OnTick/OnCalculate в микросекундах и выводите их в лог.
Так вы сможете увидеть, сколько времени вы тратите на обсчет одного тика. После чего оцените, сколько тиков при такой скорости вы можете обсчитывать в секунду. Наверняка окажется, что не больше десятка тиков, а их приходит заведомо больше в секунду.
2) Замерьте время обсчета каждого OnCalculate на индикаторах, которые прикреплены в чартам/таймфреймам, откуда вы извлекаете данные.
Там наверняка аналогичная ситуация. Из-за тормозных вычислений терминал ждет, пока будет разблокирован просчитываемый символ:таймфрейм. Именно тормозные индикаторы, тем более на глубокой истории, приводят к заморозке отдачи чужих чартов.
При разработке индикаторов нужно вопросы производительности и экономные пересчеты ставить на первое место. Иначе убьете все вокруг.
Именно тормозные индикаторы, тем более на глубокой истории, приводят к заморозке отдачи чужих чартов.
Тогда подскажите, почему происходит заморозка у меня ? У меня отдача данных в OnTick замерзает до функции опроса индикаторовю Тоесть обновление CopyTime по M1 выступает в качестве тригера запускающего остальную обработку в OnTick, а до CopyTime ни каких функций или опросов индикатора.
И почему до 30-го билда таких проблем не было и с октября 2017 года всё работало отлично ?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования