- Основные характеристики индикаторов
- Главное событие индикаторов: OnCalculate
- Два типа индикаторов: для главного и отдельного окна
- Настройка количества буферов и графических построений
- Назначение массива в качестве буфера: SetIndexBuffer
- Настройка графических построений: PlotIndexSetInteger
- Правила сопоставления буферов и диаграмм
- Применение директив для настройки графических построений
- Установка названий для графических построений
- Визуализация пропусков данных (пустых элементов)
- Индикаторы с собственным подокном: размер и уровни
- Общие свойства индикаторов: заголовок и точность значений
- Поэлементное раскрашивание диаграмм
- Пропуск отрисовки на начальных барах
- Ожидание данных и управление видимостью (DRAW_NONE)
- Мультивалютные и мультитаймфреймовые индикаторы
- Отслеживание формирования баров
- Тестирование индикаторов
- Ограничения и преимущества индикаторов
- Создание заготовки индикатора в Мастере MQL
Ограничения и преимущества индикаторов
Все специализированные функции, рассмотренные в данной главе, доступны только в исходных кодах индикаторов. Использовать их в других типах MQL-программ не имеет смысла: они вернут ошибку.
С другой стороны существует целый ряд функций, запрещенных в индикаторах.
- OrderCalcMargin
- OrderCalcProfit
- OrderCheck
- OrderSend
- SendFTP
- WebRequest
- Socket***
- Sleep
- MessageBox
- ExpertRemove
Часть из них (с префиксом Order-) относится к торговым расчетам и разрешена только в экспертах и скриптах, часть предназначена для выполнения запросов в сети, которые блокируют выполнение потока до возвращения результата, а это недопустимо для индикаторов, потому что они выполняются в интерфейсном потоке терминала. По аналогичной причине запрещены функции Sleep и MessageBox.
В принципе, следует учитывать, что индикаторы в первую очередь отвечают за визуализацию данных и, как это ни странно, не подходят для массированных вычислений. В частности, если вы решите создать индикатор, обучающий в процессе работы нейронную сеть или дерево решений, это, скорее всего, отрицательно скажется на нормальном функционировании терминала.
Эффект длительного расчета демонстрируется индикатором IndBarIndex.mq5, который в штатном режиме предназначен для отображения в элементах своего буфера порядковых номеров баров. Однако с помощью входного параметра SimulateCalculation, который следует установить в true, можно по таймеру запустить бесконечный цикл.
// установка в true заморозит рисование индикаторов
|
В таком режиме индикатор ожидаемо начинает целиком занимать 1 ядро процессора, однако проявляется и другой побочный эффект. Любые индикаторы на том же символе, на котором размещен IndBarIndex, перестают обновляться. Вы можете, например, применить IndBarIndex на EURUSD (любого таймфрейма), а потом на любом другом графике EURUSD попробовать применить обычную скользящую среднюю: она не отобразится, пока вы не удалите индикатор IndBarIndex с первого графика.
В связи с этим все длительные расчеты следует выносить в отдельные потоки, то есть скрипты или неторгующие эксперты, а в индикаторах только пользоваться их результатами. MQL5 API позволяет создавать новые графики или объекты с графиками, в которых можно применять tpl-шаблоны с требуемым экспертом или скриптом.