Или почему простой алгоритм на дневных свечах гарантированно сольёт ваш депозит, и что с этим делать.
Дисклеймер: Это не инвестиционная рекомендация. Автор не является лицензированным инвестиционным советником. Все стратегии, упомянутые в статье, тестировались на исторических данных и не гарантируют будущей прибыли.
Введение: амбициозный план
Всё началось с простой идеи. У меня был доступ к API Московской Биржи, свободное время и желание создать аналитический сервис: Telegram-бот, который каждое утро присылает подписчикам 2-3 «аномалии» с высокой вероятностью отскока. Подписка — 10-100 тыс. рублей в месяц. Звучит как классический финтех-стартап, правда?
Прежде чем писать код, я решил поступить как положено — проверить гипотезу на исторических данных. И вот тут началось самое интересное. То, что я обнаружил за три дня количественного анализа, полностью перевернуло moje представление о розничном трейдинге.
В этой статье я подробно, с кодом и цифрами, покажу весь путь: от эйфории первых бэктестов до понимания, почему «простых денег» на фондовом рынке не бывает.
Глава 1. Иллюзия «возврата к среднему»
Первая гипотеза была классической: Mean Reversion. Логика простая — если акция упала на 1% за день без видимых причин, на следующий день она с высокой вероятностью отскочит обратно. И наоборот: после роста на 1% ждём откат.
Я написал простой скрипт на Python с использованием pandas:
# Базовая логика бэктеста df['daily_return'] = df['close'].pct_change() * 100 df['next_return'] = (df['close'].shift(-1) - df['close']) / df['close'] * 100 # Сигналы long_signals = df[df['daily_return'] < -1.0]['next_return'] short_signals = -df[df['daily_return'] > 1.0]['next_return'] all_pnl = pd.concat([long_signals, short_signals]) # Статистика win_rate = (all_pnl > 0).mean() ev = (win_rate * all_pnl[all_pnl > 0].mean()) + \ ((1 - win_rate) * all_pnl[all_pnl <= 0].mean())
Первый тест я прогнал на данных Сбербанка за 1,5 года (январь 2025 — октябрь 2026). Результат окрылил:
Метрика |
Значение |
|---|---|
Всего сделок |
121 |
Win Rate |
62.8% |
Средняя прибыль |
+1.28% |
Средний убыток |
-1.21% |
Математическое ожидание |
+0.351% |
«Святой Грааль найден!» — подумал я. Win Rate 62.8% с положительным матожиданием — это же мечта любого кванта. Я уже мысленно считал будущую прибыль с плечом 1:2.
Но потом я сделал то, что должен был сделать в первую очередь: прогнал ту же стратегию на более длинной истории.
Глава 2. Момент истины
Я запросил данные через MOEX ISS API за период с 2021 по 2024 год и разложил результаты по годам:
Период |
Сделок |
Win Rate |
EV |
|---|---|---|---|
2021 — 2022 H1 |
200 |
56.5% |
+0.106% |
2022 H2 — 2023 |
162 |
59.9% |
+0.198% |
2024 |
93 |
54.8% |
-0.243% ❌ |
2025 — 2026 |
121 |
62.8% |
+0.351% |
ИТОГО |
576 |
58.5% |
+0.127% |
Обратите внимание на 2024 год. Стратегия, которая «работала» в другие периоды, в 2024-м теряла деньги. Это классический пример regime-dependent strategy — стратегии, зависимой от рыночного режима.
Более того, когда я масштабировал анализ на топ-15 голубых фишек Мосбиржи, картина стала ещё печальнее:
Тикер |
Win Rate |
EV |
|---|---|---|
SBER |
53.2% |
+0.031% |
GAZP |
54.2% |
0.000% |
SNGS |
50.8% |
-0.010% |
ROSN |
57.1% |
-0.060% |
VTBR |
52.3% |
-0.117% |
Ни одна бумага не показала статистически значимого положительного матожидания. Все цифры находятся в пределах статистического шума.
Глава 3. Попытка спасти идею: добавляем фильтры
Я не сдавался. Логично предположить, что стратегия работает не на всех бумагах, а только на тех, где соблюдаются определённые условия. Я добавил фильтры:
Фильтр ликвидности: оборот > 1 млрд рублей в день.
Фильтр объёма: падение происходит на объёме не выше 2× от среднего (отсекаем панические распродажи).
Фильтр тренда: цена не ниже 85% от SMA200 (не ловим «падающие ножи» в медвежьем тренде).
Диапазон сигнала: падение строго от 1.5% до 4.0% (отсекаем мелкие шумы и катастрофические гэпы).
После применения всех фильтров на 15 самых ликвидных бумагах результат:
Тикер |
Сигналов |
Win Rate |
EV |
|---|---|---|---|
ROSN |
17 |
88.2% |
+1.196% |
GAZP |
39 |
56.4% |
+0.077% |
Остальные 13 |
— |
— |
Отклонены |
Казалось бы — вот он, «золотой список»! Но давайте посмотрим на цифры трезво:
РОСНЕФТЬ: всего 17 сигналов за 4 года. Это меньше 5 сигналов в год. Статистическая значимость такого результата близка к нулю — это случайность.
ГАЗПРОМ: 39 сигналов с EV +0.077%. После учёта комиссии брокера (~0.05% за сделку) и проскальзывания (~0.1%) реальное матожидание становится отрицательным.
Вывод главы 3: Чем больше фильтров мы добавляем, тем меньше сигналов остаётся. А те, что остаются, либо статистически незначимы, либо теряют прибыльность после учёта издержек. Это классический симптом переобучения (overfitting).
Глава 4. Пробойные стратегии: новая надежда?
Я решил попробовать противоположный подход — Momentum / Breakout. Логика: если акция пробила максимум 180 дней на высоком объёме, она продолжит расти.
Код выглядел так:
df['high_180'] = df['high'].rolling(window=180).max() df['vol_avg_20'] = df['volume'].rolling(window=20).mean() # Пробой максимума + объём выше среднего + закрытие в плюсе cond_long = (df['high'] >= df['high_180']) & \ (df['volume'] > df['vol_avg_20']) & \ (df['close'] > df['open'])
Результат на Газпроме выглядел фантастически:
Метрика |
Значение |
|---|---|
Win Rate (5 дней) |
100% |
Средняя доходность |
+10.37% |
Доля случаев с прибылью ≥3% |
100% |
100% Win Rate! Но когда я посмотрел на даты этих 17 сигналов, всё встало на свои места:
Все 17 сигналов произошли в период с мая по сентябрь 2021 года.
Это был период мощнейшего дивидендного ралли. После сентября 2021-го и до конца 2024 года стратегия не сгенерировала ни одного сигнала — акция вошла в многолетний медвежий тренд.
А шорт-пробои? Их вообще не оказалось. На Мосбирже пробой минимума — это чаще всего не начало нового падения, а кульминация распродажи (capitulation), за которой следует агрессивный отскок.
Вывод главы 4: Пробойные стратегии работают блестяще, но только в бычьих фазах рынка. В остальное время они просто «молчат», не давая сделок месяцами. Для платного сервиса это неприемлемо — клиенты не будут платить за «сигналов нет» 8 месяцев в году.
Глава 5. Парный трейдинг — последняя надежда квантов
Я оставил одну идею, которая в теории не зависит от направления рынка — статистический арбитраж (Pairs Trading).
Концепция: берём две коинтегрированные бумаги (например, Сбер и Сбер-преф), строим спред между их ценами. Когда спред отклоняется на 2 стандартных отклонения от среднего — открываем рыночно-нейтральную позицию: покупаем недооценённую, шортим переоценённую.
# Упрощённая логика парного трейдинга ratio = price_sber / price_sberp z_score = (ratio - ratio.rolling(60).mean()) / ratio.rolling(60).std() # Сигнал: если Z > 1.5 → шортим SBER, лонгуем SBERP # Выход: когда Z возвращается к 0
Результат на паре SBER/SBERP за 5 лет:
Метрика |
Значение |
|---|---|
Win Rate |
68% |
Средняя прибыль |
+1.8% |
Средний убыток |
-1.2% |
Математическое ожидание |
+0.45% |
Наконец-то статистически значимый результат! Но и тут есть суровая реальность:
Шорт на Мосбирже — это боль. Либо нужных бумаг нет в пуле маржиналки, либо ставка за перенос позиции съедает 20-30% годовых прибыли.
Дивидендные гэпы ломают математику. Если по одной из бумаг проходит отсечка, спред «улетает», и алгоритм открывает заведомо убыточную сделку.
Чёрные лебеди. В феврале 2022-го коинтеграция всех пар распалась за один день. Z-score улетел на 5-6 стандартных отклонений.
Финальный вывод: почему простых стратегий не существует
За три дня анализа я протестировал все классические подходы на дневных данных Мосбиржи:
✅ Возврат к среднему — работает на узких выборках, разваливается на длинной истории
✅ Пробойные стратегии — работают только в бычьих фазах
✅ Парный трейдинг — математически состоятелен, но непрактичен для розничного трейдера из-за стоимости шорта
Ни одна из этих стратегий не показала стабильного положительного матожидания после учёта реалистичных издержек.
Почему так? Математическое доказательство
Асимметрия издержек. Чтобы стратегия была прибыльной для розничного трейдера, её «грязное» матожидание должно быть не менее +0.3% на сделку (комиссия входа + выхода + проскальзывание). Лучшие простые стратегии дают 0.05-0.1% — после издержек это ноль или минус.
Гипотеза эффективного рынка (в российской адаптации). Любая простая закономерность на дневных таймфреймах мгновенно арбитражится HFT-алгоритмами и крупными фондами. К моменту, когда ваша дневная свеча закрылась и «скринер» увидел сигнал, цена уже учла эту информацию.
Режимозависимость. Стратегия, работающая в 2021-м, катастрофически теряет в 2022-2024. Нет универсальных параметров — есть только подгонка под конкретный исторический отрезок.
Что действительно работает (и почему это не для розницы)
Настоящие квантовые фонды не смотрят на дневные свечи. Они используют:
Тиковые данные — микроструктуру рынка, стакан, порядок исполнения
Альтернативные данные — анализ тональности новостей, спутниковые снимки, данные о транзакциях
Сложные ансамбли ML — постоянно переобучающиеся модели
Co-location — серверы рядом с биржей для минимизации задержек
Это требует миллионов долларов инфраструктуры и команды PhD. Это не то, что можно упаковать в Telegram-бота.
Что делать вместо этого?
Если вы, как и я, хотите создать полезный финтех-продукт на базе данных Мосбиржи, вот что реально работает и за что люди готовы платить:
Аналитические скринеры. Инструменты для самостоятельного анализа: фундаментальные показатели, дивидендная доходность, тепловые карты секторов. Люди платят за удобство и экономию времени.
Бэктестинг-платформы. Дайте пользователям возможность тестировать их собственные гипотезы на исторических данных. Это легально, полезно и имеет реальную ценность.
Образовательный контент. Честные разборы вроде этой статьи — без обещаний «золотых гор», но с объяснением, как работает рынок на самом деле.
Заключение
Я начал этот путь с амбициозного плана создать платный сигнальный сервис. Закончил — пониманием, что простых денег на фондовом рынке не бывает, и что честный ответ «я не могу это сделать, потому что математически это не работает» ценнее, чем красивый, но убыточный продукт.
Если вы розничный инвестор — не верьте продавцам «сигнальных ботов». Если вы разработчик — не тратьте время на «генератор сигналов». Делайте инструменты, которые экономят людям время, а не обещают лёгкой прибыли.
Математика не врёт. И это — самая ценная находка этого исследования.
Докажите, что я не прав
Я готов признать своё поражение, если вы покажете мне работающую альтернативу. Если у вас есть стратегия на дневных данных Мосбиржи, которая показывает стабильный Win Rate > 55% и положительное матожидание на истории более 3 лет (с учётом реальных комиссий и проскальзывания) — поделитесь её логикой или кодом в комментариях.
Без «успешного успеха», без скриншотов из терминала за один удачный месяц, а с честным бэктестом на Python.
Я внимательно изучу каждый аргументированный ответ. Если вы докажете, что розничный алгоритмический трейдинг на простых правилах жив, я с удовольствием напишу продолжение этой статьи с разбором вашей стратегии.
Жду ваши данные.