Эксперимент по прогнозированию акций на основе математических индикаторов и поиска исторических аналогий. Как мы попытались предсказывать движение цен без нейросетей.
Введение
В финансовой аналитике сегодня доминируют два подхода: фундаментальный анализ и модели машинного обучения. Последние, особенно нейросети, часто воспринимаются как «чёрные ящики» — они выдают прогноз, но объяснить его бывает сложно. Мы решили проверить альтернативную гипотезу: можно ли построить систему прогнозирования, основанную на математическом описании состояния рынка и поиске похожих эпизодов в прошлом? Без нейросетей, без глубокого обучения — только расчёты и статистика.
В этой статье — краткий отчёт о таком эксперименте. Мы не претендуем на революцию, не даём рекомендаций, а просто делимся тем, что у нас получилось.
Исходные данные и инструменты
Мы взяли исторические данные по акциям, торгующимся на Московской бирже (MOEX), с 2020 по 2026 год. Использовались стандартные дневные бары (OHLCV): цена открытия, максимум, минимум, закрытия и объём.
В качестве внешнего бенчмарка мы привлекли нейросеть Kronos (модель с 102 млн параметров, обученная на большом массиве временных рядов). Kronos не участвовала в формировании прогноза, а служила лишь точкой отсчёта для сравнения: насколько наш подход лучше или хуже.
Математическая основа
Мы не использовали классические технические индикаторы (скользящие средние, RSI и т.д.) в чистом виде. Вместо этого мы ввели интегральную меру состояния рынка, которую можно назвать «когерентностью» — числовую характеристику, отражающую степень упорядоченности ценового движения. Когерентность вычислялась на основе нескольких факторов:
- трендовой составляющей;
- стабильности (обратной волатильности);
- объёмной поддержки.
Также мы добавили два макроэкономических фактора: курс доллара к рублю и значение индекса Московской биржи. Они учитывались как поправочные коэффициенты, влияющие на общий фон.
Из когерентности и её производных мы получали набор индикаторов, характеризующих текущее «состояние» актива: перегретость, гибкость, резонансную уязвимость к внешним факторам, а также определяли фазу рынка — рост, падение или боковик. В боковике мы различали несколько подтипов (широкий, узкий, восходящий, нисходящий), чтобы точнее настраивать прогноз.
Как строился прогноз
Главная идея — поиск аналогий. Вместо того чтобы подгонять коэффициенты под каждую акцию вручную, мы для каждого момента времени искали в истории похожие состояния, сравнивая текущие значения индикаторов с прошлыми. Если в прошлом после такого состояния цена вела себя определённым образом, мы использовали медиану этих «сценариев» как прогноз.
Такой подход автоматически адаптируется под волатильность актива, его исторические паттерны и даже под макрофон. Никакой ручной настройки для каждой бумаги не требовалось.
Дополнительно вводился механизм, который в широких боковиках «смягчал» прогноз: мы не пытались угадать направление, а лишь слегка смещали ожидание в зависимости от перегретости рынка — чтобы не генерировать ложные сигналы в хаотичный период.
Сравнение с нейросетью
Чтобы оценить качество, мы провели бэктест: для пяти акций (Сбербанк, Газпром, Лукойл, Яндекс, Норникель) в случайные моменты прошлого строили прогнозы на 10 дней вперёд и сравнивали их с реальными ценами. Всего 50 тестов.
Вот что получилось:
Акция | Наша ошибка | Ошибка Kronos | Доля побед
------------|-------------|---------------|------------
Сбербанк | 1.13% | 2.22% | 90%
Газпром | 1.67% | 5.70% | 100%
Лукойл | 2.37% | 8.98% | 90%
Яндекс* | 4.06% | 15.74% | 70%
Норникель | 3.02% | 7.55% | 70%
Среднее | 2.45% | 8.04% | 84%АкцияНаша ошибка (MAPE)Ошибка
* Для Яндекса данные были доступны только до середины 2024 года из-за технических ограничений источника, что могло повлиять на результаты.
Как видно, в 84% случаев наш метод дал более точный прогноз, чем Kronos, при этом средняя ошибка была почти в три раза ниже.
Мы также проверили систему на расширенном наборе из 10 акций — результат оказался стабильным: средняя ошибка около 4.33%.
Выводы
Эксперимент показал, что подход, основанный на математических индикаторах состояния рынка и поиске исторических аналогий, может давать прогнозы, сравнимые или даже превосходящие по точности нейросетевые модели. При этом все расчёты интерпретируемы: мы всегда можем сказать, почему система дала тот или иной прогноз (какие фазы, какие индикаторы повлияли).
Конечно, это не гарантия будущих результатов. Рынок меняется, и любая модель рано или поздно устаревает. Но сам факт, что простые и прозрачные методы могут работать не хуже нейросетей, заслуживает внимания.
Мы не даём рекомендаций к покупке или продаже. Это лишь исследовательская работа, которую мы решили сделать открытой для обсуждения. Если у вас есть идеи, как улучшить подход или где его проверить — будем рады обратной связи.
Примечание: код системы написан на Python, используется SQLite для хранения данных, Streamlit для визуализации. Все расчёты воспроизводимы — при желании вы можете повторить эксперимент на своих данных.
# 📊 Результаты бэктеста Adaptive DIR (10 тикеров)
| Тикер | Сектор | DIR MAPE | Мин | Макс |
|-------|--------|----------|-----|------|
| SBER | Финансы | 2.50% | 0.04% | 5.39% |
| LKOH | Нефть | 2.55% | 0.01% | 4.90% |
| CHMF | Металлургия | 3.91% | 0.76% | 14.52% |
| GMKN | Металлургия | 4.02% | 0.17% | 9.06% |
| ROSN | Нефть | 4.10% | 0.60% | 10.17% |
| MOEX | Финансы | 4.20% | 0.62% | 9.45% |
| PLZL | Золото | 4.35% | 0.28% | 11.14% |
| MAGN | Металлургия | 5.01% | 0.95% | 11.81% |
| GAZP | Нефть | 5.44% | 0.81% | 19.09% |
| NVTK | Нефть | 7.18% | 1.62% | 17.11% |
| **ВСЕГО** | **—** | **4.33%** | **—** | **—** |
---
## 📋 Краткая сводка
- **Лучший результат:** LKOH (2.55% MAPE) — нефтяной сектор
- **Худший результат:** NVTK (7.18% MAPE) — высокая волатильность
- **Средняя точность:** 4.33% MAPE по всем 10 тикерам
- **Секторальная стабильность:** Система работает на нефти, металлургии, финансах и золоте
---
## 🏆 Ранжирование по точности
| Место | Тикер | Сектор | DIR MAPE |
|-------|-------|--------|----------|
| 🥇 | **LKOH** | Нефть | 2.55% |
| 🥈 | **SBER** | Финансы | 2.50% |
| 🥉 | **CHMF** | Металлургия | 3.91% |
| 4 | GMKN | Металлургия | 4.02% |
| 5 | ROSN | Нефть | 4.10% |
| 6 | MOEX | Финансы | 4.20% |
| 7 | PLZL | Золото | 4.35% |
| 8 | MAGN | Металлургия | 5.01% |
| 9 | GAZP | Нефть | 5.44% |
| 10 | NVTK | Нефть | 7.18% |