Вы обучили DRL-агента на истории — бэктест блестящий, но на live-рынке капитал тает. Причина — concept drift: рыночные режимы сменяют друг друга (bull, bear, sideways, high-vol), и единая политика не успевает адаптироваться. Multi-Agent Reinforcement Learning (MARL) решает это, разбивая задачу на специализированных агентов. Мы занимаемся разработкой RL систем для трейдинга более 7 лет и предлагаем внедрение MARL на стеке PyTorch, Ray и PettingZoo, используя проверенные архитектуры: CTDE, COMA, иерархический MARL.
В одном проекте с портфелем из 10 активов MARL снизил максимальную просадку с 18% до 12% и увеличил Sharpe с 1.2 до 1.7. Инвестиции в разработку окупились за 6 месяцев торговли. По сравнению с single-agent RL, MARL позволяет снижать просадки на 20–35% и повышать Sharpe ratio на 0.3–0.7, что делает его предпочтительным для управления капиталом.
Почему MARL эффективнее single-agent RL в трейдинге?
Single-agent RL страдает от concept drift: стратегия, работавшая в bull market, теряет эффективность при смене режима. MARL решает эту проблему через специализацию. Каждый агент обучается на определённом типе рыночных движений, а мета-агент (координатор) адаптивно взвешивает их рекомендации. Это снижает просадки на 20–35% и увеличивает Sharpe ratio на 0.3–0.7 по сравнению с single-agent RL. Кроме того, MARL позволяет диверсифицировать стратегии, что критично для портфелей с несколькими активами.
Как MARL справляется с изменением рыночных режимов?
Один универсальный агент страдает от concept drift: при bull market работает momentum-стратегия, при sideways — mean reversion, при high-volatility — хеджирование. MARL решает через специализацию и ансамблирование. Декомпозиция задачи:
- Agent₁: Momentum/Trend following (RSI, MACD, Moving Averages)
- Agent₂: Mean Reversion (Bollinger Bands, Z-score)
- Agent₃: Volatility/Options-like hedging
- Meta-agent (coordinator): взвешивает рекомендации агентов
Разделение по активам:
- Agent per asset: каждый агент специализируется на одном инструменте
- Hierarchical: master agent управляет капиталом, sub-agents торгуют секторами
Как распределить reward между агентами?
Ключевой вопрос MARL — как делить общий PnL между агентами. Варианты:
- Individual rewards: каждый оптимизирует свой PnL — возможны конфликты (агенты торгуют друг против друга).
- Shared team reward: все получают одинаковый reward (общий PnL) — решает конфликты, но затрудняет атрибуцию.
- COMA (Counterfactual Multi-Agent): reward агента i = общий reward - counterfactual (что было бы без агента i). Справедливая атрибуция вклада.
| Метод | Описание | Стабильность | Применимость |
|---|---|---|---|
| Individual | Каждый агент получает свой PnL | Низкая (конфликты) | Простые задачи, 2–3 агента |
| Shared | Все получают общий PnL | Высокая | Командные сценарии |
| COMA | Counterfactual baseline | Очень высокая | Комплексные портфели, 5+ агентов |
def counterfactual_reward(global_reward, baseline_rewards, agent_idx):
"""global_reward - E[reward | other agents' actions, marginalizing over agent_i]"""
return global_reward - baseline_rewards[agent_idx]
Сравнение подходов MARL
| Подход | Обучение | Исполнение | Стабильность | Сложность | Рекомендуемый сценарий |
|---|---|---|---|---|---|
| Independent Learners (IL) | Независимое | Локальное | Низкая | Низкая | Простые среды, 2–3 агента |
| CTDE (MADDPG) | Централизованное | Локальное | Высокая | Средняя | Continuous actions, до 5 агентов |
| COMA | CTDE с counterfactual | Локальное | Очень высокая | Высокая | Комплексные портфели, 5+ агентов |
Как мы это делаем: стек и кейс
Мы используем Centralized Training, Decentralized Execution (CTDE) через MADDPG на Ray RLlib. Пример иерархической системы:
Level 0 (Portfolio Manager):
Input: market regime + agent signals
Output: capital allocation weights
Level 1 (Strategy Agents):
Agent Trend: signal ∈ {buy, hold, sell} + confidence
Agent MeanRev: signal ∈ {buy, hold, sell} + confidence
Agent Momentum: signal ∈ {buy, hold, sell} + confidence
Level 2 (Risk Manager):
Input: proposed positions + portfolio state
Output: position limits + stop-loss levels
Портфельный менеджер как meta-learner:
class PortfolioManager(nn.Module):
def __init__(self, n_agents, n_assets):
super().__init__()
self.regime_detector = RegimeDetector()
self.allocation_net = nn.Sequential(
nn.Linear(n_agents * 3 + regime_dim, 128), nn.ReLU(),
nn.Linear(128, n_assets), nn.Softmax(dim=-1)
)
def forward(self, agent_signals, market_features):
regime = self.regime_detector(market_features)
x = torch.cat([agent_signals.flatten(1), regime], dim=1)
return self.allocation_net(x)
Для определения рыночного режима используем скрытую марковскую модель (HMM) с тремя состояниями: bull, bear, sideways.
Архитектура HMM для regime detection
Скрытая марковская модель (HMM) с 3 состояниями и эмиссионными распределениями Гаусса. Параметры обучаются на исторических данных методом максимизации правдоподобия (алгоритм Баума-Уэлча). На каждом шаге фильтр частиц (particle filter) оценивает текущее состояние. Это позволяет адаптивно взвешивать стратегии агентов.
Выбор фреймворка для MARL
Рекомендуем Ray RLlib с PettingZoo. Он поддерживает CTDE, COMA и распределённое обучение из коробки.
from ray.rllib.algorithms.maddpg import MADDPGConfig
config = (MADDPGConfig()
.environment(env="MultiAgentTradingEnv")
.multi_agent(
policies={
"trend_agent": (None, obs_space, act_space, {"gamma": 0.99}),
"meanrev_agent": (None, obs_space, act_space, {"gamma": 0.95}),
},
policy_mapping_fn=lambda agent_id, **kw: agent_id,
)
.training(n_step=1, tau=0.01)
)
trainer = config.build()
for i in range(1000):
result = trainer.train()
Процесс работы
- Аналитика: сбор требований, анализ рыночных данных, определение агентов и режимов.
- Проектирование: выбор архитектуры (IL/CTDE/COMA), спецификация наблюдений и действий.
- Реализация: написание кода, обучение на исторических данных, настройка гиперпараметров (learning rate, gamma, tau).
- Тестирование: backtest на OOS данных, stress-test, paper trading.
- Деплой: интеграция с брокерским API, настройка мониторинга (Weights & Biases, MLflow).
Что входит в работу
- Документация архитектуры и решений.
- Обученные модели с конфигами и логами.
- Исходный код с CI/CD (GitHub Actions).
- Мониторинг агентов (Weights & Biases, MLflow).
- Документация по эксплуатации.
- Обучение вашей команды (1–2 мастер-класса).
Практические соображения
Coordination overhead: MARL система сложнее в отладке. Нужны инструменты для мониторинга каждого агента отдельно + их взаимодействия. Overfitting к ансамблю: если агенты слишком похожи (correlation сигналов > 0.8) — ансамбль не даёт диверсификации. Вычислительная стоимость: MARL в 3–5× дороже single-agent по GPU часам. Окупается снижением просадок на 20–35% и ростом Sharpe.
Сроки
- Базовая иерархия с 2–3 агентами: 8 недель.
- Полноценная MARL система с CTDE, counterfactual rewards, regime detection: 20–24 недели.
Точная стоимость рассчитывается индивидуально после анализа ваших данных и требований. Наш опыт — 7+ лет в RL, 40+ проектов в quantitative finance. Свяжитесь с нами для оценки вашего проекта. Закажите разработку MARL-системы и повысьте доходность портфеля. Получите консультацию по MARL для вашего портфеля.







