Инженерный взгляд на трейдинг: как работает сигнальный алгоритм торгового робота
Тимур Гильмуллин в соавторстве с Мансуром Гильмуллиным
Автоматизация анализа биржевых данных позволяет принимать торговые решения быстрее и точнее. Но рынок — это сложная система: реальное движение цены сопровождается шумом, выбросами и нестабильностью. Простой прогноз вроде «цена достигнет / не достигнет цели» здесь мало что значит. Также невозможно на 100% предугадать поведение и движение цены в будущем. Однако, торговать всё равно как-то необходимо и поэтому, чтобы торговать надёжно, требуется оценивать вероятность достижения целей, а не просто угадывать направление движения.
В этом блоге мы уже рассказывали о трёх ключевых компонентах, на которых строится реальный торговый алгоритм:
- фильтрация аномалий в данных модифицированным методом Хампеля — чтобы убрать выбросы, искажающие расчёты;
- нечёткие измерительные шкалы — чтобы интерпретировать риск и вероятность не только числом, но и понятными человеку уровнями;
- оценка достижимости целевой цены — чтобы не строить однозначные (часто неточные) прогнозы, а работать с реальными вероятностями успеха, используя мощный математический аппарат оценки вероятностей, статистики и анализа данных.
Объединив все эти элементы, можно построить достаточно надёжную автоматическую сигнальную систему, которая:
- самостоятельно применяет правила управления капиталом (MMR, Money Management Rules);
- автоматически анализирует рыночное движение цен и выдаёт прогнозы по целям;
- оценивает силу сигналов и вероятность достижения прогнозных целей;
- интерпретирует сигналы и риски на нечёткой шкале, понятной человеку;
- а также принимает решения об открытии и усреднении позиции либо об удержании позиции или фиксации текущей прибыли на основе заранее заданных правил.
В этой статье покажем, как устроен сам алгоритм: как он анализирует данные, принимает решения и управляет сделками.
Основные этапы работы алгоритма
Задачи, решаемые алгоритмическим торговым роботом, следующие.
- Отобрать торговые сигналы с высокой вероятностью достижения целевой цены на основе анализа статистик ценовых рядов исторических данных.
- Исключить аномальные всплески цен с помощью методов фильтрации (например, модифицированного метода Хампеля).
- Учесть динамику рынка на разных таймфреймах, чтобы корректно оценивать вероятности достижения целей. Для этого проанализировать статистики пятиминуток и часовых свечей для трейдерского алгоритма, либо часовые и дневные — для долгосрочного инвесторского алгоритма.
- Перевести числовую вероятность в понятные уровни качества сигналов с помощью универсальной нечёткой шкалы {Min, Low, Med, High, Max}.
- Отфильтровать и скорректировать силу торговых сигналов в зависимости от текущей вероятности успеха, чтобы динамически адаптироваться к меняющимся рыночным условиям.
- Применять строгие правила удержания или открытия новых позиций, усреднения и фиксации прибыли для каждой сделки, исключив человеческий фактор и эмоциональные решения.
- Контролировать и перераспределять капитал на уровне портфеля с помощью глобальных правил:
Как строятся торговые сигналы
После очистки данных от аномалий и расчёта вероятности достижения цели, алгоритм переходит к формированию торговых сигналов: проверяются возможности закрытия имеющихся позиций и открытие новых. В цикле торговой итерации, параллельно для десятков инструментов, на основании правил «открытия / закрытия» позиций (Open / Close Rules) определяется множество характеристик ценовых рядов, как с помощью классического технического анализа (построение канала Bollinger Band, вычисление значения индикатора Parabolic SAR), так и вероятностные характеристики цен (логарифмические доходности, средние доходности, волатильность и стандартизированное отклонение). По итогу вычисляются желаемая целевая цена и значение силы сигнала на покупку или продажу.
Каждый сигнал дополнительно анализируется по нескольким признакам:
- оценивается вероятность достижения целевой цены;
- числовая вероятность и сила сигнала переводятся в уровень на нечёткой шкале {Min, Low, Med, High, Max};
- выполняется фильтрация силы сигнала в зависимости от вероятности достижимости цели.
На этом этапе слабые или нестабильные сигналы отсеиваются. Только если вероятность достаточно высокая и дополнительные условия выполнены, сигнал поступает в блок принятия решения об открытии сделки. Кроме того, сила сигнала напрямую влияет на используемые в торгах объёмы инструмента.
Непосредственно перед выполнением самой сделки дополнительно анализируется текущее состояние биржевого стакана (Orders Book):
- наличие в нём достаточного объёма на покупку и продажу;
- приоритет выбранного направления;
- отсутствие аномальных объёмов в стакане.
Анализ стакана биржевых цен даёт дополнительный «рычаг» на отмену сделки. Например, если получен сигнал «покупать», но объёмы на продажу в разы больше, чем на покупку, стоит отказаться от покупки в текущий момент. Или если слишком много аномальных объёмов на продажу в стакане. Хотя, при наличии аномальных объёмов, также можно встать в покупку чуть выше аномалии, а на продажу — чуть ниже, по методике Front Running.
Правила открытия и закрытия позиций
Как было упомянуто выше, сила сигнала влияет на используемый в сделке объём для торгов и способ выставления заявок в стакан.
- Для сигнала Max уровня:
- используется максимально допустимый объём для сделки по одному инструменту;
- выставляется маркет-ордер «по рынку»:
- Для сигнала High уровня:
- используется уменьшенный объём от разрешённого для сделки по одному инструменту;
- выставляется стоп-ордер:
- Для сигнала Med уровня:
Цветовые схемы для правил открытия и закрытия позиций показывают последовательность применения всё более строгих ограничений при повышении силы сигнала.
Открытие и усреднение
- Сделка открывается только при наличии сигнала достаточной силы (качества). Обычно это Med, High или Max.
- Перед открытием проверяются лимиты по рискам на сделку.
- Допускается усреднение позиции, если выполняются условия:
Удержание или фиксация прибыли
- Фиксация прибыли при достижении уровней: целевого (желаемого) или достаточного.
- Принудительное закрытие сделки, если вероятность достижения цели существенно снизилась.
- Ограничение убытков по стоп-уровням или превышению допустимого риска.
Правила управления капиталом
Почему важно управлять капиталом
Помимо управления отдельными сделками, важной частью торговой системы является глобальное управление капиталом, — доступные в портфеле денежные средства для распределения по активам. Даже если каждая отдельная сделка выглядит выгодной и с большой вероятностью достижения цели, без общего контроля над портфелем можно быстро увеличить риски.
Как устроены правила управления капиталом (Money Management Rules)
Базовые правила достаточно простые и нацелены на постоянный рост стоимости портфеля:
- Закрыть все позиции в портфеле при достижении общей суммарной прибыли выше установленного уровня.
- Закрыть убыточные позиции, за счёт некоторого числа прибыльных позиций, если убыток превышает допустимый порог.
- Управлять свободным денежным кешем:
Процедуры Money Management Rules выполняются автоматически по расписанию — обычно 1–2 раза в день.
Почему используется вероятностная оценка и нечёткая шкала
Не стоит полагаться на «чёткие» прогнозы
Рынок по своей природе — это система с высоким уровнем неопределённости: рынок нестабилен, подвержен случайным колебаниям (в том числе из-за фейковых новостей) и аномальным ценовым скачкам. Даже при наличии сильного сигнала невозможно гарантировать 100% результат и достижение целевой цены. Поэтому вместо жёстких предсказаний в аналитических системах принято строить вероятностную оценку достижения цели.
Зачем нужна вероятностная оценка:
- число отражает не факт достижения цели, а «степень уверенности» в её достижимости;
- можно фильтровать только наиболее надёжные сделки.
- снижается доля рискованных решений и минимизируется человеческий фактор.
Как используется нечёткая шкала
Вероятности переводятся на уровни нечёткой шкалы:
Несущие множества приблизительные и могут пересекаться. Для корректной интерпретации используется «фазификация» — оценка степени принадлежности к каждому уровню.
Сама универсальная нечёткая измерительная шкала при этом может выглядеть так:
Фильтрация силы сигналов
Имея нечёткую оценку силы сигнала её легко скорректировать в зависимости от вероятности достижимости цели:
Пример простейшего фильтра сигналов:
signalFilter = { "Max": {"Max": "Max", "High": "High", "Med": "Med", "Low": "Low", "Min": "Min"}, "High": {"Max": "High", "High": "Med", "Med": "Low", "Low": "Min", "Min": "Min"}, "Med": {"Max": "Med", "High": "Low", "Med": "Min", "Low": "Min", "Min": "Min"}, "Low": {"Max": "Low", "High": "Min", "Med": "Min", "Low": "Min", "Min": "Min"}, "Min": {"Max": "Min", "High": "Min", "Med": "Min", "Low": "Min", "Min": "Min"}, }
Практическое использование алгоритма
Торговая система, построенная на вероятностной оценке достижимости цели и нечётких шкалах:
- очищает данные от выбросов;
- оценивает достижимость целей по реальным статистикам;
- принимает решения осторожно, опираясь на вероятность, а не на жёсткие прогнозы;
- управляет сделками и капиталом в рамках заданных правил.
- повышает надёжность торговых решений;
- уменьшает долю случайных ошибок и снижает воздействие человеческого фактора;
- системно контролирует риски;
- динамически адаптируется к изменяющимся условиям реального рынка.
Инженерный трейдинг — это не про догадки. Это работа с неопределённостью аккуратными математическими средствами: статистикой, вероятностями, нечёткими множествами и строгими правилами. На основе описанного алгоритма были созданы сервисы для автоматической генерации торговых сигналов и трейдинговый бот для работы на бирже.