Все специализированные функции, рассмотренные в данной главе, доступны только в исходных кодах индикаторов. Использовать их в других типах MQL-программ не имеет смысла: они вернут ошибку.
С другой стороны существует целый ряд функций, запрещенных в индикаторах.
Часть из них (с префиксом Order-) относится к торговым расчетам и разрешена только в экспертах и скриптах, часть предназначена для выполнения запросов в сети, которые блокируют выполнение потока до возвращения результата, а это недопустимо для индикаторов, потому что они выполняются в интерфейсном потоке терминала. По аналогичной причине запрещены функции Sleep и MessageBox.
В принципе, следует учитывать, что индикаторы в первую очередь отвечают за визуализацию данных и, как это ни странно, не подходят для массированных вычислений. В частности, если вы решите создать индикатор, обучающий в процессе работы нейронную сеть или дерево решений, это, скорее всего, отрицательно скажется на нормальном функционировании терминала.
Эффект длительного расчета демонстрируется индикатором IndBarIndex.mq5, который в штатном режиме предназначен для отображения в элементах своего буфера порядковых номеров баров. Однако с помощью входного параметра SimulateCalculation, который следует установить в true, можно по таймеру запустить бесконечный цикл.
// установка в true заморозит рисование индикаторов
|
В таком режиме индикатор ожидаемо начинает целиком занимать 1 ядро процессора, однако проявляется и другой побочный эффект. Любые индикаторы на том же символе, на котором размещен IndBarIndex, перестают обновляться. Вы можете, например, применить IndBarIndex на EURUSD (любого таймфрейма), а потом на любом другом графике EURUSD попробовать применить обычную скользящую среднюю: она не отобразится, пока вы не удалите индикатор IndBarIndex с первого графика.
В связи с этим все длительные расчеты следует выносить в отдельные потоки, то есть скрипты или неторгующие эксперты, а в индикаторах только пользоваться их результатами. MQL5 API позволяет создавать новые графики или объекты с графиками, в которых можно применять tpl-шаблоны с требуемым экспертом или скриптом.