Акции ВТБ и магия Хогвартса

Акции ВТБ и магия Хогвартса

Как исследователь фондового рынка и активный трейдер я долго смотрел на график VTBR и начал подмечать некоторые особенности.

Возникла идея в проверке некоторых гипотез.

Из своей аналитической платформы я выгрузил данные по активу за период с 2022 года и провёл небольшой технический, а потом статистический анализ - декомпозицию временного ряда для выявления скрытых закономерностей.

Технический и Статистический Анализ

Для анализа я использовал последние данные с января 2022 по 16 февраля 2026 года.

  • Текущая цена актива выше 180 SMA
  • Сила тренда по ADX высокая
  • Осцилляторы в зоне перекупленности с запасом хода (не в красной зоне, но краткосрочно возможен «охлаждающий» откат)

Для решения задачи декомпозиции я написал короткий код на Python и R для проверки результатов:

import pandas as pd import numpy as np from scipy.signal import find_peaks # Load data df = pd.read_csv('VTBR_FULL_NOTES_2026-02-17.csv', parse_dates=['Date']) df = df.sort_values('Date') df.set_index('Date', inplace=True) # Focus on the last 12 months for relevant cyclicality last_year = df.loc['2025-02-01':] close_prices = last_year['Close'] # Find peaks (highs) and troughs (lows) peaks, _ = find_peaks(close_prices, distance=15) # Distance roughly 3 weeks troughs, _ = find_peaks(-close_prices, distance=15) peak_dates = close_prices.index[peaks] trough_dates = close_prices.index[troughs] # Calculate gaps between peaks peak_diffs = np.diff(peaks) avg_cycle = np.mean(peak_diffs) if len(peak_diffs) > 0 else 21 print("Recent Peaks:", peak_dates[-5:]) print("Recent Troughs:", trough_dates[-5:]) print("Average cycle length (days):", avg_cycle) print("Last Trough Date:", trough_dates[-1]) print("Current Date:", df.index[-1])

Разложив временной ряд на составляющие, удалось выявить некоторые закономерности:

Результаты: Recent Peaks: DatetimeIndex(['2025-11-30', '2025-12-18', '2026-01-12', '2026-01-29', '2026-02-16'], dtype='datetime64[ns]', name='Date', freq=None) Recent Troughs: DatetimeIndex(['2025-10-27', '2025-11-17', '2025-12-22', '2026-01-14', '2026-01-30'], dtype='datetime64[ns]', name='Date', freq=None) Average cycle length (days): 21.666666666666668 Last Trough Date: 2026-01-30 00:00:00 Current Date: 2026-02-17 00:00:00

Кажется, присутствует скрытый паттерн, который повторяется каждые Average cycle length (days): 21.666666666666668 дней?

Это очень интересно, т.к. позволяет нам предположить, что акция ВТБ (VTBR) в текущей фазе (конец 2025 – начало 2026) демонстрирует четкий ~21-дневный торговый цикл (что соответствует одному торговому месяцу).

Ключевые даты разворотов (локальные минимумы — точки старта роста):

  • 27 октября 2025
  • 17 ноября 2025
  • 22 декабря 2025
  • 14 января 2026
  • 30 января 2026

Ключевые даты пиков (локальные максимумы — точки начала отката):

  • 30 ноября 2025
  • 18 декабря 2025
  • 12 января 2026
  • 29 января 2026
  • 16 февраля 2026 (Недавний максимум?)

Теперь сделаем разложение с использованием метода STL на R.

подробнее про STL можно почитать тут

# ========================================== # Скрипт анализа цикличности VTBR # ========================================== # 1. Установка и подключение библиотек if (!require("pacman")) install.packages("pacman") pacman::p_load(quantmod, forecast, TTR, ggplot2, lubridate, readr) # 2. Загрузка данных # Убедитесь, что файл находится в рабочей директории file_path <- "SVCB_FULL_NOTES_2026-02-17.csv" df <- read_csv(file_path, show_col_types = FALSE) # Преобразование даты и сортировка df$Date <- as.Date(df$Date) df <- df[order(df$Date), ] # Создание объекта xts (расширенный временной ряд) для тех. анализа ts_data <- xts(df[,c("Open", "High", "Low", "Close", "Volume")], order.by = df$Date) # 3. Декомпозиция временного ряда (Seasonality Trend Loess - STL) # Используем частоту 21 (среднее число торговых дней в месяце) # Эту цифру мы взяли из предшествующего анализа close_ts <- ts(df$Close, frequency = 21) decomp <- stl(close_ts, s.window = "periodic") # Вывод графика декомпозиции plot(decomp, main = "Декомпозиция VTBR: Тренд, Сезонность и Остатки") # 5. Анализ автокорреляции (ACF) для подтверждения цикла acf(df$Close, lag.max = 50, main = "ACF Test: Поиск цикличности")

Получили такой результат:

Декомпозиция временного ряда за весь период
Декомпозиция временного ряда за весь период

Как это можно интерпретировать?

  • Текущий тренд - восходящий
  • Выявили сезонность - 21 день (микроциклы - рост во второй декаде каждого месяца)

Ниже более сглаженный график где лучше видно цикличность с ноября 2025 по февраль 2026 (Seasonality) и ACF-тест:

Декомпозиция временного ряда за короткий период
Декомпозиция временного ряда за короткий период
  • ACF-тест показывает высокую инерцию движения (медленное затухание автокорреляции подтверждает устойчивость тренда. Прошлые значения цены сильно влияют на будущие (рынок «пампится»)

ACF-магия и что это нам даёт в торговле?

График ACF он же автокорреляция. Он показывает «память» рынка и помогает отличить случайный шум от реальной закономерности.

Что я вижу на графике ACF Test и как смотреть результат?

Диаграмма выполнена в виде столбиков, идущих слева направо.

  • Ось X (LAG / Лаг): Это сдвиг во времени назад.
  • Lag 1 = Влияние вчерашнего дня на сегодня.Lag 21 = Влияние цены, которая была 21 день назад (месяц назад), на сегодняшнюю цену.
  • Ось Y (Correlation / Корреляция): Сила связи от -1 до 1.
  • 1.0 (максимум) = Полное повторение. Если тогда цена росла, сегодня тоже растет.0 = Никакой связи (хаос).-1 (минимум) = Зеркальное движение. Если тогда росла, сегодня падает.

Наш цикл был 21 день (примерно) - как правило на диаграмме столбики убывают, потом становятся меньше, могут уйти в минус, а затем снова начинают расти и формируют пик.

  • Что это значит: Рынок «помнит», что было месяц назад, и повторяет это движение.
  • Действие: Можно торговать по календарю :-)

Иная ситуация: просто сильный тренд

Столбики очень высокие слева и медленно, плавно уменьшаются, не образуя явных волн.

  • Это инерция. Сегодняшняя цена — это просто копия вчерашней + чуть-чуть изменений. Сезонности нет, есть просто мощный "паровоз", летящий вперед.
  • Действие: Торговать только по тренду

Или всё это лишь рыночный шум

Почти все столбики (кроме самого первого) очень маленькие и находятся внутри синего коридора (или между пунктирными линиями). На нашем графике это примерно после значения 35.

  • Что это значит: Рынок хаотичен. Никакой памяти нет.
  • Действие: фиксировать прибыль.

На графике не очень хорошо всё видно, поэтому сформируем дополнительную таблицу на R c проверкой гипотезы о микроцикле в 21 день:

# Расчет ACF без построения графика (plot = FALSE) # lag.max = 30 (смотрим месяц + запас) acf_result <- acf(df$Close, lag.max = 30, plot = FALSE) # Расчет порога значимости (тот самый "синий туннель") # Формула: +/- 1.96 / корень из количества наблюдений (для 95% доверительного интервала) n_obs <- length(df$Close) confidence_threshold <- 1.96 / sqrt(n_obs) # Создание Dataframe acf_table <- data.frame( Lag = as.numeric(acf_result$lag), # Количество дней назад Correlation = as.numeric(acf_result$acf) # Сила связи (-1 до 1) ) # Добавляем колонку: Значимо ли это? (TRUE = Реальный сигнал, FALSE = Шум) acf_table$Is_Significant <- abs(acf_table$Correlation) > confidence_threshold # Убираем Лаг 0 (он всегда равен 1, так как это корреляция с самим собой) acf_table <- acf_table[acf_table$Lag > 0, ] # Вывод всей таблицы print(acf_table) # --- ПРОВЕРКА ГИПОТЕЗЫ 21 ДНЯ --- cat("\n--- ПРОВЕРКА ЦИКЛА (21 ДЕНЬ) ---\n") lag_21_data <- acf_table[acf_table$Lag == 21, ] print(lag_21_data) if(lag_21_data$Is_Significant) { cat("РЕЗУЛЬТАТ: Цикл 21 день статистически ПОДТВЕРЖДЕН (выход за пределы шума).") } else { cat("РЕЗУЛЬТАТ: Цикл 21 день находится в зоне шума (связь слабая).") }

Результат будет такой:

Lag Correlation Is_Significant 2 1 0.9882641 TRUE 3 2 0.9766647 TRUE 4 3 0.9661043 TRUE 5 4 0.9546122 TRUE 6 5 0.9422990 TRUE 7 6 0.9309900 TRUE 8 7 0.9207245 TRUE 9 8 0.9114262 TRUE 10 9 0.9011679 TRUE 11 10 0.8906608 TRUE 12 11 0.8810556 TRUE 13 12 0.8723479 TRUE 14 13 0.8625021 TRUE 15 14 0.8537037 TRUE 16 15 0.8446301 TRUE 17 16 0.8337474 TRUE 18 17 0.8235029 TRUE 19 18 0.8123584 TRUE 20 19 0.8011179 TRUE 21 20 0.7887996 TRUE 22 21 0.7761709 TRUE 23 22 0.7627640 TRUE 24 23 0.7492303 TRUE 25 24 0.7352251 TRUE 26 25 0.7206063 TRUE 27 26 0.7068995 TRUE 28 27 0.6926987 TRUE 29 28 0.6785005 TRUE 30 29 0.6640215 TRUE 31 30 0.6488519 TRUE --- ПРОВЕРКА ЦИКЛА (21 ДЕНЬ) --- Lag Correlation Is_Significant 22 21 0.7761709 TRUE РЕЗУЛЬТАТ: Цикл 21 день статистически ПОДТВЕРЖДЕН (выход за пределы шума).

1. Общая картина: «Эффект инерции»

Первое, что бросается в глаза — экстремально высокие значения корреляции.

  1. Lag 1 (0.988): Это почти идеальная связь. Сегодняшняя цена на 98.8% объясняется ценой вчерашнего дня.
  1. Затухание: Корреляция падает очень медленно. Даже на 16-й день (Lag 16) она составляет 0.833.

2. Проверка гипотезы о 21-дневном цикле

Математическая траектория очевидна - корреляция остается высокой и значимой.

Можно сделать вывод, что цикл подтверждается, но не как «сезонное колебание» (где корреляция падает в ноль и снова растет), а как устойчивая волна импульса.

По-простому - то, что произошло 21 день назад, все еще имеет 75–80% влияния на то, что происходит сегодня.

3. Риски, которые выявились при ACF-магии

Высокая корреляция — это палка о двух концах:

  1. Ловушка разворота: Когда корреляция так долго держится выше 0.8, разворот тренда обычно происходит не плавно, а резким обвалом (гэпом).
  2. Перегрев: Рынок сейчас напоминает перетянутую струну. Он слишком долго идет в одну сторону, «забывая» корректироваться.

Данные ACF-теста полностью оправдывают вашу осторожность

  • Подтверждение: Да, связь между ценами с лагом в 21 день статистически значима (Is_Significant = TRUE)
  • Действие: Поскольку корреляция начинает плавно снижаться к 16-му дню, это сигнал о том, что «память» тренда начинает ослабевать

Не пора ли нам проверить, как ведет себя PACF (Частная автокорреляция)? Она покажет, есть ли в текущем росте новый импульс, или мы просто доедаем остатки старого движения.

PACF-магия

Код можно будет взять на Github. Результаты же выглядят так:

--- РЕЗУЛЬТАТЫ PACF ТЕСТА --- Порог шума (Threshold): +/- 0.0592 Lag PACF_Value Is_Significant 1 1 0.9803 TRUE 2 2 0.0053 FALSE 3 3 -0.0405 FALSE 4 4 -0.0533 FALSE 5 5 -0.0404 FALSE 6 6 -0.0413 FALSE 7 7 -0.0053 FALSE 8 8 0.0758 TRUE 9 9 0.0200 FALSE 10 10 0.0314 FALSE --- ПРОВЕРКА ЦИКЛА (21 ДЕНЬ) --- Lag PACF_Value Is_Significant 21 21 -0.0141 FALSE

-0.0141 - это всё что нам нужно было узнать, чтобы убедиться: На 21-м дне НЕТ нового импульса. Рост идет по инерции.

Итоги

Текущую ситуацию можно обозначить как «Сильный растущий тренд в фазе перегрева». Прямая покупка «по рынку» несет риск попадания на технический откат.

Нельзя входить «на всю котлету» на текущих хаях!

не помню кто сказал впервые

Моя сделка была совершена по цене 79.80 (30 января 2026) с целевым уровнем в районе 95.70 - 96.00

Скрин из моей системы с SMA 180 и точкой входа в сделку
Скрин из моей системы с SMA 180 и точкой входа в сделку

Разберем ситуацию детально:

  • Текущая ситуация: я вошел в рынок 30 января 2026г. С того момента прошло 12 торговых сессий, а последний локальный пик был зафиксирован 16 февраля.
  • Прогноз: Согласно циклу, актив сейчас находится в зоне риска. Обычно после 10–12 дней активного роста (половина 21-дневного цикла) наступает фаза фиксации прибыли («остывание»).
  • Риск: Осцилляторы подтверждают, что цикл роста находится на излете. Вероятность отката в ближайшие 2–3 дня крайне высока.
  • Если мы правы насчет циклов, то начало следующей волны роста ожидается после 24 февраля.
  • АСF-тест нас предупреждает о рисках.

Что буду делать:

  1. Техническая оценка: Уровень 81.27 находится ниже текущей цены, но выше моей точки входа. Это уже «прибыльный стоп».
  2. Запас для маневра: Осцилляторы сообщают о скором "перегреве" и актив должен «остыть». Если я поставлю безубыток слишком близко, техническая коррекция может выбить меня из рынка.
  3. Перенесу StopLoss на 81.27
  4. Буду искать точки для входа в покупку в районе 24 февраля 2026г.

На этом всё! Спасибо!

Хотите знать больше?

Подписывайтесь на мой канал в Я.Дзен, Teletype и Telegram

Следите за моими идеями и сделками на TradingView

ВАЖНО! Не является инвестиционной или финансовой рекомендацией. Все описанное - только отражение личного опыта автора и его размышления. Я никого не убеждаю и не побуждаю к действиям. Любые инвестиции это только Ваш выбор.

@drunkenpin
1
2 комментария