← ДокументацияDOCS / Optimization / Бонусы за снижение объёма

Бонусы за снижение объёма торгов

Стратегии достижения большей доходности меньшим объёмом торговых операций

Введение: принцип эффективности торговли

В алгоритмическом трейдинге существует фундаментальная проблема: как достичь максимальной доходности при минимальном объёме торговых операций. Традиционные подходы часто приводят к стратегиям с чрезмерной частотой сделок, что увеличивает комиссионные издержки и снижает чистую прибыль.

Ключевая идея:

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

Почему лучше начинать без volume-bonus

Включение бонуса за снижение объёма с самого начала обучения может привести к нежелательным последствиям. Рассмотрим основные причины для поэтапного внедрения.

Причины отложенного включения

1. Исследование действий (exploration)

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

2. Сбалансированность сигналов

В начале обучения сигнал «PNL – комиссия» уже шумный. Добавление ещё одного (оборотного) с сильным весом повышает дисперсию градиента и риск скатиться в локальный минимум.

3. Простота отладки

Без volume-бонуса легко понять причину падения reward: виноваты рынок, позиция или ошибка кода. С бонусом причинно-следственная связь менее очевидна.

Проблемы раннего включения

Ограниченное исследование: Агент избегает крупных позиций, не изучая их потенциал

Локальный минимум: Стратегия «торгую мало → получаю стабильный бонус»

Сложность диагностики: Трудно определить источник проблем с наградой

Поэтапное внедрение бонуса

Рекомендуется трёхэтапная стратегия внедрения бонуса за снижение объёма, позволяющая агенту адаптироваться к новым условиям без резких изменений в поведении.

ЭтапКритерий переключенияПараметры
A. "Warm-up"n_env_steps < N_warmup или средний дневной оборот < N × депозитuse_volume_decrease_bonus = False
B. "Growth"Агент стабильно генерирует PnL, но оборот растёт быстрее депозитаВключаем бонус с малым коэффициентом: λ ≈ 0.1–0.2
C. "Efficiency tuning"Модель умеет зарабатывать, но нужно улучшить Sharpe/комиссионную нагрузкуПовышаем коэффициент до 0.3–0.5; при необходимости экспоненциальная шкала

Детали реализации

Бонус за снижение объёма реализуется как дополнительная компонента функции награды, которая поощряет агента за эффективное использование капитала.

python
# Бонус за уменьшение объёма
growth = max(prelim_balance - old_peak, 0.0)
volume_bonus = (growth if self.use_volume_decrease_bonus else 0.0) \
    * (1 / (1 + total_trade_volume / operating_volume))

# Интеграция в общую награду
total_reward = reward_after_bonus + volume_bonus
norm_total_reward = total_reward / operating_volume

Механизм работы:

  • Бонус пропорционален росту баланса относительно пика
  • Штрафуется высокий оборот относительно операционного объёма
  • Коэффициент может настраиваться в зависимости от этапа обучения

Сравнение с prod_score

Важно различать бонус за снижение объёма (use_volume_decrease_bonus) и комбинированный скор (prod_score), так как они работают на разных уровнях и решают различные задачи.

УровеньМеханизмЧто делает
Step-reward (on-policy)use_volume_decrease_bonusНа каждом шаге выдаёт дополнительный бонус за уменьшение позиций → агент получает сигнал «не раздувай объём» во время обучения
Model-checkpoint (off-policy)prod_scoreРешает, какой checkpoint сохранить после целой серии эпизодов. Смотрит на финальный PNL, DD и оборот — то есть «что произошло», а не «что пытались сделать»

Ограничения use_volume_decrease_bonus:

  • Не гарантирует, что итоговый checkpoint экономичен — бонус может быть перекрыт случайными выгодными объёмными сделками
  • Работает только во время обучения. Для отложенной валидации бонус не начисляется

Практический пример

Рассмотрим сравнение двух моделей, демонстрирующее преимущества учёта оборота в оценке качества:

МодельPNLMax DDTurnovertrain_idxPNL/Turnoverprod_score
A$1,2006%$600,0000.1130.00200.083
B$1,0504%$200,0000.1000.00530.085

Анализ результатов:

  • train_idx говорит «А» лучше (0.113 > 0.100)
  • Но PNL/Turnover у «В» в 2.5 раза выше
  • Применив prod_score, выигрывает В (0.085 > 0.083) — модель чуть менее доходная, зато в 3х экономичнее по обороту

Оптимальная стратегия внедрения

Рекомендуется комбинированный подход, сочетающий поэтапное включение бонуса с комплексной оценкой качества модели.

Логика работы

Во время обучения

Bonus-shaping (use_volume_decrease_bonus) чуть подталкивает градиенты в сторону «меньше объёма», направляя исследование в нужную область

При выборе модели

Комбинированный prod_score смотрит на факт: «Сколько же реально заработала стратегия и какой ценой по обороту»

Ключевой принцип: Бонус за снижение объёма и prod_score не заменяют, а дополняют друг друга: первый помогает обучаться «аккуратнее», второй — выбрать, что действительно выгоднее в продакшене.

Заключение: ценность эффективного использования капитала

Внедрение бонусов за снижение объёма торгов обеспечивает следующие преимущества:

Повышение эффективности

Достижение большей доходности меньшим объёмом торговых операций

Снижение издержек

Минимизация комиссионных расходов и рыночного импакта

Улучшение масштабируемости

Стратегии становятся более пригодными для крупных объёмов капитала

Повышение устойчивости

Меньшая зависимость от рыночной ликвидности и комиссий

Результат: Поэтапное внедрение бонусов за снижение объёма в сочетании с комплексной оценкой качества модели обеспечивает создание стратегий, оптимально использующих капитал и минимизирующих торговые издержки.

QUANT LAB — Документация