Добавить к математическим функциям еще некоторые MQL-функции и можно делать критерий Оптимизации в виде input string.
Либо задавать название файла с исходником функции OnTester. Парсер-интерпретатор будет вычислять.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Опубликована статья Вычисление математических выражений (Часть 1). Парсеры рекурсивного спуска:
В статье рассматриваются базовые принципы разбора и вычисления математических выражений, реализованы парсеры рекурсивного спуска, работающие в режимах интерпретатора и быстрых расчетов на основе предварительно построенного синтаксического дерева.
При автоматизации торговых задач иногда требуется обеспечить гибкость вычислительных алгоритмов на стадии их выполнения. Так, например, для тонкой настройки программ, распространяемых в закрытом (откомпилированном) виде, можно организовать подбор вида целевой функции из широкого набора возможных комбинаций. В частности, при оптимизации эксперта или быстрой оценке прототипа индикатора. Тогда в диалоге свойств пользователю доступно изменение не только параметров, но и расчетной формулы. В этих случаях требуется вычислить арифметическое выражение по его текстовому представлению без изменения MQL-кода программы.
Для решения этой задачи применяются парсеры различных типов, позволяющие выполнять интерпретацию формул на лету, их "компиляцию" в синтаксическое дерево, генерацию так называемого байт-кода (последовательности вычислительных инструкций), и его последующее исполнение для расчета результата. В данной статье мы рассмотрим несколько типов парсеров и способов вычисления выражений.
Постановка задачи
Под арифметическим выражением будем понимать однострочную последовательность элементов данных и операторов, описывающих действия над ними. Элементами данных у нас будут числа и именованные переменные. Значения переменных можно будет назначать и менять извне, то есть не в выражении, а с помощью специальных атрибутов парсера. Иными словами, оператор присваивания ('=') для сохранения промежуточных результатов не предусмотрен. Список поддерживаемых операторов в порядке их приоритета в вычислениях таков:
Кроме того, разрешим использовать в выражениях стандартные математические функции MQL, всего их — 25. Среди них, в частности, имеется и функция pow для возведения в степень. По этой причине в списке операторов отсутствует оператор возведения в степень ('^'). Кроме того, оператор '^' позволяет возводить только в целую степень, а функция таких ограничений не имеет. Есть и еще один нюанс, отличающий оператор '^' от остальных рассмотренных.
Автор: Stanislav Korotky