Теория ускорения работы советника при использовании пользовательского индикатора (функция - iCustom) - страница 5
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы можете описать задачу. Что должен делать скрипт со всеми барами? Я думаю, Вы пытаетесь решить задачу в лоб. Трудно что-либо советовать не видя задачи, которую нужно решить.
Скрипт у меня есть, тут ТЗ https://www.mql5.com/p/21/234411 , но при эксплуатации возникают сложности из-за нехватки памяти.... точней она заканчивается после непродолжительной работы скрипта.
Страница запрещена. То что у Вас есть скрипт - прекрасно, но это не раскрывает задачу. Что делает скрипт?
Ренат Вам ответил, что способ один - перенос расчетной части индикатора в скрипт.
Это я понял, но это усложняет работу и увеличивает значительно мои расходы. Делает инструмент (скрипт) не универсальным.
Можно еще заняться мазохизмом и разбить расчетный диапазон параметров на поддиапазоны. И запускать скрипт с изменением параметров в каждом поддиапазоне. Трудоемко, понимаю, а что делать?
Сейчас думаю, что решением может быть автоматизация процесса открытия скриптом чарта, расчет на нем части индикаторов, закрытие чарта скриптом и открытие нового чарта - это позволит отчищать память?
Второй вариант - переходить на 5-ку. То есть поиск оптимальных параметров осуществлять на 5-ке и затем оптимальные параметры подставлять в 4-ые индикаторы. В 5-ке есть возможность управлять загрузкой и выгрузкой индикаторов. Но операции загрузки/выгрузки достаточно ресурсозатратные.
Лучше уж затратные операции, чем их отсутствие, да и памяти в пятерке можно использовать больше, как я понимаю, но мне нужны индикаторы написанные под четверку, так как и торгую я на четверке...
Универсального механизма конвертации индикатора в пятерку мне не известно, хотя можно было бы разработчикам МТ сделать индикаторы совместимыми между собой, хоть после компиляции...
Команду добавления индикатора на график не нашел. Удаляя график, Вы, конечно, будете освобождать память. Но с закрытием графика, закроются и все индикаторы на графике.
Открывать новые графики команда есть, а вот вешать индикатор, на этот вновь открытый график, команды нет. Поэтому реальной автоматизации и в этом случае тоже не получится.
Вызов индикатора через iCustom() это не добавления графика на чарт.
Если Вы график не кладете на чарт, то какой тогда график Вы собираетесь убивать для того, чтобы освободить память?
Не тратьте время, поверьте Ренату.
Возможно я заблуждаюсь. Давайте ещё раз:
1. Есть скрипт, который вызывает функцией iCustom индикатор и сохраняет в памяти графические буфера.
2. Вызов функции iCustom многократен - итог забивка ОЗУ и возврат нулей от индикатора.
3. Терминал должен же уметь работать с памятью? Чистить кэш, как я понимаю, возможно если данные не нужны, а не нужны они если чарт с данными удален.
4. Удаляем чарт и высвобождаем ОЗУ для дальнейших расчетов в пункте 1.
Где я ошибаюсь?
P.S. Как я понимаю, данные привязаны все к чарту на котором ведется расчет - не важно какие для этого используются котировки.
Возможно я заблуждаюсь. Давайте ещё раз:
1. Есть скрипт, который вызывает функцией iCustom индикатор и сохраняет в памяти графические буфера.
2. Вызов функции iCustom многократен - итог забивка ОЗУ и возврат нулей от индикатора.
3. Терминал должен же уметь работать с памятью? Чистить кэш, как я понимаю, возможно если данные не нужны, а не нужны они если чарт с данными удален.
4. Удаляем чарт и высвобождаем ОЗУ для дальнейших расчетов в пункте 1.
Где я ошибаюсь?
P.S. Как я понимаю, данные привязаны все к чарту на котором ведется расчет - не важно какие для этого используются котировки.
В пункте 3.
Терминал хранит кэш таймсерий и построенных по ним индикаторов какое-то время после закрытия, чтоб при повторном обращении не пересчитывать все сразу.
В пункте 3.
Терминал хранит кэш таймсерий и построенных по ним индикаторов какое-то время после закрытия, чтоб при повторном обращении не пересчитывать все сразу.
А вот какое это "какое-то" время? Может есть ещё критерии/способы высвобождения ресурсов (удаление кэша из памяти)?
Нет, Ренат уже ответил.
В МТ5 кэш чистится, если выгружается эксперт, который использует индикаторы, как ресурсы. Т.е. можно загружать график с экспертом, считать часть, и закрывать график. Но это все равно не очень быстро.
В МТ4 не знаю.
Нет, Ренат уже ответил.
В МТ5 кэш чистится, если выгружается эксперт, который использует индикаторы, как ресурсы. Т.е. можно загружать график с экспертом, считать часть, и закрывать график. Но это все равно не очень быстро.
В МТ4 не знаю.
После работы скрипта память высвобождается - факт. Значит память для обсчета данных, полученных из индикатора, высвобождается, но это не касается именно графических буферов, верно?
А если транслировать данные не через графический буфер, а как то иначе - через глобальные переменные, допустим (не знаю, можно ли буфер там создавать), то эффект нехватки памяти можно будет побороть?
1. Открываю чарт и "Диспетчер задач" - занято памяти 215692 кб
2. Наношу индикатор - занято памяти 219612 кб (увеличение 3920 кб)
3. Удаляю индикатор - занято памяти 217984 кб (высвобождено 1628 кб)
А остаток не высвободившейся памяти 2292 кб, как я понимаю, ушел в кэш?
Не слишком ли много данных занимает буфер - история с февраля 2013 года на часовике.