Данная статья навеяна мнением о том, что все участки биржевых графиков в прошлом уже повторялись, потому что поведение участников рынка подчиняется типовым сценариям. И если оцифровать все графики, то можно находить похожие участки в текущий момент времени и предполагать, какое движение будет в ближайшее время.
В частности, на эту мысль натолкнул трейдер Игорь Андреев, который в своём ТГ-канале часто прикладывает участки графика из прошлого, тем самым предполагая, куда пойдёт цена.

Гипотеза: если найти участок графика в прошлом, схожий с текущим, можно с высокой вероятностью предсказать поведение цены после него.
В общем, вызов принят. Попробуем проверить данную теорию имеющимися средствами Python.
Качаем исторические данные OHLCV с ByBit Spot по случайным 30 монетам из топ-50 CoinMarketCap. Тесты будем проводить на 1-минутном таймфрейме.
Открываем графики и вручную подбираем участки, совпадения с которыми будем потом искать в исторических данных. В качестве среднестатистического паттерна выбирались падающие участки с яркими всплесками по объёмам, которые в последующем корректировались на 0.4–0.5 от падения.
Базовое предположение таково: похожие участки будут иметь такую же коррекцию, и при совпадении их частей можно входить в лонг, ожидая коррекции вверх. В качестве паттерна выбирается область, выделенная на рисунке синим цветом.

Так как паттерны подбирались на разных монетах и бэктесты с ними также будут проходить на разных монетах, значения паттернов OHLCV приводились к относительным величинам от 0 до 1.
Общая логика бэктестов
Ищем совпадения с паттерном в исторических данных.
Сравнение двух участков разных графиков проводилось стандартными средствами Python:
- Cosine (косинусное сходство)
- Pearsonr (коэффициент корреляции Пирсона)
- Spearmanr (коэффициент корреляции Спирмена)
- Euclidean (евклидово расстояние)
- Cityblock (манхэттенское расстояние)
- Mean Squared Error (MSE, среднеквадратичная ошибка)
- Mean Absolute Error (MAE, средняя абсолютная ошибка)
- Mahalanobis (расстояние Махаланобиса)
- Jensenshannon (дивергенция Дженсена — Шеннона)
В результате серии тестов в качестве наиболее корректного был выбран метод Cosine.
Коэффициенты степени совпадения также подбирались опытным путём.
Берём эталонный паттерн, исторические данные какой-то монеты (1-минутный таймфрейм) и итерируемся по каждой свече. На каждом шаге берётся участок графика, равный по длине паттерну, приводится также к относительным величинам, чтобы сравнение было корректным. Сравниваем.
Если паттерн совпадал с текущим участком графика с требуемой точностью — имитируем заход в лонг-позицию:
стоп-лосс — под минимум;
тейк-профит — 0.4–0.5 коррекции от падения;
риск/профит — 1 к 3;
далее отслеживаем результат сделки (закрываем сделку в плюс или минус).
Первичные результаты
Всего проведено более 3000 тестов на ~300 паттернах. В тестах использовались исторические данные 30 монет из CMC-50. Средняя длина данных на монету — ~1.8 млн минутных свечей (чуть более 3-х лет).
В 30% тестов WinRate (соотношение прибыльных сделок к убыточным) составляет более 25%. То есть в 1/3 тестов математическое ожидание положительное, так как RR = 1/3.
Средний WinRate (avg): 22.3%
Медианный WinRate: 21.7%
Это выше гипотетической случайной стратегии с RR 1:3, которая обычно даёт ~15-17% WinRate.
Стандартное отклонение (stddev): 10.5%
Что говорит о высокой дисперсии: часть паттернов даёт слабый результат, но есть и устойчиво прибыльные.
Удачные результаты тестов выглядят так:




Но есть и такие:

Ну и что дальше-то?
Тесты и их анализ продолжаются. Автор эксперимента опускает множество технических деталей и сложностей написания соответствующего ПО.
Тестовое отслеживание некоторых паттернов в реальном времени реализовано в моём ТГ-канале.
Автор открыт к диалогу и предложениям по улучшению результатов данного исследования, обсуждению технической части.
Если эта идея вам откликается — пишите, делитесь и следите за продолжением.