Разработка алгоритма dynamic position sizing для торговых систем

Фиксированный объём позиции незаметно съедает прибыль на волатильном рынке. Мы разрабатываем под ключ алгоритм dynamic position sizing: аудит данных, расчёт риска, конфигурации и регламенты для вашей команды. Сокращаем просадку без роста числа сделок.

Разработка алгоритма dynamic position sizing для торговых систем

Биржи и торговые платформыСредний~3-5 дней
Часто задаваемые вопросы

Dynamic position sizing: почему фиксированный объём ломает систему

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

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

Dynamic position sizing переводит объём из константы в функцию от риска: размер позиции считается от расстояния до стопа, текущей волатильности и допустимой доли капитала на сделку. Расширяется стоп или растёт разброс — объём уменьшается, а денежный риск остаётся в заданном коридоре. Узкий стоп и спокойный режим — объём растёт, но ограничен лимитом на инструмент и корреляцией с уже открытыми позициями.

Эффект — управляемая просадка и ровная кривая доходности вместо взлётов на тренде и обвалов на развороте. Формулу калибруют на истории, проверяют на устойчивость к проскальзыванию и зажимают сверху максимальным объёмом.

Что даёт управляемый размер позиции: эффект в метриках

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

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

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

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

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

Dynamic position sizing: сравнение подходов и их ограничения

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

Подход Когда уместен Где начинает вредить
Фиксированная доля капитала Устойчивая статистика, независимые сделки, предсказуемое снижение объёма в просадке Игнорирует волатильность: на широком стопе риск на сделку в разы выше расчётного
Расчёт от волатильности (ATR, скользящее отклонение) Разнородные инструменты, нужен равный риск на каждую сделку Запаздывает на разрывах и смене режима; при узком стопе раздувает объём до недопустимого плеча
Дробный критерий Келли Много сделок, устойчивое положительное матожидание, есть запас по просадке Ошибка в оценке вероятности вверх даёт кратный рост риска; без дробления непригоден
Целевая волатильность портфеля Коррелированные позиции, нужен заданный профиль риска В стрессе корреляции растут — фактический риск выше расчётного, снижение плеча приходит с задержкой
Равный риск на инструмент Немного слабо связанных активов, простая логика без подгонки Переоценивает низковолатильные инструменты и копит риск в одном сегменте
Догон после убытка Только как контрпример в тестах Одна длинная серия убытков обнуляет счёт

Сравнивать подходы в отрыве от данных бессмысленно: метод проверяют на истории с комиссиями, проскальзыванием и худшей серией убытков, а не на средней доходности. Ограничения проявляются не в типичном сценарии, а при смене режима — поэтому в тест закладывают участки с ростом волатильности и одновременным движением инструментов.

Как строится алгоритм: этапы от аудита данных до передачи

Порядок работ одинаков и для нового модуля, и для переделки существующего: сначала данные и логика, потом код. Так отсекается самая дорогая ошибка — реализация поверх неверно понятого входа.

  1. Аудит торговой логики и данных. Разбираем входы, полноту истории, корректность таймстемпов и сплитов. Пропуски и переписанные задним числом котировки искажают расчёт объёма сильнее, чем сама формула.
  2. Схема расчёта. Определяем, что ограничивает объём: волатильность инструмента, риск на сделку, корреляция с открытыми позициями, лимиты портфеля. Правила сводим в матрицу приоритетов, чтобы ограничители не перебивали друг друга.
  3. Реализация отдельным слоем. Модуль изолирован от генерации сигналов, входы и выходы полностью логируются — размер позиции на любую дату воспроизводится по логу, а не восстанавливается догадками.
  4. Историческая проверка. Прогон на всей доступной истории с издержками и проскальзыванием, затем на данных вне выборки. Смотрим не доходность, а разброс просадок и поведение в разных режимах рынка.
  5. Стресс-сценарии. Ломаем намеренно: разрыв цены, провал ликвидности, распад корреляций, обрыв канала данных. Ограничители должны срабатывать там, где риск максимален.
  6. Передача. Отдаём код, конфигурации, схему расчёта и метрики для наблюдения. Правка параметров идёт через тот же цикл проверки, а не на живом счёте.

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

Что передаём на руки: модуль расчёта, конфигурации, регламенты

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

  • Модуль расчёта размера позиции: исходный код, порядок сборки, точки подключения к торговому контуру и описание поведения при отказах внешних источников данных.
  • Конфигурации: базовый риск на сделку, лимиты по инструментам и направлениям, коэффициенты волатильности, пороги автоматического снижения объёма и полной остановки торговли.
  • Документация по алгоритму: формула, список входных и выходных параметров, границы применимости, разбор случаев разрывов ликвидности и проскальзывания.
  • Набор проверочных сценариев с эталонными результатами прогонов на исторических данных — правку коэффициентов можно сравнить с базой до вывода в торговлю.
  • Регламент изменений: кто согласует правку параметров, как версионируются конфигурации, в каком порядке выполняется откат к предыдущему набору.
  • Схема интеграции: форматы данных, периодичность обновления, обработка задержек и расхождений между источниками.
  • Инструкция по сопровождению и перечень наблюдаемых метрик: отклонение фактического объёма от расчётного, частота срабатывания защитных порогов, доля отказов расчёта.
  • Матрица ответственных: кто владеет модулем, кто подтверждает изменения, как передаётся знание новому инженеру.

Такой комплект снимает зависимость от авторов алгоритма: параметры меняются штатно, каждое изменение проверяемо и обратимо, а логика расчёта остаётся прозрачной для риск-контроля. Опишите ваш торговый контур — вернёмся с оценкой и планом передачи.

Кейс: сокращение просадки без роста числа сделок

Портфель заказчика работал с фиксированным объёмом позиции: размер лота не зависел ни от волатильности инструмента, ни от расстояния до защитного стопа. На живом счёте на Binance это давало просадку 34% от капитала, а выход из неё занимал около трёх месяцев — серия из восьми убыточных сделок подряд выбивала счёт сильнее, чем допускала статистика стратегии. Сигналы при этом оставались рабочими: число сделок и их распределение по времени вопросов не вызывали.

Что изменили

Между сигналом и исполнением появился слой dynamic position sizing: объём считается от текущей волатильности и расстояния до стопа, риск на одну сделку ограничен долей капитала, на коррелирующие активы действует общий лимит. Отдельно поставлен предохранитель — при серии убытков целевой риск ступенчато снижается и возвращается к базовому после восстановления кривой доходности.

Показатель До После
Максимальная просадка 34% 17%
Восстановление капитала ~3 месяца 5 недель
Сделок в месяц 62 60–64
Размер позиции фиксированный 0,4–1,6 от базовой

Набор инструментов, логика входа и частота торговли остались прежними — изменилось только распределение риска между сделками. Пересчёт объёма занимает доли секунды на стороне исполнения, поэтому задержка выставления ордера не выросла.

Чем расчёт по волатильности отличается от расчёта по риску?

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

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

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

Выбор диктует горизонт удержания и характер системы. Для коротких сделок, где важна быстрая реакция на смену режима, базой становится волатильность; для трендовых систем с широкой защитой надёжнее расчёт по риску. Рабочий компромисс — база от риска, множитель от волатильности и ограничение сверху: сравнение логик здесь не про «какая правильнее», а про то, какой класс ошибок допустим в вашей задаче.

Технические сомнения: данные, задержки, устойчивость к сбоям

Инженерные сомнения перед выводом dynamic position sizing в рабочий контур обычно касаются трёх вещей: полноты исторических данных, поведения при обрыве канала и совместимости с уже работающей системой. Ниже — короткие ответы на то, что спрашивают чаще всего.

Насколько полна историческая выборка и что делать с пропусками?

Историю проверяем на разрывы, дубли, выбросы и расхождение с независимым источником. Пропуски либо восстанавливаем по смежному источнику, либо помечаем как непригодные — размер позиции на таком участке не пересчитывается, чтобы в модель не попал артефакт. Отдельно держим срез по периодам высокой волатильности: на спокойном и стрессовом рынке веса ведут себя по-разному.

Как система ведёт себя при задержке отклика или обрыве связи?

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

Что с совместимостью и можно ли вернуться к прежней логике?

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

Обсудим задачу: какие данные нужны для оценки алгоритма

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

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

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

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

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

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

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1395
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142