5 вересня 2026 · ризик

У вашому бектесті не було ліквідації: маржа, mark price і пропущений рівень кредитного плеча

У вашому бектесті не було ліквідації: маржа, mark price і пропущений рівень кредитного плеча

Минулого місяця згенерована стратегія видала криву капіталу з просіданням на 63%. Глибоким, болючим, але з чітким відновленням протягом наступних шести тижнів — таким графіком, на який дослідник примружиться й вирішить, що з цим можна жити, якщо зменшити розмір позиції. Я повторно прогнав її через маржинальний механізм, який враховує рівні підтримувальної маржі. Рахунок ліквідували на 41-й день, посеред цього просідання, а все, що було після 41-го дня, виявилося вигадкою.

Це найдорожчий тип помилки в бектестах із тих, що я знаю, бо вона не спотворює дохідність на кілька базисних пунктів. Вона вилучає із симуляції поглинальний стан. Стратегія, яка може обнулитися, і стратегія, яка не може, — це різні стратегії. А бектест без перевірки маржі не скаже, яка саме у вас.

Ось три помилки, які я постійно бачу.

Помилка №1: кредитне плече як число, на яке множать дохідність

Найпоширеніший варіант. Ви обчислюєте ряд дохідності за сигналами, вирішуєте торгувати з плечем 10x і множите на нього. Іноді це трохи складніше — розмір позиції становить equity * leverage / price — але стан рахунку все одно зводиться до скалярної величини, яка то зростає, то зменшується. Немає балансу маржі, обмеження номіналу чи умови завершення.

Наслідки малопомітні, тому помилка й переживає перевірку. Sharpe не залежить від масштабу, тож головний показник не змінюється, коли ви переходите з плеча 3x на 30x, і дослідник робить висновок, що кредитне плече — безкоштовний регулятор, який обмінює волатильність на дохідність. Максимальне просідання зростає лінійно й випадково за арифметикою залишається меншим за 100%, бо ряд помножених дохідностей асимптотично наближається до нуля, але не перетинає його. Помножте денну дохідність -9% на 12 — у коректній версії отримаєте -108%, а в наївній — «-108%, але крива капіталу все ще вище нуля»; усе залежить від того, чи ви перемножували дохідності, чи просто їх додавали. Я бачив обидва варіанти.

Проблема в тому, що кредитне плече застосовується не до вашої дохідності. Воно застосовується до вашої застави, а застава — це обмежений ресурс, за яким біржа стежить щосекунди. Щойно її стає менше за вимогу підтримувальної маржі, позиція вам більше не належить.

Ознака помилки: якщо симуляція не може зафіксувати повну втрату за жодного плеча, вона не моделює кредитне плече.

Помилка №2: ціна ліквідації, обчислена лише за кредитним плечем

Наступний рівень складності — додати перевірку ліквідації, зазвичай приблизно таку: на плечі 20x несприятливий рух на 5% знищує маржу, тож лонг ліквідується за ціною входу × 0.95. Просто, зрозуміло й неправильно одразу з чотирьох причин.

Безстрокові ф’ючерси не ліквідують вас за встановленим вами кредитним плечем. Для цього використовують ставку підтримувальної маржі, яка зростає разом із номіналом позиції та залежить від рівня в таблиці. Приблизна структура для BTCUSDT USDⓈ-M, яка змінюється, коли біржі оновлюють вимоги:

Номінал позиції (USDT)Ставка підтримувальної маржіМакс. кредитне плече
0 – 50,0000.40%125x
50,000 – 600,0000.50%100x
600,000 – 3,000,0001.00%50x
3,000,000 – 12,000,0002.50%20x
12,000,000 – 70,000,0005.00%10x

Тож несприятливий рух, який може витримати ізольований лонг, становить приблизно 1/L − MMR, а не 1/L. На плечі 20x у другому рівні це 5% − 0.5% = 4.5%. Пів відсотка здається похибкою округлення. Для BTC за ціни 84,000 це 420 доларів зміни ціни, а під час різкої годинної свічки 420 доларів — різниця між шпилькою, яка вибила вас із позиції, і тією, яка не вибила. Кожна шпилька перетворюється на підкидання монети, але шанси щоразу зміщені на вашу користь.

А ще є комісії. Комісія taker за вхід списується з маржі відразу після виконання ордера: 0.045% від номіналу 500,000 — це 225 USDT із балансу маржі 25,000, і ціна ліквідації змінюється ще до того, як позиція встигне хоч щось зробити. Фандинг впливає так само, постійно, а на номінал із кредитним плечем його вплив набагато більший, ніж очікують дослідники:

4.55%фактичний несприятливий рух до ліквідації на плечі 20x, з урахуванням комісії за вхід
0.60%щоденні витрати на фандинг від маржі за плеча 20x, 0.01%/8h
18%такої маржі зникає за місяць без змін ціни

Позиція, яка простоює тридцять днів — без несприятливого руху й угод, — спалює майже п’яту частину застави й помітно наближає ціну ліквідації. Ось третя й четверта помилки: рівень змінюється, коли ви нарощуєте позицію. Позиція, що починається на рівні 0.5% і після усереднення потрапляє на рівень 1.0%, матиме гіршу ціну ліквідації, ніж та, яку ви обчислили під час входу. А за крос-маржі застава спільна для кількох позицій, тож виживання вашого лонгу BTC залежить від того, що відбувається з вашим шортом ETH. Якщо ви моделюєте крос-маржу як набір незалежних ізольованих позицій, то структуру залежностей у власному рахунку ви відтворили навиворіт.

Помилка №3: розрахунок ліквідації за неправильною ціною, не в той момент і за неправильною ціною виконання

Припустімо, рівень спрацювання ви визначили правильно. Тепер питання: яка ціна має його перетнути, коли перевіряти й за якою ціною виконають ордер?

Ліквідацію запускає mark price — індекс із кількох спотових майданчиків із згладженою складовою базису, спеціально розроблений так, щоб одиночна біржова шпилька не впливала на нього надмірно. Ваш стоп-лос, залежно від налаштувань, імовірно спрацьовує за останньою ціною угоди. Ці дві ціни розходяться саме тоді, коли це має найбільше значення. Під час каскадного падіння остання ціна безстрокового ф’ючерсу може на десятки секунд опинитися на 1–2% нижче за mark price. Бектест, який перевіряє і стоп, і ліквідацію за мінімумом тієї самої свічки OHLCV, моделює біржу, якої не існує.

Обидві помилки тут актуальні, і вони не компенсують одна одну. За останньою ціною ви ліквідуєтеся на шпильках, які біржа проігнорувала. За mark price можна не врахувати ситуацію, коли змінилася саме вона: розходження індексу на спотовому майданчику — цілком реальна причина ліквідації за ціною, якої не було на безстроковому ф’ючерсі, яким ви торгували.

Тепер про виконання. Наївні механізми закривають позицію за ціною ліквідації й обліковують збиток так, наче це стоп-ордер. Насправді позицію перебирає механізм ліквідації за ціною банкрутства — рівнем, на якому ваша маржа дорівнює нулю. Ця ціна гірша за рівень спрацювання, а зверху ще стягується комісія за проведення ліквідації, розмір якої залежить від рівня й на нижчих рівнях становить близько 1% від номіналу. На плечі 20x 1% від номіналу — це 20% маржі, що у вас залишилася. Якщо механізм виконає ордер нижче ціни банкрутства, різницю покриє страховий фонд. А на деяких майданчиках, якщо фонд вичерпається, соціалізований збиток зачепить і прибуткову сторону книги ордерів. Реалізований збиток не дорівнює просіданню до ціни ліквідації. Він більший, і найбільше перевищення припадає саме на ті дні, коли книга була достатньо малоліквідною, щоб наслідки виявилися найгіршими.

Тут також діє питання послідовності подій усередині свічки, але наслідки ще серйозніші, ніж зазвичай. Якщо одна 1-хвилинна свічка містить і ваш рівень тейк-профіту, і рівень ліквідації, бектест, який перевіряє виходи до маржі, спокійно зафіксує прибуток. Біржа перевіряє маржу за кожним оновленням mark price — приблизно раз на секунду, раніше за будь-яку іншу подію, на яку ви могли розраховувати.

Що натомість має враховувати механізм

Нічого екзотичного не потрібно. Потрібно зберігати стан. Рахунок — це об’єкт із балансом, а не ряд дохідності. На кожній свічці його оновлюють у послідовності, якої дотримувалася б біржа:

  1. Баланс гаманця й нереалізований PnL — окремо. Коефіцієнт маржі — це підтримувальна маржа, поділена на баланс маржі, до якого входить нереалізований PnL. Якщо змішати ці величини, позиція зі збитком матиме вигляд краще забезпеченої заставою, ніж є насправді.
  2. Таблиця рівнів для кожного символу з версіями за датами. Рівні переглядають. Бектест за 2023 рік, запущений на рівнях 2026 року, містить непомітний загляд у майбутнє — зазвичай на вашу користь, адже з часом біржі здебільшого знижували вимоги до основних активів.
  3. Ряд mark price, а не лише свічки. Якщо ви не можете отримати історію mark price, вкажіть це в результатах і використайте консервативний наближений показник. Ніколи не підставляйте останню ціну мовчки.
  4. Спершу перевіряйте маржу в послідовності подій свічки, до стопів, цілей, сигналів і ребалансування.
  5. Виконання за ціною банкрутства плюс комісія за проведення ліквідації; ставку комісії беріть із того самого рядка таблиці, що й ставку підтримувальної маржі.
  6. Поглинальний кінцевий стан. Коли капітал обнуляється, прогін завершується. Без перенесення бази, без «вважатимемо, що трейдер поповнив рахунок», без продовження ряду з новим номіналом.

Саме останнє правило спричиняє найбільше суперечок. Хтось завжди зауважує, що реальний дилинговий відділ вніс би додаткову заставу, тож завершувати симуляцію — надмірно суворо. Можливо. Але твердження «ця стратегія працює, якщо після краху й далі заливати в неї гроші» варто саме так і сформулювати, а потім цілеспрямовано перевірити, додавши поповнення як явний параметр, а не приховавши його у налаштуваннях за замовчуванням. Коли записуєш це без прикрас, більшість виявляє, що насправді не це мала на увазі.

Практична користь усього цього така: коли ви запускаєте ту саму стратегію на паперовому рахунку паралельно з торгівлею на реальному майданчику, коефіцієнт маржі, який показує біржа, і коефіцієнт, обчислений симулятором, мають увесь день відрізнятися лише на один-два базисні пункти. Це можна безкоштовно перевіряти щохвилини для кожної відкритої позиції. Це найдешевша перевірка узгодженості в усьому стеку, але її майже ніхто не запускає. Коли два значення розходяться, має рацію біржа, а у вас є помилка, яку варто знайти, перш ніж просідання зробить це за вас.

безстрокові ф’ючерсикредитне плечеліквідаціямаржинальний механізмбектестування
ПоділитисяXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← Усі статті