Под постом про то, как моя стратегия проиграла индексу вчетверо, Дмитрий Овчинников написал коротко: если вы не собираетесь держать систему 28 лет, зачем искать такую систему, которая живёт 28 лет.
Я придумал ответ и стёр. Придумал второй и тоже стёр. Хороший вопрос тем и отличается от подколки: от него отбиваешься раздражением, потому что аргумента нет. Раздражение прошло за сутки, вопрос остался, и он бьёт ровно в середину того, чем я занят полгода.
Сразу говорю: цифрового ответа у меня нет. Есть разбор того, где я свернул не туда.
Чем я гордился
Прогон на 1996-2024 был моей главной опорой во всей серии. Двадцать восемь лет и четыре разные эпохи, с 2008-м внутри. Результат стратегии там 2,9% годовых, и я показывал эту цифру именно потому, что она некрасивая: смотрите, я не прячусь за удобную десятилетку, вот вам вся история целиком.
Мне казалось, это и есть строгость. Из 231 стратегии у меня выжила одна как раз потому, что я гонял всех на полной истории и не давал скидок.
Что этот прогон на самом деле измеряет
Под прошлым постом Ветерок посоветовал: купи Сбер и успокойся. Я ответил, что в 1998 году Сбер был одним из многих кандидатов, и знать, который из них доживёт до 2026-го, тогда было неоткуда. Ответил и понял, что должен рассказать историю, которую полгода откладываю. Потому что ровно на этой ошибке однажды попался я сам, и стоила она мне лучшего результата проекта.
В самом первом посте я обмолвился одной строчкой: платформа поймала на приукрашивании собственную лучшую стратегию, Sharpe сдулся с 0.77 до 0.49. Строчку заметили, подробностей я не дал. Даю сейчас.
Как выглядела радость
Стратегия HMR (её устройство разбирал во второй части) к тому моменту прошла три итерации. Первая версия считала ATR по ценам закрытия и получала слишком плотные стопы, Sharpe болтался в районе 0.45-0.57. Потом я подключил реальные внутридневные максимумы и минимумы, добавил трейлинг и портфельный стоп по просадке.
Прогон на 2015-2024 дал Sharpe 0.77.
Для того, что я строил, это было отлично. Не грааль, но уровень, на котором система уже имеет смысл. Я сидел и смотрел на эквити минут двадцать.
Под прошлым постом WZWZ написал прямо: осталось только лишь заработать денег на этих ваших двух цифрах. Справедливо подколол. Про режимы рынка я рассказал, про фильтры данных рассказал, а самый неудобный вопрос обошёл стороной. Исправляюсь, и ответ мне не льстит.
Цифра, которую показывать не хочется
Стратегия HMR на всей истории 1996-2024 дала 2,9% годовых. Двадцать восемь лет работы фильтров, режимов и защиты — и 2,9%.
Сразу оговорюсь про сравнение, иначе меня справедливо поймают. Свой результат я считал по бэктесту с комиссиями и проскальзыванием, а для индекса беру справочную цифру: за этот период S&P 500 дал порядка 8% годовых без дивидендов и около 10% с ними. В деньгах на горизонте 28 лет:
| Куда вложили 1 млн в 1996 | Что стало к 2024 |
|---|---|
| HMR, 2,9% годовых | 2,2 млн |
| S&P 500 без дивидендов, ~8% | 8,6 млн |
| S&P 500 с дивидендами, ~10% | 13,7 млн |
Считайте как хотите: разница от четырёх до шести раз. Не в процентах — в разах. Я честно прогнал свою систему по 28 годам истории и получил результат кратно хуже, чем если бы просто купил индекс и забыл пароль от терминала.
В прошлый раз рассказывал про стратегию HMR, которая выжила там, где легли 230 других. Её главная идея — не угадывать будущее, а каждый день определять, в каком режиме рынок сейчас, и подстраивать поведение. В комментах спросили: а как этот режим вообще определяется, без гадания на кофейной гуще? Рассказываю, потому что сама механика простая и применимая руками, без всякой стратегии.
Барометр из двух цифр
Режим рынка я определяю по двум вещам, обе доступны любому:
Всё. Никаких секретных данных, никаких платных терминалов. Две цифры, которые видно в любом терминале и на куче бесплатных сайтов.
В прошлый раз я рассказывал, как прогнал 231 факторную стратегию через злой бэктест и ни одна не прошла проверку. Пост зашёл, но в комментах закономерно спросили: «ну и что, всё выкинул? совсем ничего не работает?».
Не совсем. Из всей этой мясорубки выжила одна конструкция. Не потому что я её полюбил, а потому что она единственная прошла то же испытание, на котором легли остальные 230. Рассказываю, как она устроена, и сразу честно — почему это не машинка для печати денег.
Идея: не угадывать, а реагироватьБольшинство стратегий отвечают на три вопроса одинаково в любой ситуации: сколько денег держать в рынке, какие акции брать, когда выходить. «Всегда покупаем топ-10% по моментуму, держим месяц, повторяем». Красиво в статье, грустно на счёте.
HMR (я назвал её Hybrid Momentum-Reversion) исходит из другого: правильный ответ зависит от того, что сейчас творится на рынке в целом. В тихий растущий рынок — одни правила, в кризисную панику — совсем другие. Она ничего не предсказывает. Она каждый день смотрит на барометр и подстраивает поведение под то, что уже видно.
В прошлый раз я рассказывал, как моя платформа забраковала все 231 стратегии, которые я в неё загнал. Там был абзац про данные, который я сам назвал самой скучной частью проекта и проскочил в пять строк.
Соврал. Это не скучная часть. Это и есть проект.
Скачать тридцать лет дневных котировок по американским акциям — вопрос одного вечера и трёх строк на Python. Бесплатно, без регистрации. Дальше начинается интересное: эти данные врут, и врут они ровно в ту сторону, в которую вам приятно.
Расскажу, где именно, — по всем ловушкам, в которые я успел свалиться.
Ловушка первая: цены, которых никогда не былоВы качаете Adj Close и радуетесь: цены уже скорректированы на сплиты и дивиденды, считать доходность удобно. Проблема в том, что скорректированная история переписывается задним числом. Прошла выплата дивиденда — и все цены до неё сдвинулись. Был сплит — сдвинулись ещё раз.
Практический смысл: цена, которую вы видите в исторической строке за 2003 год, никогда не появлялась ни на одном экране. По ней нельзя проверить, сработал бы стоп. Нельзя понять, пробила ли бумага круглый уровень. Нельзя посчитать проскальзывание — вы считаете его от числа, которого не существовало.
Полгода я строил себе персональную платформу для проверки торговых идей: 30 лет данных по американским акциям, генератор стратегий, статистический гейт из семи тестов. Хотел найти свой грааль, как все мы.
Прогнал через неё 231 стратегию. Среди них были красавицы с Sharpe 1.49 на истории — такие в телеграм-каналах продают за деньги.
Строгую проверку не прошла ни одна.
Сначала я расстроился. Потом понял, что именно ради этого всё и строил. Сейчас расскажу, как выглядит проверка, после которой от 231 стратегии не остаётся ничего, покажу, кто всё-таки выжил, — и почему две мои любимые гипотезы умерли особенно красиво.
Почему ваш бэктест вам врётНе «может врать» — врёт. Четыре стандартные дырки, которые есть почти в каждом бэктесте «на коленке»:
1. Переподгонка. Переберите достаточно параметров — какая-нибудь комбинация нарисует красивую эквити. Случайно. Монетка, подброшенная 120 раз, тоже иногда выдаёт серию из десяти орлов. 2. Ошибка выжившего.