Информация о терминале
В предыдущих билдах индикатор работал нормально, даже был выложен с открытым кодом на одном из ресурсов. Жалоб от пользователей не было. Но вот мне самому стало надо им воспользоваться и вдруг на билде 1986 получаю такую ошибку
После удаления индикатора с графика через достаточно длительное время запись из функции OnSeinit
Для проверки я решил опубликовать этот незамысловатый код в CodeBase и проверку прошёл безупречно.
Хотелось-бы услышать о возможных причинах возникновения этой ошибки.
Опубликованный код тут.
Вот и у меня такая беда с одним аналогичным индикатором, но уже около года в разных билдах. Сначала работает, потом со временем начинает писать "indicator is too slow" и на графике прекращают рисоваться свечи. После удаления индикатора свечи прорисовываются.
Устранить проблему так и не смог, код уже оптимизирован максимально. В мт4 этот-же индикатор просто "летит" без каких-либо проблем. Видимо тормоза из-за доступа к истории
P.S. Кстати, если мой индикатор бросить на новый счёт где мало сделок истории, то тормозов нет и работает отменноВот и у меня такая беда с одним аналогичным индикатором, но уже около года в разных билдах. Сначала работает, потом со временем начинает писать "indicator is too slow" и на графике прекращают рисоваться свечи. После удаления индикатора свечи прорисовываются.
Устранить проблему так и не смог, код уже оптимизирован максимально. В мт4 этот-же индикатор просто "летит" без каких-либо проблем. Видимо тормоза из-за доступа к истории
можт утечка памяти в каком-нибудь массиве - раз со временем индикатор отваливается
Да это не со временем. Индикатор был написан по просьбе, сам я его только после написания посмотрел как выглядит, сделал скрин и опубликовал на стороннем форуме. Даже не думал публиковать такой примитив в CodeBase и вдруг сегодня решил посмотреть сколько отработано на конкурсном счёте а тута вот такая беда с самого запуска индикатора.
Профилировщик жалуется на строку
long chartID = ChartID(); if(ObjectFind(chartID, name) < 0)
и на ChartRedraw();
Вот и у меня такая беда с одним аналогичным индикатором, но уже около года в разных билдах. Сначала работает, потом со временем начинает писать "indicator is too slow" и на графике прекращают рисоваться свечи. После удаления индикатора свечи прорисовываются.
Устранить проблему так и не смог, код уже оптимизирован максимально. В мт4 этот-же индикатор просто "летит" без каких-либо проблем. Видимо тормоза из-за доступа к истории
P.S. Кстати, если мой индикатор бросить на новый счёт где мало сделок истории, то тормозов нет и работает отменноВот столько истории может быть много??? ))))))))
Вот столько истории может быть много??? ))))))))
Ну да, в вашем случае этот вариант исключается.
Попробуйте создавать и проверять объекты (ObjectFind(chartID, name)) по событию, а не по тику, к примеру при движении мыши по графику.
Ну да, в вашем случае этот вариант исключается.
Попробуйте создавать и проверять объекты (ObjectFind(chartID, name)) по событию, а не по тику, к примеру при движении мыши по графику.
Не поможет. На графике застывают котировки. В обзоре рынка по символу котировки "дышат" а на графике мёртво стоят.
Перенёс всё в OnTimer() каждые 5 секунд... не полегчало.
Не поможет. На графике застывают котировки. В обзоре рынка по символу котировки "дышат" а на графике мёртво стоят.
Перенёс всё в OnTimer() каждые 5 секунд... не полегчало.
Вот так тоже всё умирает?
//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- calculate(); /* long X, x, Y, y; //--- Y = long(fontSize*hs); X = corner == CORNER_RIGHT_UPPER || corner == CORNER_RIGHT_LOWER ? fontSize*8 : fontSize*14; x = corner == CORNER_RIGHT_UPPER || corner == CORNER_RIGHT_LOWER ? fontSize : X+fontSize*6; if(corner == CORNER_LEFT_UPPER || corner == CORNER_RIGHT_UPPER) { setLable("llltext", "Закрыто за ", color_, X, Y); for(int i = 0; i < 8; i++) { y = ((i+2)*Y); setLable("llllots"+(string)i, dts(lots[i]), color_, x, y); setLable("llltext"+(string)i, ssString[i], color_, X, y); } } else { setLable("llltext", "Закрыто за ", color_, X, Y*9); for(int i = 0; i < 8; i++) { y = ((6-i+2)*Y); setLable("llllots"+(string)i, dts(lots[i]), color_, x, y); setLable("llltext"+(string)i, ssString[i], color_, X, y); } }*/ //--- return value of prev_calculated for next call return(rates_total); }
Вот так тоже всё умирает?
Так не проверял, но профилировщик не врёт.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Alexey Viktorov, 2019.01.09 14:22
Профилировщик жалуется на строку
long chartID = ChartID(); if(ObjectFind(chartID, name) < 0)
и на ChartRedraw();
Убрал эти две строки и всё затикало как положено.
Видимо разработчикам надо обратить на это внимание.
Так не проверял, но профилировщик не врёт.
Убрал эти две строки и всё затикало как положено.
Видимо разработчикам надо обратить на это внимание.
Что именно убрали, ObjectFind и ChartRedraw?
Какая именно тупила, или обе?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Информация о терминале
В предыдущих билдах индикатор работал нормально, даже был выложен с открытым кодом на одном из ресурсов. Жалоб от пользователей не было. Но вот мне самому стало надо им воспользоваться и вдруг на билде 1986 получаю такую ошибку
После удаления индикатора с графика через достаточно длительное время запись из функции OnDeinit
Для проверки я решил опубликовать этот незамысловатый код в CodeBase и проверку прошёл безупречно.
Хотелось-бы услышать о возможных причинах возникновения этой ошибки.
Опубликованный код тут.