Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот здесь вылетает ошибка, если сделать больше одного буфера
array out of range in 'Indicator.mqh' (156,20)
UPD: добавил в начале функции строчку и проблема решилась.
ArrayResize(ar_IndBuffers,m_buffers,m_buffers);
Еще раз огромное спасибо за статью, всё получилось! Самое интересное, что в таком исполнении работает быстрее. Мой стрелочный индикатор использует запрос тиков через функции CopyTicksRange и CopyTicks, что вызывало массу глюков и приводило зачастую к неверным данным. Через class всё работает как часы. Связываю это с тем, что CopyTicksRange и CopyTicks в индикаторах работают несколько иначе, система не дает им время на синхронизацию.
ps. кто будет переносить стрелочные индикаторы с несколькими буферами, учтите, требуются правки функций Indicator.mqh
ну и метод записи и получения данных из индикаторных буферов ar_IndBuffers для стрелочника другой
Решил поделиться доработанным под себя Indicator.mqh, может кому сэкономит время при переводе индикатора в класс.
Спасибо за статью! Изучаю для ухода от нестабильных обычных индикаторов.
Но мне важна возможность визуализации индикаторов на графике. Кто-нибудь реализовавал?
Опубликована статья Как перенести расчетную часть любого индикатора в код эксперта:
Автор: Dmitriy Gizlyk
А зачем вообще переносить расчеты из индикатора в советник?
Очень многие используют индикаторы вовсе без советника.
Можно просто разбить расчеты на этапы.
Например так:
А зачем вообще переносить расчеты из индикатора в советник?
Очень многие используют индикаторы вовсе без советника.
Можно просто разбить расчеты на этапы.
Например так:
Из-за того, что штатный механизм индикаторов работает через пень-колоду, например: https://www.mql5.com/ru/forum/372612 и это обусловлено их реализацией.
С ростом сложности индикаторов мой советник "увяз в болоте". В тестере я словил еще много других багов в работе индикаторов, но не стал их описывать, т.к. бесполезно.
Я не понял вашу идею.
Из-за того, что штатный механизм индикаторов работает через пень-колоду, например: https://www.mql5.com/ru/forum/372612 и это обусловлено их реализацией.
С ростом сложности индикаторов мой советник "увяз в болоте". В тестере я словил еще много других багов в работе индикаторов, но не стал их описывать, т.к. бесполезно.
Я не понял вашу идею.
Начнем с того, что у Вас не совсем корректный код.
Я бы написал так:
Далее, т.к функции в индикаторах должны выполняться с минимальными задержками, то сложные процессы (загрузка истории, сложные расчеты и т.п)
разбиваются на несколько частей, возвращая в
OnCalculate
нулевое значение (return(0) ), т.е индикатор находится в начальной стадии, пока мы не выполним все необходимые нам действия с минимальными задержками в каждой стадии.
В архитектуре MetaTrader 5 организован асинхронный доступ к значениям индикаторов. Иными словами, при получении хэндла индикатора он прикрепляется к графику. Далее этот индикатор производит свои расчеты вне потока советника. Они взаимодействуют лишь на этапе передачи данных, аналогично получению данных тайм-серий. Поэтому и время на выполнение этих операций сопоставимо.
То есть получается в реале все же icustom будет быстрее?! -Ведь в реальности так и будет. Эксперт в одном треде, индикатор в другом (и может даже на разных ядрах). Это только если из засунуть в последовательную обработку получается медленнее - но это ведь только искуственное ограничение из-за тестера стратегий
Из статьи я не понял, есть ли у класса-индикатора защита от пропущенных баров? К примеру произошел разрыв связи на 5 баров, а потом дальше история загрузилась, класс-индикатор перезаполнит только последнее значение в буере или сделает полный перерасчет?
Если посмотреть в стандартный класс-индикатора, то при обновлении данных он использует функцию CopyBuffer. Т.е. заполняет весь буфер из истории терминала, а не какую-то часть.