Теория ускорения работы советника при использовании пользовательского индикатора (функция - iCustom) - страница 5

 
Alexander Laur:
Вы можете описать задачу. Что должен делать скрипт со всеми барами? Я думаю, Вы пытаетесь решить задачу в лоб. Трудно что-либо советовать не видя задачи, которую нужно решить.

Скрипт у меня есть, тут ТЗ https://www.mql5.com/p/21/234411 , но при эксплуатации возникают сложности из-за нехватки памяти.... точней она заканчивается после непродолжительной работы скрипта.

 
Alexander Laur:
Страница запрещена. То что у Вас есть скрипт - прекрасно, но это не раскрывает задачу. Что делает скрипт?
Скрипт анализирует расположение индикатора относительно цены. Есть много критериев - цель подобрать оптимальные настройки для индикатора, при которых индикатор является зоной поддержки или сопротивления. Скрипт позволяет подключать любые индикаторы подобные скользящей средней и выполнять перебор параметров.
 
Alexander Laur:

Ренат Вам ответил, что способ один - перенос расчетной части индикатора в скрипт.

Это я понял, но это усложняет работу и увеличивает значительно мои расходы. Делает инструмент (скрипт) не универсальным.

Alexander Laur:
 

Можно еще заняться мазохизмом и разбить расчетный диапазон параметров на поддиапазоны. И запускать скрипт с изменением параметров в каждом поддиапазоне. Трудоемко, понимаю, а что делать?

Сейчас думаю, что решением может быть автоматизация процесса открытия скриптом чарта, расчет на нем части индикаторов, закрытие чарта скриптом и открытие нового чарта - это позволит отчищать память?

Alexander Laur:
 

Второй вариант - переходить на 5-ку. То есть поиск оптимальных параметров осуществлять на 5-ке и затем оптимальные параметры подставлять в 4-ые индикаторы. В 5-ке есть возможность управлять загрузкой и выгрузкой индикаторов. Но операции загрузки/выгрузки достаточно ресурсозатратные.

Лучше уж затратные операции, чем их отсутствие, да и памяти в пятерке можно использовать больше, как я понимаю, но мне нужны индикаторы написанные под четверку, так как и торгую я на четверке...

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

 
Alexander Laur:

Команду добавления индикатора на график не нашел. Удаляя график, Вы, конечно, будете освобождать память. Но с закрытием графика, закроются и все индикаторы на графике.

Открывать новые графики команда есть, а вот вешать индикатор, на этот вновь открытый график, команды нет. Поэтому реальной автоматизации и в этом случае тоже не получится.

А как же iCustom , через него же индикатор вызываем - равносильно добавлению графика - реально то график я и не кладу на чарт.
 
Alexander Laur:

Вызов индикатора через iCustom() это не добавления графика на чарт.

Если Вы график не кладете на чарт, то какой тогда график Вы собираетесь убивать  для того, чтобы освободить память?

Не тратьте время, поверьте Ренату.

Возможно я заблуждаюсь. Давайте ещё раз:

1. Есть скрипт, который вызывает функцией iCustom индикатор и сохраняет в памяти графические буфера.

2. Вызов функции iCustom многократен - итог забивка ОЗУ и возврат нулей от индикатора.

3. Терминал должен же уметь работать с памятью? Чистить кэш, как я понимаю, возможно если данные не нужны, а не нужны они если чарт с данными удален.

4. Удаляем чарт и высвобождаем ОЗУ для дальнейших расчетов в пункте 1.

Где я ошибаюсь?


P.S. Как я понимаю, данные привязаны все к чарту на котором ведется расчет - не важно какие для этого используются котировки.

 
-Aleks-:

Возможно я заблуждаюсь. Давайте ещё раз:

1. Есть скрипт, который вызывает функцией iCustom индикатор и сохраняет в памяти графические буфера.

2. Вызов функции iCustom многократен - итог забивка ОЗУ и возврат нулей от индикатора.

3. Терминал должен же уметь работать с памятью? Чистить кэш, как я понимаю, возможно если данные не нужны, а не нужны они если чарт с данными удален.

4. Удаляем чарт и высвобождаем ОЗУ для дальнейших расчетов в пункте 1.

Где я ошибаюсь?


P.S. Как я понимаю, данные привязаны все к чарту на котором ведется расчет - не важно какие для этого используются котировки.

В пункте 3.

Терминал хранит кэш таймсерий и построенных по ним индикаторов какое-то время после закрытия, чтоб при повторном обращении не пересчитывать все сразу. 

 
Andrey Khatimlianskii:

В пункте 3.

Терминал хранит кэш таймсерий и построенных по ним индикаторов какое-то время после закрытия, чтоб при повторном обращении не пересчитывать все сразу. 

А вот какое это "какое-то" время? Может есть ещё критерии/способы высвобождения ресурсов (удаление кэша из памяти)?
 
-Aleks-:
А вот какое это "какое-то" время? Может есть ещё критерии/способы высвобождения ресурсов (удаление кэша из памяти)?

Нет, Ренат уже ответил.

В МТ5 кэш чистится, если выгружается эксперт, который использует индикаторы, как ресурсы. Т.е. можно загружать график с экспертом, считать часть, и закрывать график. Но это все равно не очень быстро.

В МТ4 не знаю. 

 
Andrey Khatimlianskii:

Нет, Ренат уже ответил.

В МТ5 кэш чистится, если выгружается эксперт, который использует индикаторы, как ресурсы. Т.е. можно загружать график с экспертом, считать часть, и закрывать график. Но это все равно не очень быстро.

В МТ4 не знаю. 

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

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

 
Вот такой эксперемент
1. Открываю чарт и "Диспетчер задач" - занято памяти 215692 кб
2. Наношу индикатор  - занято памяти 219612 кб (увеличение 3920 кб)
3. Удаляю индикатор  - занято памяти 217984 кб (высвобождено 1628 кб)
А остаток не высвободившейся памяти 2292 кб, как я понимаю, ушел в кэш?
Не слишком ли много данных занимает буфер - история с февраля 2013 года на часовике.
Причина обращения: