Блог им. empenoso

Как адаптировать торговые стратегии к изменениям рыночного режима?

Небольшая заметка — посмотрел интересное видео около ML о том как адаптировать торговые стратегии к изменениям рыночного режима (regime changes).
И здесь основная проблема в нестационарности финансовых временных рядов, где статистические свойства (среднее, дисперсия и др.) постоянно меняются со временем.

У видео есть автоперевод на русский язык.
Как адаптировать торговые стратегии к изменениям рыночного режима?
Видео: https://www.youtube.com/watch?v=X5QcNyYRMqQ


Автор рассматривает три метода адаптации:

  • Кодирование скрытых состояний (Encoding Hidden States): использование средних и других признаков для передачи «памяти» модели о предыдущей динамике рынка.
  • Онлайн-обучение (Online Learning): использование алгоритмов, таких как Passive Aggressive Regressor, которые непрерывно корректируют веса модели при каждом новом тике данных, позволяя стратегии быстро переключаться между импульсной торговлей и возвратом к среднему.
  • Обучение с подкреплением (Reinforcement Learning): моделирование торговли как задачи «двурукого бандита». Автор подчеркивает важность использования энтропийной регуляризации, которая предотвращает застревание модели в локальных оптимумах и заставляет её продолжать «исследование» рынка даже после изменения условий.
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
5.1К | ★2
30 комментариев
Михаил, а кроме этой околорыночной болтовни и фотографий булочек из самолётов, у вас есть что-то за душой? Я имею в виду опыт успешной торговли. Или вы только щёки раздувать умеете?
avatar

cerberus, булочки моя слабость. А про алгоритмы — исследовательская работа.

Успешность торговли я в комментариях не доказываю и сигналы не продаю.

Если тема неинтересна — можно просто пройти мимо.

Михаил Шардин, я просто искренне не понимаю вашего раздувания щёк. Вы опять написали про банальную банальщину. Любой хороший ИИ сейчас способен озвучить те же самые методы адаптации, легко. Может настало время изучать деятельность ИИ-агентов, а не блогеров, которые снимают свои ролики при помощи ИИ? Вы напоминаете мне восторженного туриста, который с упоением наблюдает за работой мастера, создающего горшки на гончарном круге… Но который, при этом, не обращает внимания на завод по соседству, выпускающий точно такие же горшки миллионами.
avatar

cerberus, я частное лицо, не представитель фонда или брокера.

Что-то получается, что-то нет. Я пишу об этом открыто. Про какие-то свои эксперименты

cerberus, нету у него этого, так как в этом случае нужна готовость в риску и яйцы!
avatar
cerberus, а у вас?)
avatar

Михаил, добрый день! Спасибо за заметку.

Видео не посмотрел еще, поэтому вас спрошу — что автор на вход для обучения всех этих моделей подаёт? 

И еще интересное: подписался, помимо прочего, на одного quant developer в линкед, и теперь у меня в ленте намного больше свежего и интересного по бирже и алготорговле, чем на СЛ. Это парадокс. Ни чем не хуже, чем в релевантных ветках реддита. Не удивлюсь, если и в инсте вместо жопастеньких скоро появляться начнут в рекомендациях интересные заметки и скрины по биржевой/алго тематике

пысы: платный зарубежный траффик с осени — фейк или нет?

avatar
Op_Man, дадите ссылку?
Михаил Шардин, на конкретного челика не дам, но вот по этим тегам большинство из них нагуглятся: #QuantitativeTrading #SystematicTrading  #FuturesTrading #AlgorithmicTrading #PortfolioConstruction #RiskManagement #CommodityTrading #QuantResearch 
avatar
Op_Man, спасибо
Очень интересно, спасибо за статью
А откуда следует, что это статистические свойства меняются? Есть мнение, что цена — это величина: x+s, где x — это неслучайная величина, а s — это случайная величина с мат. ожиданием равным 0. Отсюда следует, что представлять, что статистические свойства меняются имеет мало смысла и значения.
avatar
Andrey Siver, именно поэтому «кванты» всегда сливают, если у них нет технического превосходства в стакане. А все эти размышления об адаптациях — это всё разговоры в пользу бедных.
avatar
Andrey Siver, Для наблюдателя, который не имеет инсайда, рынок случаен в том смысле, что он не может предсказать точное значение одного события. Матожидание там не обязательно ноль и распределение не обязательно(да и почти никогда) нормальное. Статистические характеристики меняются в силу того, что факторы, которые двигают рынок, меняются, но среди них есть медленно меняющиеся, к которым можно подстроиться, чтобы точнее прогнозировать исходы событий.
Михаил Михалев, для случайной компоненты матожидание 0. Дальше можно пробовать моделировать неслучайную компоненту случайной величиной, что будет иметь свои условия применимости.
avatar
Andrey Siver, Нет никакой «случайной компоненты». Последовательность либо случайная, либо нет. Если случайная, то отдельное событие невозможно предсказать. Можно только снять статистические характеристики. Случайные последовательности могут иметь любые распределения, средние, дисперсии и т.п. Всё зависит от природы случайной последовательности.
Andrey Siver, а откуда Вы взяли, что это МНЕНИЕ отражает реальность? Возьмите ряд цен любой ликвидной акции за достаточно большой период, и попробуйте найти это S. Будете удивлены. 
avatar
У тех инструментов, которые меньше подвержены новостийному фону — и здесь «проблема в нестационарности финансовых временных рядов, где статистические свойства (среднее, дисперсия и др.) постоянно меняются со временем» уже не проблема. Точнее эта проблема как раз и возникает на новостийной торговле.
avatar
ТС посмотрел… и..? 
avatar
Ho_Chu, и поделился
Для простых линейных ТС на входе лучше подавать не голые OHLC, time, итп, где вола как гармошка туда, сюда, а более выравненные графики. Когда времена открытия/закрытия свечей разные. Например графики ренко, коробочки, графики по объемам, итп кто что придумает))… Тогда, иногда отсекаются «мертвые дни», «боковики», когда цена стоит на месте не рисуются свечи, и как бы «скорости» выравниваются. Выходные дни сразу уменьшаются, хотя на обычном графике OHLC, выходные одного размера со всеми… Но это всё костыли на костыли… но интересно)) Для понимания что не все дни одинаковые полезное представление.
avatar
Автор рассматривает три метода адаптации
Так итого то какое? Эквити есть или что-то похожее на эквити?
Дмитрий Овчинников, есть фотографии булочек из самолётов
avatar
Дмитрий Овчинников, в видео эквити есть
Михаил Шардин, а ваша личная есть?
avatar
есть 3 правила торговли
1 торговать тренд
2 контролировать риски
3 ждать прибыль

не надо ничего больше придумывать
просто смотрим на все 3 правила и ищем в какм из 3ех ошибся автор
avatar
  • Кодирование скрытых состояний (Encoding Hidden States): использование средних и других признаков для передачи «памяти» модели о предыдущей динамике рынка.
  • Онлайн-обучение (Online Learning): использование алгоритмов, таких как Passive Aggressive Regressor, которые непрерывно корректируют веса модели при каждом новом тике данных, позволяя стратегии быстро переключаться между импульсной торговлей и возвратом к среднему.
  • Обучение с подкреплением (Reinforcement Learning): моделирование торговли как задачи «двурукого бандита». Автор подчеркивает важность использования энтропийной регуляризации, которая предотвращает застревание модели в локальных оптимумах и заставляет её продолжать «исследование» рынка даже после изменения условий.

Без иллюстраций на конкретном инструменте всё выглядит неубедительно. Должно быть показано, что перечисленное способно бороться с обычными проблемами технического анализа. Запаздывание куда девается?
1) А обычная МА не передаёт предыдущие состояния цены?
2) Линейную регрессию использовал каждый второй. Ну, стал наклон линии прогноза из положительного отрицательным, вот и 'переключение'. Только слишком поздно.
3) Надо показывать эффективность метода вычисления энтропии, а самое главное — правильное соотношение между ней и политикой, которое не должно сильно непредсказуемо меняться. Пока выглядит просто как создание новых сущностей. 
avatar
Михаил, благодарю за видео! Хотя немного странный формат, может есть текстовая версия для ознакомления?

Фёдор Г., прислали (Бомбасик):

Технический анализ методов адаптации торговых систем к смене парадигмы рынка (Regime Changes)

При проектировании алгоритмических стратегий для высокоэффективных и зашумленных финансовых рынков (базовый актив — BTC/USDT) ключевым препятствием является нестационарность временного ряда логарифмических доходностей:

r_t = ln(P_t / P_{t-1})

Математическое ожидание, дисперсия и автокорреляционные функции распределения непрерывно мутируют во времени. Классические статические модели машинного обучения (Supervised Learning), обученные пакетным методом (Full-Batch) на фиксированном историческом интервале, демонстрируют неспособность адаптироваться к структурным сдвигам. Это ведет к накоплению системной ошибки (Bias) и критическому росту максимальной просадки (Max Drawdown).

В данном документе представлен подробный разбор четырех протестированных методов адаптации, их математический аппарат, результаты бэктестов и программная реализация на Python/PyTorch.

 

МЕТОД №1: Статический бенчмарк AR(1) и метод скользящего окна (Sliding Window)

1.1. Базовая неадаптивная модель

В качестве отправной точки используется авторегрессионная модель первого порядка, где предиктором выступает лагированная доходность за предыдущий шаг:

r_hat_{t+1} = w * r_{t-1} + b

При обучении методом наименьших квадратов (OLS) на всей исторической выборке получены следующие параметры:

  • Вес (w): -0.02902972 (контр-трендовый характер)
  • Свободный член (b): +0.00140446

Критический дефект модели: Свободный член b по модулю существенно превосходит динамическую компоненту w * r_{t-1}. Как следствие, математическое ожидание прогноза практически всегда строго больше нуля. Распределение сигналов показало: Long — 1991 день, Short — 104 дня. Модель выродилась в пассивную стратегию удержание актива (Buy & Hold) и полностью сливает капитал в периоды затяжного медвежьего тренда.

1.2. Модификация: Скользящее окно (Sliding Window)

Для придания модели локальной гибкости применяется подход переобучения на скользящем историческом окне фиксированной длины k. Оптимизация параметров OLS производится на интервале [t-k, t] для прогнозирования точки t+1.

Недостатки подхода: Экстремальная чувствительность к размеру окна k (короткое окно ловит шум, длинное — запаздывает) и полное стирание макро-памяти ряда за пределами выбранного интервала.

 

МЕТОД №2: Кодирование скрытых состояний (Feature Engineering / Memory)

Вместо подачи сырых, зашумленных лагов, история доходностей сжимается в низкоразмерное скрытое состояние (Hidden State), выступающее в роли рыночной «памяти».

2.1. Однофакторная модель памяти (Rolling Mean)

В качестве предиктора выступает простое скользящее среднее логарифмических доходностей за окно N=40:

X_t = (1 / N) * SUM_{i=1}^{N} r_{t-i}
r_hat_{t+1} = w * X_t + b

Результаты бэктеста: Вес линейной регрессии инвертировался в положительное состояние (w = +0.0898), превратив модель в Momentum-стратегию (следование за трендом). Количество шорт-сигналов увеличилось со 104 до 380, защищая капитал во время затяжного даунтренда.

2.2. Моделирование относительной памяти (Relative Memory)

Двухфакторная архитектура, оценивающая спред между локальным ценовым импульсом (быстрая компонента) и долгосрочной памятью рынка (медленная компонента):

r_hat_{t+1} = w_1 * r_{t-1} + w_2 * ((1 / N) * SUM_{i=1}^{N} r_{t-i}) + b

Полученные параметры оптимизации:

  • w_1 (Локальный лаг) = -0.0322
  • w_2 (Скользящее среднее) = +0.0906

Вывод: Модель выстроила устойчивую структуру — взвешенный арбитраж между трендовой силой макро-памяти и контр-трендовым свойством локального микро-шума. Количество шорт-сигналов возросло до 549, обеспечивая стабильный рост эквити на фазах слома тренда.

 

МЕТОД №3: Динамическое потоковое обучение (Online Learning)

Переход от концепции пакетного обучения (Full-Batch) к непрерывному стримингу данных. Модель получает одну точку временного ряда, делает Out-of-Sample прогноз, узнает истинный ответ рынка и мгновенно корректирует параметры. Используется алгоритм Passive-Aggressive Regressor на базе стохастического градиентного спуска (SGD). Функция потерь определяется как epsilon-insensitive loss:

L = max(0, |y_hat_t — y_t| — epsilon)

  • Passive режим: Если абсолютная ошибка прогноза находится в пределах порога epsilon (L = 0), веса модели не изменяются (w_{t+1} = w_t).
  • Aggressive режим: Если ошибка превышает порога, модель производит мгновенную направленную коррекцию вектора весов (Error Correction), прямо пропорциональную величине ошибки.

Программная реализация онлайн-цикла (Python)

from sklearn.linear_model import PassiveAggressiveRegressor
from sklearn.preprocessing import StandardScaler

# Инициализация онлайн-модели и потокового скалера
model = PassiveAggressiveRegressor(C=1.0, epsilon=0.001, random_state=42)
scaler = StandardScaler()

for t in range(41, len(df)):
    X_t = df['close_log_return_lag_1'].iloc[t].values.reshape(-1, 1)
    y_t = df['close_log_return'].iloc[t]
   
    # Потоковое обновление параметров скалера
    scaler.partial_fit(X_t)
    X_t_scaled = scaler.transform(X_t)
   
    # Out-of-Sample прогноз ДО корректировки весов
    y_hat = model.predict(X_t_scaled)[0]
   
    # Шаг градиентной коррекции параметров модели на основе истинного y_t
    model.partial_fit(X_t_scaled, [y_t])

Статистические результаты: Точность направления (Directional Hit Rate) составила 50.41%. Распределение позиций: Long — 1071, Short — 976. Баланс сигналов приблизился к отношению 50/50, полностью ликвидировав лонг-сдвиг. Вектор весов непрерывно колеблется во времени, переключая модель между режимами Momentum (w > 0) и Mean Reversion (w < 0) без проклятия размерности.

 

МЕТОД №4: Обучение с подкреплением (Reinforcement Learning / Policy Gradient)

Моделирование торговой логики в рамках частично наблюдаемого Марковского процесса принятия решений (POMDP). Целью является прямая оптимизация параметров торговой политики (политики действий) без промежуточной оценки функции ценности.

4.1. Концепция Двурукого Бандита (Two-Armed Bandit)

Торговая среда интерпретируется как игровой автомат с двумя рычагами:

  • Рычаг 0 (Heads) — Открытие позиции Long.
  • Рычаг 1 (Tails) — Открытие позиции Short.
  • Награда (R_t) — При верном выборе направления R_t = +1.0; в противном случае R_t = -1.0.

Используется алгоритм REINFORCE (Policy Gradient). Обучаемые параметры нейросети (логиты действий) трансформируются через слой Softmax в вероятностное распределение действий pi_theta(a|s).

4.2. Ловушка Vanilla REINFORCE и локальный оптимум

В стационарных условиях (тренд вверх, монета падает орлом в 70% случаев) базовый алгоритм REINFORCE максимизирует вероятность прибыльного действия: pi(a_long) -> 1.0. При резком наступлении смены режима (вероятность падения орла падает до 20%, а шорт становится прибыльным в 80% случаев), Vanilla-агент полностью теряет способность к адаптации. Так как вероятность шорта была сведена к нулю, фаза исследования среды (Exploration) прекращается. Агент продолжает совершать 100% лонг-сделок, уходя в глубокую просадку.

4.3. Архитектурное решение: Регуляризация энтропии Шеннона (Shannon Entropy)

Для сохранения уровня исследования (Exploration) и предотвращения преждевременного коллапса распределения политики, в функцию потерь вводится штраф за чрезмерную уверенность — энтропия Шеннона H(pi):

H(pi) = — SUM_{i} pi(a_i) * log pi(a_i)
Loss_total = Loss_policy — beta * H(pi)
Loss_total = -log pi_theta(a_t | s_t) * R_t — beta * H(pi)

Где beta (Entropy Beta) — гиперпараметр регуляризации, определяющий вес компоненты исследования.

Реализация кастомного шага обучения на PyTorch

import torch
import torch.nn as nn
from torch.distributions import Categorical

class PolicyNetwork(nn.Module):
    def __init__(self):
        super(PolicyNetwork, self).__init__()
        self.theta = nn.Parameter(torch.zeros(2))
       
    def forward(self):
        return torch.softmax(self.theta, dim=0)

def train_rl_step(policy, optimizer, action_index, reward, beta=0.5):
    probs = policy()
    m = Categorical(probs)
   
    # Расчет базового лосса политики: -log(prob) * Reward
    policy_loss = -m.log_prob(torch.tensor(action_index)) * reward
   
    # Расчет дискретной энтропии распределения
    entropy_loss = m.entropy()
   
    # Комбинированный функционал потерь
    total_loss = policy_loss — beta * entropy_loss
   
    optimizer.zero_grad()
    total_loss.backward()
    optimizer.step()

Результаты симуляции смены режима (эпизод 1000): Vanilla REINFORCE застревает на вероятности лонга 100% и полностью сливает профит. Модель с регуляризацией энтропии удерживает базовую вероятность лонга на уровне ~0.93, оставляя стабильные 7% на случайное сэмплирование коротких позиций. При наступлении смены режима скрытые шорты начинают приносить профит (R_t = +1.0). Градиент мгновенно считывает изменение знака награды, и модель за 150 шагов полностью перестраивает логиты, адаптируясь под медвежью фазу.

 

Сравнение целевых функций: Online Learning против Reinforcement Learning

Критерий

Online Learning (Passive-Aggressive SGD)

Reinforcement Learning (Policy Gradient + Entropy)

Горизонт планирования

Локальный, «жадный» (минимизация ошибки на шаге t+1).

Глобальный, долгосрочный (максимизация кумулятивной дисконтированной награды).

Целевая функция

Точность прогнозирования движения знака цены.

Траектория геометрической доходности и минимизация Max Drawdown.

Поведение модели

Оптимизирует точность модели на текущей свече, игнорируя кумулятивные просадки капитала во времени.

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

 


Читайте на SMART-LAB:
Фото
📃 Продать жалко, держать бессмысленно — что делать с нерастущими акциями?
Даже у самых опытных участников рынка идеи периодически не срабатывают. Когда акция пошла не в ту сторону, сложно оценить её...
Дошли до точки: новые «Итоги недели»
Доллар по 28, инфляция в минусе. «Жизнь налаживается», — шутят эксперты. Согласен ли с ними рынок? Какие процессы в экономике говорят об обратном?...
Фото
#MGKL: Совет директоров рекомендовал выплатить дивиденды в размере 49% от чистой прибыли за 2025 год
22 мая 2026 года Совет директоров ПАО «МГКЛ» рекомендовал годовому общему собранию акционеров утвердить выплату дивидендов по итогам 2025...
Фото
Сделки УК Первой! Полностью продали одну нефтегазовую компанию в НОЛЬ чтобы купить другие истории
Продолжаю делать серию ежемесячных постов с отслеживанием покупок/продаж профессиональными управляющими. Особенно теми, кто управляет МИЛЛИАРДАМИ...

теги блога Михаил Шардин

....все тэги



UPDONW
Новый дизайн