Математические вычисления

Тестер в терминале MetaTrader 5 можно использовать не только для проверки торговых стратегий, но и для математических расчётов. Для этого необходимо выбрать соответствующий режим в настройках тестера, в выпадающем списке Моделирование. Это тот же список, где мы выбираем способ генерации тиков, но в данном случае тестер не станет генерировать ни тики, ни котировки, ни даже подключать торговое окружение (торговый счет и символы).

Выбор между полным перебором параметров и генетическим алгоритмом делайте в зависимости от размера пространства поиска. Критерий оптимизации должен быть выбран пользовательский (Custom max).

Прочие поля ввода в настройках тестера (такие как диапазон дат, задержки) не важны и потому автоматически отключаются.

В режиме "Математические вычисления" каждый прогон агента тестирования производится с вызовом только трех функций: OnInit, OnTester, OnDeinit.

Типичная математическая задача для решения в тестере MetaTrader 5 — поиск экстремума от функции многих переменных. Для ее решения необходимо объявить параметры функции в виде input-переменных и разместить блок вычисления её значений в OnTester.

Значение функции для конкретного набора входных переменных возвращаем как выходное значение OnTester. Не следует использовать при вычислениях какие-либо встроенные функции, кроме математических.

Необходимо помнить, что при оптимизации всегда ищется максимум значения функции OnTester. Поэтому при необходимости, для поиска минимума следует возвращать обратные или умноженные на -1 величины.

Чтобы разобраться, как это работает, возьмем для примера относительно простую функцию двух переменных с одним максимумом. Опишем её в алгоритме эксперта MathCalc.mq5.

Обычно предполагается, что мы не знаем представление функции в аналитическом виде, иначе можно было бы рассчитать её экстремумы. Но сейчас возьмем известную формулу, чтобы убедиться в правильности ответа.

input double X1;
input double X2;
   
double OnTester()
{
   const double r = 1 + sqrt(X1 * X1 + X2 * X2);
   return sin(r) / r;
}

К эксперту прилагается файл с параметрами для оптимизации MathCalc.set: аргументы X1 и X2 перебираются в диапазонах [-15, +15] с шагом 0.5.

Запустим оптимизацию и увидим решение в таблице оптимизации. Лучший проход дает правильный результат:

  X1=0.0
  X2=0.0
OnTester result 0.8414709848078965

На графике оптимизации можно включить режим 3D и рассмотреть форму поверхности в наглядном виде.

Результат оптимизации (максимизации) функции в режиме математических вычислений

Результат оптимизации (максимизации) функции в режиме математических вычислений

Вместе с тем, применение тестера в режиме математических вычислений не ограничивается "сухими" научными исследованиями. На его основе, в частности, можно организовать оптимизацию торговых систем с использованием альтернативных широко известных методов оптимизации, таких как метод "роя частиц" или "имитации отжига". Разумеется, для этого потребуется самостоятельно выгрузить историю котировок или тиков в файлы и подключить их к тестируемому эксперту, а также эмулировать совершение сделок, учет позиций и средств. Эта рутинная работа может оказаться привлекательной из-за того, что вам доступна произвольная настройка процесса оптимизации (в отличие от встроенного "черного ящика" с генетическим алгоритмом) и контроль ресурсов (в первую очередь, оперативной памяти).