Dynamic position sizing: чому фіксований обсяг ламає систему
Фіксований обсяг на угоду виглядає як чесний baseline: та сама величина входу, прозора статистика, просте порівняння стратегій.
Проблема в тому, що волатильність інструмента змінюється в рази, і однаковий лот у спокійному та турбулентному режимі — це принципово різний ризик на угоду.
На тихому ринку позиція ризикує одним відсотком капіталу, а на новинному викиді тим самим обсягом ловить утричі більший хід проти себе.
Далі спрацьовує асиметрія відновлення. Серія великих збитків підряд дає просадку, з якої система виходить довше, ніж падала: щоб відіграти падіння депозиту, потрібне зростання більше, ніж саме падіння.
І чим глибша просадка, тим менше капіталу залишається на наступну угоду за того самого фіксованого обсягу — дохідність зрізається саме на ділянці відновлення.
Dynamic position sizing переводить обсяг із константи у функцію від ризику: розмір позиції рахується від відстані до стопу, поточної волатильності та допустимої частки капіталу на угоду.
Розширюється стоп або зростає розкид — обсяг зменшується, а грошовий ризик залишається в заданому коридорі. Вузький стоп і спокійний режим — обсяг зростає, але обмежений лімітом на інструмент і кореляцією з уже відкритими позиціями.
Ефект — керована просадка та рівна крива дохідності замість злетів на тренді й обвалів на розвороті. Формулу калібрують на історії, перевіряють на стійкість до прослизання і затискають зверху максимальним обсягом.
Що дає керований розмір позиції: ефект у метриках
За фіксованого обсягу угоди розмір позиції задає не ризик, а зручність налаштування. Поки ринок спокійний, це терпимо, але при розширенні волатильності той самий лот дає кратно різну просадку.
Керований розмір позиції переводить розрахунок в обернену залежність: обсяг рахується від поточного ризику та доступної ліквідності, а не береться константою.
У метриках це видно за трьома речами. Глибина максимальної просадки знижується і, що важливіше, перестає бути важким хвостом — крайні значення зближуються із середніми.
Час відновлення від мінімуму кривої капіталу скорочується: зникає серія угод, де обсяг залишився незмінним після зміни режиму.
Зникає цілий клас відмов, пов’язаних із перекосом обсягу: прослизання в тонкому пулі ліквідності, каскад стопів на одному імпульсі, розгін обсягу після збитку. Це вже не окремі випадки, а категорія, яку стратегія перестає відтворювати.
Оборот рахунку змінюється нелінійно: у спокійні періоди обсяг зростає, у турбулентні падає, тому кількість угод може зберегтися за меншого середнього ризику на угоду.
Стійкість стратегії перевіряється на кількох режимах — тренд, боковик, розворот, — і значуща не пікова дохідність, а розкид результатів між ними.
Розрахунок спирається на ймовірність і співвідношення прибутку до збитку; класикою вважається критерій Келлі, але в чистому вигляді він дає агресивний обсяг, тому вводять обмежувачі: частку ризику на угоду, стелю обсягу від ліквідності пулу, паузу після серії збитків.
У підсумку управління ризиком стає налаштовуваним параметром, який можна перевірити на історії, а не побічним наслідком вибраного лоту.
Dynamic position sizing: порівняння підходів та їхні обмеження
Вибір методу розрахунку обсягу — питання сумісності з характером стратегії: частотою угод, кореляцією позицій, якістю оцінки волатильності та допустимою глибиною просадки.
Метод, виграшний на портфелі з десятка слабко пов’язаних інструментів, ламається на одній парі з рідкими входами. Нижче — альтернативи, між якими реально обирають, і точка, де кожна починає шкодити.
| Підхід | Коли доречний | Де починає шкодити |
|---|---|---|
| Фіксована частка капіталу | Стійка статистика, незалежні угоди, передбачуване зниження обсягу в просадці | Ігнорує волатильність: на широкому стопі ризик на угоду в рази вищий за розрахунковий |
| Розрахунок від волатильності (ATR, ковзне відхилення) | Різнорідні інструменти, потрібен рівний ризик на кожну угоду | Запізнюється на розривах і зміні режиму; при вузькому стопі роздуває обсяг до недопустимого плеча |
| Дробовий критерій Келлі | Багато угод, стійке додатне математичне сподівання, є запас за просадкою | Помилка в оцінці ймовірності вгору дає кратне зростання ризику; без дроблення непридатний |
| Цільова волатильність портфеля | Корельовані позиції, потрібен заданий профіль ризику | У стресі кореляції зростають — фактичний ризик вищий за розрахунковий, зниження плеча приходить із затримкою |
| Рівний ризик на інструмент | Небагато слабко пов’язаних активів, проста логіка без підгонки | Переоцінює низьковолатильні інструменти і накопичує ризик в одному сегменті |
| Наздоганяння після збитку | Тільки як контрприклад у тестах | Одна довга серія збитків обнуляє рахунок |
Порівнювати підходи у відриві від даних безглуздо: метод перевіряють на історії з комісіями, прослизанням і найгіршою серією збитків, а не на середній дохідності.
Обмеження проявляються не в типовому сценарії, а при зміні режиму — тому в тест закладають ділянки зі зростанням волатильності та одночасним рухом інструментів.
Як будується алгоритм: етапи від аудиту даних до передачі
Порядок робіт однаковий і для нового модуля, і для переробки наявного: спочатку дані та логіка, потім код. Так відсікається найдорожча помилка — реалізація поверх неправильно зрозумілого входу.
- Аудит торгової логіки та даних. Розбираємо входи, повноту історії, коректність таймстемпів і сплітів. Пропуски та переписані заднім числом котирування спотворюють розрахунок обсягу сильніше, ніж сама формула.
- Схема розрахунку. Визначаємо, що обмежує обсяг: волатильність інструмента, ризик на угоду, кореляція з відкритими позиціями, ліміти портфеля. Правила зводимо в матрицю пріоритетів, щоб обмежувачі не перебивали один одного.
- Реалізація окремим шаром. Модуль ізольований від генерації сигналів, входи та виходи повністю логуються — розмір позиції на будь-яку дату відтворюється за логом, а не відновлюється здогадами.
- Історична перевірка. Прогін на всій доступній історії з витратами та прослизанням, потім на даних поза вибіркою. Дивимося не дохідність, а розкид просадок і поведінку в різних режимах ринку.
- Стрес-сценарії. Ламаємо навмисно: розрив ціни, провал ліквідності, розпад кореляцій, обрив каналу даних. Обмежувачі мають спрацьовувати там, де ризик максимальний.
- Передача. Віддаємо код, конфігурації, схему розрахунку та метрики для спостереження. Правка параметрів іде через той самий цикл перевірки, а не на живому рахунку.
Кожен етап закінчується перевірюваним артефактом — звітом за даними, схемою, результатами прогонів. Передача тоді означає не набір файлів, а розуміння, як система поводитиметься при зміні режиму ринку.
Що передаємо на руки: модуль розрахунку, конфігурації, регламенти
Ідемо з проєкту не з набором скриптів, а із супроводжуваним контуром: модуль розрахунку розміру позиції зібраний як окремий компонент з описаним інтерфейсом, а всі рішення щодо ризику винесені в конфігурації — їх правлять без перезбирання логіки. Нижче — перелік того, що залишається у вашої команди.
- Модуль розрахунку розміру позиції: вихідний код, порядок збирання, точки підключення до торгового контуру та опис поведінки при відмовах зовнішніх джерел даних.
- Конфігурації: базовий ризик на угоду, ліміти за інструментами та напрямками, коефіцієнти волатильності, пороги автоматичного зниження обсягу й повної зупинки торгівлі.
- Документація за алгоритмом: формула, список вхідних і вихідних параметрів, межі застосовності, розбір випадків розривів ліквідності та прослизання.
- Набір перевірних сценаріїв з еталонними результатами прогонів на історичних даних — правку коефіцієнтів можна порівняти з базою до виведення в торгівлю.
- Регламент змін: хто погоджує правку параметрів, як версіонуються конфігурації, у якому порядку виконується відкат до попереднього набору.
- Схема інтеграції: формати даних, періодичність оновлення, обробка затримок і розбіжностей між джерелами.
- Інструкція з супроводу та перелік спостережуваних метрик: відхилення фактичного обсягу від розрахункового, частота спрацювання захисних порогів, частка відмов розрахунку.
- Матриця відповідальних: хто володіє модулем, хто підтверджує зміни, як передається знання новому інженеру.
Такий комплект знімає залежність від авторів алгоритму: параметри змінюються штатно, кожна зміна перевірювана й оборотна, а логіка розрахунку залишається прозорою для ризик-контролю. Опишіть ваш торговий контур — повернемося з оцінкою та планом передачі.
Кейс: скорочення просадки без зростання кількості угод
Портфель замовника працював із фіксованим обсягом позиції: розмір лота не залежав ні від волатильності інструмента, ні від відстані до захисного стопу.
На живому рахунку на Binance це давало просадку 34% від капіталу, а вихід із неї займав близько трьох місяців — серія з восьми збиткових угод підряд вибивала рахунок сильніше, ніж допускала статистика стратегії. Сигнали при цьому залишалися робочими: кількість угод і їх розподіл у часі питань не викликали.
Що змінили
Між сигналом і виконанням з’явився шар dynamic position sizing: обсяг рахується від поточної волатильності та відстані до стопу, ризик на одну угоду обмежений часткою капіталу, на корелюючі активи діє спільний ліміт.
Окремо поставлено запобіжник — при серії збитків цільовий ризик ступінчасто знижується і повертається до базового після відновлення кривої дохідності.
| Показник | До | Після |
|---|---|---|
| Максимальна просадка | 34% | 17% |
| Відновлення капіталу | ~3 місяці | 5 тижнів |
| Угод на місяць | 62 | 60–64 |
| Розмір позиції | фіксований | 0,4–1,6 від базової |
Набір інструментів, логіка входу та частота торгівлі залишилися незмінними — змінився лише розподіл ризику між угодами. Перерахунок обсягу займає частки секунди на боці виконання, тому затримка виставлення ордера не зросла.
Чим розрахунок за волатильністю відрізняється від розрахунку за ризиком?
Розрахунок за ризиком бере за вхід допустиму просадку: розмір позиції виводиться з відстані до захисної заявки та тієї частки капіталу, яку готові втратити на одній угоді.
Розрахунок за волатильністю рахує інакше — через оцінку поточного розкиду дохідності, приведену до єдиного горизонту утримання. Різниця принципова: перший відповідає на питання «скільки втрачу, якщо спрацює захист», другий — «скільки руху закладено в ринок прямо зараз».
На зміні режиму логіки розходяться найсильніше. Коли розкид дохідності розширюється, розрахунок за волатильністю стискає обсяг сам, ще до спрацювання захисту, і система не нарощує ризик у момент, коли ринок став шумнішим.
Розрахунок за ризиком тримає обсяг незмінним, поки захист стоїть на місці, а при розтягнутому захисті може позицію збільшити — це плата за простоту та передбачуваність.
Зворотний бік теж є: у вузькому коридорі розрахунок за волатильністю роздуває обсяг, і якщо за затишшям іде розрив, втрати виявляться вищими за розрахункові. Тому його доповнюють жорстким лімітом на частку позиції.
Вибір диктує горизонт утримання та характер системи. Для коротких угод, де важлива швидка реакція на зміну режиму, базою стає волатильність; для трендових систем із широким захистом надійніший розрахунок за ризиком.
Робочий компроміс — база від ризику, множник від волатильності та обмеження зверху: порівняння логік тут не про «яка правильніша», а про те, який клас помилок допустимий у вашій задачі.
Технічні сумніви: дані, затримки, стійкість до збоїв
Інженерні сумніви перед виведенням dynamic position sizing у робочий контур зазвичай стосуються трьох речей: повноти історичних даних, поведінки при обриві каналу та сумісності з уже працюючою системою. Нижче — короткі відповіді на те, що запитують найчастіше.
Наскільки повна історична вибірка і що робити з пропусками?
Історію перевіряємо на розриви, дублі, викиди та розбіжність із незалежним джерелом. Пропуски або відновлюємо за суміжним джерелом, або позначаємо як непридатні — розмір позиції на такій ділянці не перераховується, щоб у модель не потрапив артефакт.
Окремо тримаємо зріз за періодами високої волатильності: на спокійному та стресовому ринку ваги поводяться по-різному.
Як система поводиться при затримці відгуку або обриві зв'язку?
Розмір позиції рахується на закритті інтервалу, а не в момент відправлення заявки, тому короткочасний сплеск затримки розрахунок не ламає.
При обриві каналу система переходить у захисний режим: нові входи блокуються, відкриті позиції залишаються під захисними ордерами, а після відновлення зв'язку стан звіряється з торговим контуром. Завислі та дубльовані заявки відсікаються на цій звірці.
Що із сумісністю і чи можна повернутися до попередньої логіки?
Модуль підключається до наявного контуру окремим шаром: отримує сигнал і стан рахунку, віддає рішення про розмір позиції в узгодженому форматі. Логіку входу не змінюємо — її залишаємо резервним варіантом і повертаємося до неї одним параметром. Конфігурація версіонується, тому попередній набір налаштувань відновлюється без перезбирання.
Обговоримо задачу: які дані потрібні для оцінки алгоритму
Щоб розбір був предметним, а не оглядовим, потрібен зріз вашої поточної логіки: як обсяг позиції розраховується сьогодні, які дані входять у цей розрахунок і де результат розходиться з очікуванням.
Чим ближче надіслане до робочого стану системи, тим точніша оцінка — ідеальні вивантаження не потрібні.
Підійде будь-який зручний формат: таблиця, журнал угод або вивантаження з облікової системи. Ідентифікувальні дані можна замінити, на оцінку динамічного розрахунку обсягу позиції це не впливає.
- Опис поточної логіки: за яким правилом або формулою визначається розмір позиції, які входи беруть участь — сигнал, волатильність, ліміт ризику, вільний баланс.
- Журнал угод за період: мітки часу входу та виходу, ціна, обсяг, результат за кожною угодою.
- Обмеження за ризиком: частка капіталу на одну позицію та на портфель загалом, допустима просадка, правила примусового зниження обсягу.
- Поточні вузькі місця: ділянки, де алгоритм поводиться не так, як задумано, і як це проявляється.
- Ринкові ряди, на які спирається логіка: волатильність, ліквідність, зміна режиму ринку.
- Шар виконання: через що йдуть заявки, які ліміти на обсяг і частоту там задані, чи є затримки між сигналом і виконанням.
- Вимоги до контролю: які метрики мають потрапляти у звіт і за якими правилами алгоритм зупиняється.
Із цим набором ми відновимо поведінку системи на історичних даних, знайдемо, де розрахунок обсягу програє на зміні режиму, і повернемося з планом робіт та оцінкою.







