Скачать MetaTrader 5

indicator is too slow

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Используй MQL5 Cloud Network. Это безопасно!
Vladimir Karputov
Модератор
46185
Vladimir Karputov 2015.04.17 08:34 

Индикатор не имеет индикаторных буферов:

#property indicator_plots               0
#property indicator_buffers             0

и ничего не считает в OnCalculate():

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//--- return value of prev_calculated for next call
   return(rates_total);
  }


Это индикатор отображает панель диалога. Тем не менее периодически получаю ошибку "too slow" и индикатор после этого останавливается.

В индикаторе есть приём пользовательских событий - и отрисовка объектов. События могут приходить и пачками за одну секунду, а может быть интервал до нескольких секунд.

Dmitriy Parfenovich
7718
Dmitriy Parfenovich 2015.04.17 08:38  
barabashkakvn:

Индикатор не имеет индикаторных буферов:

и ничего не считает в OnCalculate():

nn

Нужно больше информации, телепаты в отпуске :)

Может там таймер есть? 

Vladimir Karputov
Модератор
46185
Vladimir Karputov 2015.04.17 08:44  
fyords:

Нужно больше информации, телепаты в отпуске :)

Может там таймер есть? 

В индикаторе нет никаких ресурсоёмких расчётов. Пришло событие - нарисовали кружочек.
Dmitriy Parfenovich
7718
Dmitriy Parfenovich 2015.04.17 08:45  
barabashkakvn: 

...В индикаторе есть приём пользовательских событий - и отрисовка объектов. События могут приходить и пачками за одну секунду, а может быть интервал до нескольких секунд. 

Возможно очередь событий переполняется, отсюда и ошибка.
Может нужно дополнительные проверки делать?
Возможно очень часто перерисовываются объекты.
Dmitriy Parfenovich
7718
Dmitriy Parfenovich 2015.04.17 08:47  
barabashkakvn:
В индикаторе нет никаких ресурсоёмких расчётов. Пришло событие - нарисовали кружочек.

Ну если на ОнМаусМов повесить рисование кружочков, то возможно будет такая проблема.

На сколько помню, у индикатора один поток, и рисование происходит в этом потоке тоже. 

Vladimir Karputov
Модератор
46185
Vladimir Karputov 2015.04.17 08:50  
fyords:
Возможно очередь событий переполняется, отсюда и ошибка.
Может нужно дополнительные проверки делать?
Возможно очень часто перерисовываются объекты.
Если очередь переполнится, то просто не нарисуется чего-то там. А рисуется всегда - я это вижу, значит очередь событий обрабатывается.
MetaQuotes
Админ
24952
Renat Fatkhullin 2015.04.17 13:55  
Сколько обьектов читается/пишется/модифицируется/перемещается на каждом тике?

Есть ли защита от попыток бесполезного изменения позиций/статусов/итд, если позиция не изменилось?

Учтите, что очередь сообщений(все чтения и запись идут через очередь с блокировками) обьектов тесно связана с чартом и запросто может тормозить, если обьем изменений огромен или компьютер слаб.

Как идет работа с обьектами? Смешано ли чтение с записью? Если идет массовый режим читаю/пишу по каждому обьекту, то очередь будет постоянно синхронизироваться, ожидая сброса команд записи, что в разы увеличит задержки. Лучше всего массово читать (если обьектов очень много), а потом писать.
Vladimir Karputov
Модератор
46185
Vladimir Karputov 2015.04.17 17:14  
Renat:
Сколько обьектов читается/пишется/модифицируется/перемещается на каждом тике?

Есть ли защита от попыток бесполезного изменения позиций/статусов/итд, если позиция не изменилось?

Учтите, что очередь сообщений(все чтения и запись идут через очередь с блокировками) обьектов тесно связана с чартом и запросто может тормозить, если обьем изменений огромен или компьютер слаб.

Как идет работа с обьектами? Смешано ли чтение с записью? Если идет массовый режим читаю/пишу по каждому обьекту, то очередь будет постоянно синхронизироваться, ожидая сброса команд записи, что в разы увеличит задержки. Лучше всего массово читать (если обьектов очень много), а потом писать.
Упростил до невозможности индикатор (нет ни индикаторных буферов, ни построений, ни рисований на графике) - только с приходом тиков отсылаю пользовательские события. Один раз словил "... too slow..". Продолжаю наблюдение...
Andrey Khatimlianskii
56203
Andrey Khatimlianskii 2015.04.18 15:44  

Индикатор при получении события сам генерирует новые события (создает/меняет объекты), и тут же их обрабатывает, это замкнутый круг.

На время отрисовки нужно отключать прием других событий (я делал это с помощью простого флага). 

Vladimir Karputov
Модератор
46185
Vladimir Karputov 2015.04.18 16:09  
komposter:

Индикатор при получении события сам генерирует новые события (создает/меняет объекты), и тут же их обрабатывает, это замкнутый круг.

На время отрисовки нужно отключать прием других событий (я делал это с помощью простого флага). 

Нет. Я упростил. Индикатор теперь вообще ничего не рисует. Только отсылает события и свои события он не обрабатывает. На выходных, к сожалению, ничего не проверить.
Alexey Busygin
6437
Alexey Busygin 2015.04.19 20:38  
barabashkakvn:

Индикатор не имеет индикаторных буферов:

и ничего не считает в OnCalculate():


Это индикатор отображает панель диалога. Тем не менее периодически получаю ошибку "too slow" и индикатор после этого останавливается.

В индикаторе есть приём пользовательских событий - и отрисовка объектов. События могут приходить и пачками за одну секунду, а может быть интервал до нескольких секунд.

Ну а чего вы хотите от такого индикатора?
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий