Как уменьшить прожорливость хендла индикатора? - страница 2

 
Renat Fatkhullin:

В четверке аналогично буфера индикаторов под всю историю чарта выделялись.

Кроме того, затраты памяти (особенно в экспертах) в четверке были чрезмерными из-за множества прозрачно создаваемых копий данных. Ее спасало только то, что данных обычно было мало.

С таким подходом нельзя было переходить к системе, которая должна оперировать почти бесконечными историческими данными. Поэтому пятерку и пришлось написать с нуля. Получилось очень эффективно.


Вы всю прекрасную идею с использованием CopyBuffer просто перечеркнули тем, что завязались на глобальную переменную Макс_баров_в_окне. Вот эксперт запрашивает допустим только один последний бар(кстати очень частая функция). Но если переменная пользователя Макс_баров_в_окне выставлена в очень большое значение, то, в сам терминал будет загружена вся история, а эксперту будет выдан только последний бар. У меня в тестовом скрипте 6 символов * 21 таймфрейм отъедало 13 Гбайт оперативки при Макс_баров_в_окне > 1 000 000.

Предлагаю подумать над тем, что бы отвязать от этой переменной хотя бы индикаторы и эксперты, а еще лучше будет если вы ее совсем уберете. Ведь если пользователь скролит график налево, значит ему нужны дополнительные данные, которые можно подгружать динамически. А если он график не скролит, значит они ему не нужны. 

 
Andrey Khatimlianskii:

Это не работает для индикаторов. При создании хендла автоматом ресайзятся все буферы под кол-во баров в окне, и это невозможно изменить.

В четверке такого не было, память выделялась под рассчитываемую часть.

повторюсь:  

в 4-ке  нельзя было  качнуть в память  ограниченное количество баров

в MQL5 это возможно сильно экономится память и очень хорошо с быстродействием.


Renat Fatkhullin:

В четверке аналогично буфера индикаторов под всю историю чарта выделялись.

Кроме того, затраты памяти (особенно в экспертах) в четверке были чрезмерными из-за множества прозрачно создаваемых копий данных. Ее спасало только то, что данных обычно было мало.

С таким подходом нельзя было переходить к системе, которая должна оперировать почти бесконечными историческими данными. Поэтому пятерку и пришлось написать с нуля. Получилось очень эффективно.

 
Yuriy Zaytsev:

Можно неплохо экономить память задавая в функции количество читаемых баров.
Mql5
Юрий, Вы явно не в теме обсуждаемой проблематики. Что такое CopyBuffer здесь все очень хорошо знают.
 
Vasiliy Sokolov:


Вы всю прекрасную идею с использованием CopyBuffer просто перечеркнули тем, что завязались на глобальную переменную Макс_баров_в_окне. Вот эксперт запрашивает допустим только один последний бар(кстати очень частая функция). Но если переменная пользователя Макс_баров_в_окне выставлена в очень большое значение, то, в сам терминал будет загружена вся история, а эксперту будет выдан только последний бар. У меня в тестовом скрипте 6 символов * 21 таймфрейм отъедало 13 Гбайт оперативки при Макс_баров_в_окне > 1 000 000.

Предлагаю подумать над тем, что бы отвязать от этой переменной хотя бы индикаторы и эксперты, а еще лучше будет если вы ее совсем уберете. Ведь если пользователь скролит график налево, значит ему нужны дополнительные данные, которые можно подгружать динамически. А если он график не скролит, значит они ему не нужны. 

Над этим подумаем.

Спасибо!

 
Vasiliy Sokolov:
Юрий, Вы явно не в теме обсуждаемой проблематики. Что такое CopyBuffer здесь все очень хорошо знают.
Да,  вероятно, оперирую тем - что прочитал когда то.
 
Renat Fatkhullin:

Над этим подумаем.

Спасибо!

:)

Добавлю только что общался c Andrey Khatimlianskii одним из разработчиков вот этой хорошо известной панели:


И в общем у них есть определенные трудности с выделением памяти. Как видно на графике, панель работает на краю от комбинаторного взрыва. Поэтому приходится делать дополнительные описания для пользователей (которые естественно мало кто читает:) :

Подготовка платформы МetaТrader 5 к работе

При первом подключении советник автоматически загружает всю имеющуюся на сервере историю котировок. При большом количестве торговых инструментов, отображенных в "Обзоре рынка", это может занять несколько минут. Для ускорения процесса загрузки необходимо в настройках терминала нажать клавиши (Ctrl + O) и в закладке "Графики" установить разумное значение параметра "Максимум баров в окне". Учтите, что каждый используемый инструмент и тайм-фрейм потребляют оперативную память. Каждый наложенный на график индикатор будет потреблять еще в несколько раз больше памяти.

При переключении между графиками, МetaТrader 5 ресурсы не освобождает. Это сделано для быстрого возврата к использованным ранее данным. Поэтому при работе с большим количеством инструментов, тайм фреймов и индикаторов терминал может тормозить. Если вы используете тайм-фрейм D1 и выше, больше 5000 баров вам не понадобится. Установите указанное значение в настройках и перезагрузите терминал. В закладке "Эксперты" в окошке "Разрешить автоторговлю" следует поставить галочку. Кроме того, рекомендуется в МetaТrader 5 настроить почтовую службу. Тогда вы будете получать торговые сигналы на свою электронную почту в реальном режиме времени от эксперта, установленного на выделенном сервере. Необходимо залогиниться в сообщество MQL5, тогда у вас будет возможность бесплатно получать обновления программных продуктов непосредственно в терминале МetaТrader 5.

Все это порождает  определенные трудности для конечных пользователей. А в коммерческой разработке эта не та ситуация с которой нужно просто смериться.
 
Уже в плане работ стоит.
 
Renat Fatkhullin:

В четверке аналогично буфера индикаторов под всю историю чарта выделялись.

Ренат, я уже не помню, а воспроизводить сейчас нет времени.

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

Возможно, потребление памяти было ниже за счет построения только нужного ТФ, а не всей истории М1 за анализируемый период. Но, повторюсь, воспроизводить сейчас не готов. Так что можно списать на плохую память.

 
Vasiliy Sokolov:

:)

Добавлю только что общался c Andrey Khatimlianskii одним из разработчиков вот этой хорошо известной панели:

И в общем у них есть определенные трудности с выделением памяти. Как видно на графике, панель работает на краю от комбинаторного взрыва. Поэтому приходится делать дополнительные описания для пользователей (которые естественно мало кто читает:) :

Все это порождает  определенные трудности для конечных пользователей. А в коммерческой разработке эта не та ситуация с которой нужно просто смериться.
Там даже само-ликвидация была при неправильных настройках.
Потому что панель могла убить любую систему, отъев всю оперативку и перебросившись на файл подкачки. Мои 16 Гб умирали за считанные секунды ;)
 
Renat Fatkhullin:
Уже в плане работ стоит.

А вот это очень радует. Еще бы с индикаторными буферами что-то придумать — и панель бы зажила новой жизнью.

Спасибо!