- Генерация тиков в тестере
- Управление ходом времени в тестере: таймер, Sleep, GMT
- Визуализация тестирования: график, объекты, индикаторы
- Мультивалютное тестирование
- Критерии оптимизации
- Получение финансовых показателей теста: TesterStatistics
- Событие OnTester
- Авто-настройка: ParameterGetRange и ParameterSetRange
- Группа OnTester-событий для контроля оптимизации
- Отправка фреймов данных с агентов в терминал
- Получение фреймов данных в терминале
- Директивы препроцессора для тестера
- Управление видимостью индикаторов: TesterHideIndicators
- Эмуляция пополнения депозита и снятия средств
- Принудительная остановка тестирования: TesterStop
- Большой пример эксперта
- Математические вычисления
- Отладка и профилирование
- Ограничения работы функций в тестере
Математические вычисления
Тестер в терминале MetaTrader 5 можно использовать не только для проверки торговых стратегий, но и для математических расчётов. Для этого необходимо выбрать соответствующий режим в настройках тестера, в выпадающем списке Моделирование. Это тот же список, где мы выбираем способ генерации тиков, но в данном случае тестер не станет генерировать ни тики, ни котировки, ни даже подключать торговое окружение (торговый счет и символы).
Выбор между полным перебором параметров и генетическим алгоритмом делайте в зависимости от размера пространства поиска. Критерий оптимизации должен быть выбран пользовательский (Custom max).
Прочие поля ввода в настройках тестера (такие как диапазон дат, задержки) не важны и потому автоматически отключаются.
В режиме "Математические вычисления" каждый прогон агента тестирования производится с вызовом только трех функций: OnInit, OnTester, OnDeinit.
Типичная математическая задача для решения в тестере MetaTrader 5 — поиск экстремума от функции многих переменных. Для ее решения необходимо объявить параметры функции в виде input-переменных и разместить блок вычисления её значений в OnTester.
Значение функции для конкретного набора входных переменных возвращаем как выходное значение OnTester. Не следует использовать при вычислениях какие-либо встроенные функции, кроме математических.
Необходимо помнить, что при оптимизации всегда ищется максимум значения функции OnTester. Поэтому при необходимости, для поиска минимума следует возвращать обратные или умноженные на -1 величины.
Чтобы разобраться, как это работает, возьмем для примера относительно простую функцию двух переменных с одним максимумом. Опишем её в алгоритме эксперта MathCalc.mq5.
Обычно предполагается, что мы не знаем представление функции в аналитическом виде, иначе можно было бы рассчитать её экстремумы. Но сейчас возьмем известную формулу, чтобы убедиться в правильности ответа.
input double X1;
|
К эксперту прилагается файл с параметрами для оптимизации MathCalc.set: аргументы X1 и X2 перебираются в диапазонах [-15, +15] с шагом 0.5.
Запустим оптимизацию и увидим решение в таблице оптимизации. Лучший проход дает правильный результат:
X1=0.0
|
На графике оптимизации можно включить режим 3D и рассмотреть форму поверхности в наглядном виде.
Результат оптимизации (максимизации) функции в режиме математических вычислений
Вместе с тем, применение тестера в режиме математических вычислений не ограничивается "сухими" научными исследованиями. На его основе, в частности, можно организовать оптимизацию торговых систем с использованием альтернативных широко известных методов оптимизации, таких как метод "роя частиц" или "имитации отжига". Разумеется, для этого потребуется самостоятельно выгрузить историю котировок или тиков в файлы и подключить их к тестируемому эксперту, а также эмулировать совершение сделок, учет позиций и средств. Эта рутинная работа может оказаться привлекательной из-за того, что вам доступна произвольная настройка процесса оптимизации (в отличие от встроенного "черного ящика" с генетическим алгоритмом) и контроль ресурсов (в первую очередь, оперативной памяти).