Блог им. NomID
В предыдущей статье я закончил вопросом:
«Как понять, что торговая стратегия действительно перестала работать, а не просто переживает обычную просадку?»
В комментариях мне ответили:
«Ну, давай бомби».
Бомбим.
На мой взгляд, это один из самых неприятных вопросов в алгоритмической торговле.
Когда советник зарабатывает — всё просто.
Когда он начинает терять деньги — появляется выбор:
— остановить его, потому что стратегия больше не работает;
или
— ничего не трогать, потому что это обычная просадка, которая была заложена в систему изначально.
И самое неприятное — правильный ответ обычно становится очевиден только задним числом.
Если выключил робота, а через неделю он восстановился — кажется, что вмешался зря.
Если оставил работать, а просадка продолжила расти — кажется, что надо было остановить раньше.
Поэтому я стараюсь не принимать такое решение только по одной цифре просадки.
━━━━━━━━━━━━━━━━━━
1. Сравниваю текущую просадку с историей стратегии
Первое, что имеет смысл посмотреть: были ли у стратегии похожие периоды раньше?
Если исторически робот регулярно переживал просадки 8–10%, а сейчас находится на −5%, выключать его только из-за этой цифры довольно странно.
Совсем другая ситуация: историческая максимальная просадка была около 8%, а текущая уже приблизилась к 15–20%.
Это ещё не доказывает, что стратегия умерла. Но это уже серьёзное отклонение от поведения, которое мы считали нормальным.
Причём я смотрю не только глубину просадки, но и её длительность.
Например: обычно робот выходил из просадки за 2–3 недели, а сейчас уже три месяца находится около минимумов.
Формально размер просадки может даже не установить новый рекорд, но характер поведения стратегии уже изменился.
━━━━━━━━━━━━━━━━━━
2. Смотрю не только на деньги, но и на сами сделки
Допустим, раньше было примерно 55% прибыльных сделок, средняя прибыль была больше среднего убытка, а после сотни новых сделок Win Rate постепенно сполз к 42%.
И одновременно:
— средняя прибыль уменьшается;
— средний убыток растёт;
— серии убытков становятся длиннее.
Это для меня намного интереснее, чем просто увидеть на счёте −10%.
Просадка показывает следствие.
А изменение статистики сделок может показать, что внутри стратегии действительно что-то меняется.
Полезно сравнивать не всю историю сразу, а отдельные окна:
— последние 20 сделок;
— 50 сделок;
— 100 сделок;
— месяц;
— три месяца;
— полгода;
— всю историю.
Если ухудшение видно только на последних десяти сделках — выборка слишком маленькая.
Если одно и то же изменение проявляется на нескольких периодах — это уже другой разговор.
━━━━━━━━━━━━━━━━━━
3. Проверяю, не изменились ли условия рынка
Стратегия не существует отдельно от рынка.
Трендовая система может плохо чувствовать себя во флэте.
Контртрендовая — страдать во время сильного направленного движения.
Ночной робот может резко изменить результат при других спредах и ликвидности.
Стратегия на пробой может зависеть от волатильности.
Поэтому плохой результат ещё не означает:
«алгоритм больше не работает».
Возможно, сейчас просто неподходящий для него режим рынка.
Но тут появляется следующий вопрос:
как долго мы готовы ждать возвращения подходящего режима?
━━━━━━━━━━━━━━━━━━
4. Смотрю, какие параметры ухудшаются одновременно
Один плохой показатель сам по себе может быть шумом.
Но если одновременно:
— растёт просадка;
— падает Win Rate;
— увеличивается средний убыток;
— уменьшается средняя прибыль;
— удлиняется серия убыточных сделок;
— восстановление занимает намного больше времени;
то это уже более серьёзный сигнал.
Поэтому я бы не искал одну волшебную цифру вроде:
«дошли до −12% — всё, стратегия умерла».
Гораздо полезнее смотреть на набор признаков.
━━━━━━━━━━━━━━━━━━
5. Учитываю количество сделок
Это место, где легко себя обмануть.
Если стратегия совершает 300 сделок в месяц, то 30–50 новых сделок уже дают материал для анализа.
А если другая стратегия делает пять сделок в месяц, после трёх убыточных сделок делать глобальный вывод о её работоспособности бессмысленно.
Поэтому нельзя одинаково оценивать роботов только по календарному времени.
Для одной стратегии месяц — большая выборка.
Для другой — почти ничего.
━━━━━━━━━━━━━━━━━━
6. Отдельно смотрю на робота, а не только на общий счёт
Предположим, на счёте работают три советника.
Первый: +1500 долларов.
Второй: +700 долларов.
Третий: −900 долларов.
Общий результат: +1300 долларов.
Если смотреть только на счёт, всё выглядит нормально.
Счёт зарабатывает.
Но внутри него одна стратегия уже может находиться в серьёзной деградации.
Именно поэтому мне кажется неправильным оценивать несколько систем только по общей кривой счёта.
Нужно видеть каждую стратегию отдельно.
━━━━━━━━━━━━━━━━━━
7. Не подгоняю правила остановки под прошлое
На истории легко посмотреть назад и сказать:
«Вот здесь надо было выключить советника».
Но в той точке будущего мы ещё не знали.
Поэтому критерии желательно определить заранее:
— что считается нормальной просадкой;
— какое отклонение требует внимания;
— какие показатели сравниваются;
— на какой выборке;
— когда стратегия переводится под наблюдение;
— при каких условиях уменьшается риск;
— при каких условиях останавливается торговля.
Иначе решение каждый раз начинает приниматься эмоционально.
━━━━━━━━━━━━━━━━━━
Что в итоге?
Для себя я разделяю три состояния.
1. Нормальная просадка
Показатели примерно соответствуют историческому поведению системы.
2. Подозрительное ухудшение
Появились отклонения, которых раньше почти не было, и стратегию уже нужно внимательно наблюдать.
3. Возможная деградация
Одновременно ухудшается несколько характеристик, причём изменение сохраняется на достаточно большой выборке.
И даже третий вариант не означает автоматически:
«удалить советника».
Иногда правильнее сначала уменьшить риск или временно остановить торговлю и продолжить наблюдение.
Именно эта проблема — одна из причин, почему я начал делать RiskForge.
Мне хотелось видеть не только баланс счёта, но и отдельно отслеживать:
— результат каждого робота;
— просадку;
— прибыль и убыток;
— количество сделок;
— Win Rate;
— результаты по периодам;
— комиссии и своп;
— изменение поведения стратегии со временем.
Чтобы вопрос был не:
«Советник сейчас в минусе — выключать его или нет?»
а:
«Насколько его текущее поведение отличается от того, которое раньше было нормальным?»
Это уже намного более полезная постановка задачи.
Если вы торгуете роботами — интересно, как вы решаете эту проблему.
Есть ли у вас заранее определённый критерий остановки стратегии?
Или решение обычно принимаете по факту, когда просадка уже становится некомфортной?
В следующем материале разберу ещё одну вещь, которая сильно искажает оценку торговой системы:
сколько стратегия зарабатывает на самом деле после комиссии и свопа.
… и хорошо жарю иишницу
Я убедился в том, что строго определиться нельзя.
Как наперед распознать флэт, самый вредный и противный период рынка, где потери гораздо вероятнее выигрышей?
Поэтому мой бот торгует только трендовые участки. Стратегия настроена на маленькие проигрыши на флэте (они воспринимаются как должное, и борьба с ними — это бой с ветряными мельницами, если, конечно, вы не являетесь причиной этого флэта) и на участие в крупном трендовом движении, когда вероятность выигрыша гораздо выше.
Да, сумма маленьких проигрышей (при очень длинном флэте) может превысить один трендовый выигрыш. Но тут я уже просто принимаю результат, как он состоялся.
Так же надо смотреть не изменились ли условия торговли по инструменту. Когда Мосбиржа ввела торговлю по выходным у меня начал выпадать самый прибыльный день понедельник из-за того что в выходные дни волатильность падает ниже критической и торговлю бот останавливает пока к концу понедельника волатильность снова нераскачается. Потом торговля с 7 часов начала приводить к тому, что в эти 2 часа флета успеваешь словить 1-2 лишних стопа и потом срабатывает ограничитель по стопам недождавшись профитного движения. И почти два месяца я не обращал внимание на это пока статистика стала кричать. Да и особо времени небыло на службе разбираться. Сейчас пропатчил бота и эти косяки убрал. Посмотрим что будет дальше.
А еще мне ИИ написал функцию в бэктесте определения деградации торговой стратегии. ею сейчас пользуюсь.