Разработка RL-агента для торговли на базе TD3

Овероценка Q-функции — системная ошибка DDPG, которая ломает обучение в трейдинговых задачах. Алгоритм TD3 (Twin Delayed Deep Deterministic Policy Gradient, предложенный Scott Fujimoto в работе <cite>Addressing Function Approximation Error in Actor-Critic Methods</cite> [Addressing Function Approxim

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    997
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1002

Овероценка Q-функции — системная ошибка DDPG, которая ломает обучение в трейдинговых задачах. Алгоритм TD3 (Twin Delayed Deep Deterministic Policy Gradient, предложенный Scott Fujimoto в работе Addressing Function Approximation Error in Actor-Critic Methods Addressing Function Approximation Error in Actor-Critic Methods) решает эту проблему тремя механизмами: twin critics, delayed policy updates и target smoothing. Мы применяем TD3 для построения торговых агентов с непрерывным position sizing, обеспечивая стабильное обучение и воспроизводимые результаты на реальных рынках.

В одном из проектов переход с DDPG на TD3 поднял Sharpe ratio с 0.8 до 1.6 на 15-минутных свечах фьючерсов S&P 500. Ключевым фактором стало подавление overestimation bias, которое в DDPG приводило к переторговке и частому попаданию в drawdown.

Проблемы, которые решает TD3

Overestimation bias. Стандартный DDPG завышает value-оценки, и policy оптимизируется под нереалистичные цели. TD3 использует два критика с target = min(Q₁, Q₂), что даёт консервативную аппроксимацию.

Нестабильное обучение. Быстрое обновление policy относительно critics приводит к oscillation. TD3 обновляет actor каждые d шагов (d=2), позволяя Q-функциям стабилизироваться.

Гиперактивная торговля. Без регуляризации агент совершает избыточные сделки. Добавление target policy smoothing с Gaussian noise (σ=0.2) и штраф за транзакционные издержки (0.1% на сделку) решают проблему.

Как TD3 решает проблему овероценки?

Два независимых критика Q₁ и Q₂ работают как взаимная проверка. Target value:

y = r + γ · min(Q₁_target(s', π(s')), Q₂_target(s', π(s'))) 

Такая оценка систематически ниже true value, но не завышает. На практике это снижает variance обновлений и улучшает итоговую доходность.

Когда TD3 выигрывает у SAC?

TD3 — детерминированная policy, SAC — стохастическая. TD3 даёт воспроизводимые сигналы, что критично для live-торговли. SAC лучше при высокой неопределённости, но для трендовых рынков TD3 показывает более стабильный Sharpe.

Критерий TD3 SAC
Тип policy детерминированная с exploration noise стохастическая с entropy bonus
Воспроизводимость высокая (одинаковые действия при одном state) низкая (из-за стохастичности)
Рынки трендовые, низкая энтропия волатильные, высокая неопределённость
Exploration explicit noise schedule implicit через entropy

Архитектура для трейдинга

class TD3Actor(nn.Module): def __init__(self, state_dim, action_dim, max_action): super().__init__() self.net = nn.Sequential( nn.Linear(state_dim, 256), nn.ReLU(), nn.Linear(256, 256), nn.ReLU(), nn.Linear(256, action_dim), nn.Tanh() ) self.max_action = max_action def forward(self, state): return self.net(state) * self.max_action class TD3Critic(nn.Module): def __init__(self, state_dim, action_dim): super().__init__() # Q1 self.q1 = nn.Sequential( nn.Linear(state_dim + action_dim, 256), nn.ReLU(), nn.Linear(256, 256), nn.ReLU(), nn.Linear(256, 1) ) # Q2 self.q2 = nn.Sequential( nn.Linear(state_dim + action_dim, 256), nn.ReLU(), nn.Linear(256, 256), nn.ReLU(), nn.Linear(256, 1) ) def forward(self, state, action): sa = torch.cat([state, action], dim=1) return self.q1(sa), self.q2(sa) def q1_forward(self, state, action): sa = torch.cat([state, action], dim=1) return self.q1(sa) 

Continuous position sizing и reward

Action space: [-1, 1] для каждого актива, с бюджетным ограничением Σ|wᵢ| ≤ 1. Reward включает Sharpe-подобную метрику и штраф за изменения позиций:

def reward_fn(returns_series): if len(returns_series) < 20: return returns_series[-1] mean_r = np.mean(returns_series[-20:]) std_r = np.std(returns_series[-20:]) + 1e-8 sharpe = mean_r / std_r return sharpe * returns_series[-1] position_change = np.abs(new_position - old_position) transaction_cost = position_change * 0.001 reward -= transaction_cost 

Важно: добавление штрафа за транзакции (0.1% на сделку) существенно снижает количество сделок и улучшает чистую доходность. В одном проекте это сократило частоту торгов на 40% при сохранении общей прибыли.

Какие гиперпараметры задавать?

Параметр Типичное значение Комментарий
Exploration noise σ 0.1–0.3 Линейный decay до 0.02 за 500k шагов
Policy delay 2 Обновление actor каждый 2 шага
Target noise 0.2 (std) Добавляется к action в target
Buffer size 1e6 Для multi-asset увеличить до 2e6
Learning rate 1e-3 (actor) / 5e-4 (critic) Adam optimizer, возможен decay по cosine

Для multi-asset сценариев action space нормируется так, чтобы сумма абсолютных весов не превышала 1. Это легко реализовать через softmax-подобное преобразование или проекцию на симплекс.

Почему стоит выбрать TD3 для вашего трейдинг-проекта?

TD3 обеспечивает детерминированность действий при одном и том же state, что критично для бэктестинга и live-торговли. Вы получаете воспроизводимую стратегию, которую можно протестировать на исторических данных без стохастических флуктуаций. Кроме того, механизм target smoothing делает агента устойчивым к шуму рыночных данных.

Что входит в работу?

  • Полная реализация TD3-агента (actor/critic сети, буфер, обучение)
  • Пайплайн сбора данных и симуляционное окружение
  • Подбор гиперпараметров и кросс-валидация
  • Интеграция с брокерским API (Interactive Brokers, Alpaca, ваш)
  • Документация по воспроизведению и модификации
  • Обучение команды (1 сессия) и гарантийная поддержка 3 месяца

Процесс разработки под ключ

  1. Анализ — исторические данные, метрики, бенчмарки
  2. Проектирование — state/action/reward, симуляционное окружение
  3. Обучение — подбор гиперпараметров, decay exploration, мониторинг
  4. Тестирование — out-of-sample backtest, stress-test на кризисных периодах
  5. Деплой — интеграция с брокерским API, настройка мониторинга и алертов

Опыт нашей команды в RL-трейдинге — более 5 лет, реализовано 10+ проектов для фондов и частных трейдеров. Свяжитесь с нами для предварительной консультации — мы оценим ваш проект за один рабочий день. Закажите консультацию по RL-трейдингу, чтобы обсудить возможности внедрения TD3 в вашу стратегию.