Обсуждение статьи "Изолирующий лес средствами MQL5: Обнаружение аномалий качества исполнения заявок"

Опубликована статья Изолирующий лес средствами MQL5: Обнаружение аномалий качества исполнения заявок:

Пошаговое руководство по созданию изолирующего леса (Isolation Forest), реализованного непосредственно на MQL5 и ориентированного на показатели исполнения, а не на цену. В руководстве подробно описаны пять признаков, построение деревьев и расчет оценки аномальности по длине пути, обучение на скользящем окне, ведение CSV-журнала, а также сохранение и восстановление модели с использованием FILE_COMMON. Все это интегрировано в OnTradeTransaction(). Полученный механизм защитной остановки торговли (circuit breaker) в реальном времени выявляет необычные исполнения заявок и применяет контролируемые меры реагирования, чтобы стабилизировать реальную торговлю при изменении условий исполнения.

Если вы когда-нибудь сравнивали отчет тестера стратегий с выпиской по реальному счету и задавались вопросом, откуда взялась эта разница, то вам уже знакома эта проблема. В бэктестах предполагается фиксированная модель исполнения с предсказуемым поведением. В реальной торговле вы имеете дело с распределением, в котором хвост важнее среднего значения. Один случай проскальзывания на 40 пунктов во время резкого движения цены на новостях или серия двухсекундных задержек исполнения в период дефицита ликвидности могут нанести больший ущерб, чем сотня обычных сделок вместе взятых. Обычно это происходит настолько незаметно, что проблему обнаруживают лишь тогда, когда кривая средств уже пошла вниз.

Первое желание — установить жесткий лимит проскальзывания и отклонять исполнения заявок, выходящие за этот лимит. Это подходит для задач с одним признаком, но качество исполнения по своей природе многомерно: исполнение заявки может быть "нормальным" по каждому отдельному показателю — проскальзыванию, задержке и спреду, — но необычным по их сочетанию, чего отдельный порог для каждого признака никогда не выявит. Именно поэтому здесь нужен многомерный детектор, обучаемый без учителя, а не набор независимых защитных ограничений.

Стоит перечислить возможные варианты, а не переходить сразу к ответу. Z-оценка, рассчитанная отдельно для каждого признака, не выявляет описанный выше случай необычного сочетания значений признаков. Алгоритмам DBSCAN и Local Outlier Factor нужны метрика расстояния и параметр размера окрестности, подходящие значения которых трудно поддерживать по мере обновления скользящего окна. Для одноклассовой SVM необходимо подбирать ядро и параметр ширины разделяющей полосы для каждого набора данных, и ни для одного из этих трех алгоритмов нет готового варианта на MQL5 без внешних зависимостей, в отличие от ансамбля деревьев со случайными разбиениями. Изолирующий лес подходит для этой задачи, поскольку требует настройки лишь небольшого числа параметров, не нуждается в метрике расстояния или ядре, при малом размере выборки его эффективность снижается постепенно, а сам алгоритм можно реализовать средствами MQL5 без использования численных библиотек.

Изолирующий лес хорошо подходит для этой задачи по причине, которую легко упустить из виду: для обучения ему не нужны размеченные аномалии, а для аномалий исполнения как раз редко бывает заранее подготовленная надежная разметка. Расчет оценки аномальности требует O(num_trees × height_limit) сравнений на одну точку — примерно 100 × 8, то есть менее тысячи сравнений в конфигурации по умолчанию. Именно поэтому он может выполняться внутри функции OnTradeTransaction(). Это оценка вычислительной сложности в нотации Big O, а не результат замера производительности: чтобы не приводить цифру, которую я не могу подтвердить, в советнике предусмотрен входной параметр InpLogTimings, при включении которого в журнал выводится фактическое время расчета оценки аномальности и повторного обучения в миллисекундах на вашем оборудовании. Пошаговые инструкции см. в разделе "Как запустить и воспроизвести".

Жесткий лимит проскальзывания в коде исполнения торговых заявок всё же стоит сохранить — это отдельный уровень защиты, решающий другую задачу. Лимит защищает отдельную сделку от исполнения с экстремальным проскальзыванием. Изолирующий лес отслеживает закономерность в совокупности множества исполнений заявок, каждое из которых по отдельности проходит все жесткие проверки, но вместе они не похожи ни на что из того, с чем стратегия сталкивалась ранее. Ни один из них не заменяет другой.


Автор: Olamide Daniel Adebayo