Теория ускорения работы советника при использовании пользовательского индикатора (функция - iCustom) - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А если индикатор 5-тибуферный, то первый же вызов iCustom рассчитает все буферы, последующие вызовы и запросы других буферов будут только читать готовую информацию (вплоть до появления новых данных для расчета).
Т.е. если индикатор хоть раз вызывался программой, то она получила информацию не только о запрашиваемом буфере, но и о всех, входящих в индикатор? Или речь о том, что расчет других буферов будет найден в памяти и за счет этого не будет происходить перерасчет - данные подтянутся из ОЗУ, если даже явно не были ранее вызваны программой (программа (советник) не выделяла память явно для хранения данных с индикатора). Раньше читал, что при каждом обращении к индикатору происходит его перерасчет - выходит дело это не так?
Если у вас реально тяжелый индикатор, придумайте свою систему кэша, чтоб при первом прогоне данные рассчитывались и записывались в файл, а при псоледующих - только читались. Я так делал, получается сильно быстрее.
Но в 95% случаев в этом всем нет необходимости, тестер и так достаточно быстрый, а в 5-ке можно еще и облако подключить.
Удачи!
Разве чтение с винчестера будет быстрей, или вы делали виртуальный диск в памяти с рассчитанными данными индикатора?
Ну а пятерка мне только снится, пока только реализую идеи под заказ на четверке.
Спасибо за пожелание удачи!
Если у вас реально тяжелый индикатор, придумайте свою систему кэша, чтоб при первом прогоне данные рассчитывались и записывались в файл, а при псоледующих - только читались. Я так делал, получается сильно быстрее.
Но в 95% случаев в этом всем нет необходимости, тестер и так достаточно быстрый, а в 5-ке можно еще и облако подключить.
Удачи!
Т.е. если индикатор хоть раз вызывался программой, то она получила информацию не только о запрашиваемом буфере, но и о всех, входящих в индикатор? Или речь о том, что расчет других буферов будет найден в памяти и за счет этого не будет происходить перерасчет - данные подтянутся из ОЗУ, если даже явно не были ранее вызваны программой (программа (советник) не выделяла память явно для хранения данных с индикатора). Раньше читал, что при каждом обращении к индикатору происходит его перерасчет - выходит дело это не так?
Индикатор не может рассчитать только один буфер, он при любом вызове считает все, что у него внутри. Разве что параметрами можно ограничить расчеты, но это другая тема.
Перерасчет происходит при каждом вызове, но пересчитывается обычно только 0-й бар. А если еще и советник написан грамотно, то и вызовы эти происходят не на каждом тике.
Разве чтение с винчестера будет быстрей, или вы делали виртуальный диск в памяти с рассчитанными данными индикатора?
Читал с обычного диска, только не значения индикатора на каждом баре а строку "время;сигнал", таких данных намного меньше надо.
Вряд ли есть универсальное решение для любого индикатора, нужно отталкиваться от глобальной задачи.
Ну а пятерка мне только снится, пока только реализую идеи под заказ на четверке.
А это зря, сейчас можно писать код для обоих платформ в одном файле, различия только в торговой части и в работе с тайм-сериями (в т.ч. индикаторами).
А клауд - это действительно мощная штука.
Не про индикатор, а про советник, но тема близкая. У меня скальпер довольно много считает, всякие фильтры, преобразования. Я для модели в Матлабе сразу сделал такой кеш, сначала считалась вся математика и скидывалась в .mat файл, а потом уже по этим данным прогонялась стратегия. Вот сейчас руки чешутся сделать то же для тестера MQL4, а то оптимизацию проводить просто нереально.
Вряд ли есть смысл в кэше под отдельный индикатор, я тоже отталкивался именно от данных, необходимых в советнике.
Грубо говоря, записывались готовые сигналы, а потом только читались и осуществлялись входы и сопровождение позиции.
Индикатор не может рассчитать только один буфер, он при любом вызове считает все, что у него внутри. Разве что параметрами можно ограничить расчеты, но это другая тема.
Перерасчет происходит при каждом вызове, но пересчитывается обычно только 0-й бар. А если еще и советник написан грамотно, то и вызовы эти происходят не на каждом тике.
Так в итоге получается, что если обращаться к одному индикатору, в котором много буферов и получать информацию из одного из них обо всех, то это будет быстрей и экономичней по памяти, чем рассчитывать столько же раз этот индикатор, сколько требуется информации с разных его буферов?
И всё же, может кто-то проведет эксперимент, а то идея меня не отпускает!? Или исследование инноваций интересно только за вознаграждение?
Так в итоге получается, что если обращаться к одному индикатору, в котором много буферов и получать информацию из одного из них обо всех, то это будет быстрей и экономичней по памяти, чем рассчитывать столько же раз этот индикатор, сколько требуется информации с разных его буферов?
1 индикатор на 5 буферов или 5 индикаторов на 1 буфер - примерно то же самое.
Если нужна информация только из 2-х буферов, будет выгоднее вызывать 2 индикатора с 1 буфером, чем один индикатор с 5 буферами. Но не выгоднее, чем один индикатор с 2 буферами.
И всё же, может кто-то проведет эксперимент, а то идея меня не отпускает!? Или исследование инноваций интересно только за вознаграждение?
komposter:
Такой подход уменьшит потребление индикатором памяти (примерно кратно разнице в кол-ве буферов до и после), но увеличит нагрузку на процессор (и "сборку" и "разложение" надо постоянно делать).
Если не упираетесь в лимит памяти (а это вряд ли с текущими объемами), будет только замедление.
Ощущение такое, что меня не понимают! :)
Но я понимаю, что вероятней всего это я не понимаю.
Допустим в коде вызываем пользовательский индикатор - нам необходимо указать буфер этого индикатора, потом далее по коду опять вызываем пользовательский индикатор с тем же именем, что и в первый раз, но с другим буфером.
Вопрос: индикатор будет рассчитан два раза или только один раз?
...
Вопрос индикатор будет рассчитан два раза или только один раз?
Один раз.