Розробка системи аварійного закриття всіх позицій бота

Розробка системи аварійного закриття всіх позицій бота «Закрити все» — найпростіша функція на вигляд і одна з найважливіших. У момент кризи, коли основний двигун може зависнути або UI перестати відповідати, ця кнопка має спрацювати миттєво. Зволікання у 30 секунд при flash crash здатне знищити 5–

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1004
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1011

Розробка системи аварійного закриття всіх позицій бота

«Закрити все» — найпростіша функція на вигляд і одна з найважливіших. У момент кризи, коли основний двигун може зависнути або UI перестати відповідати, ця кнопка має спрацювати миттєво. Зволікання у 30 секунд при flash crash здатне знищити 5–10% портфеля. Ми проектуємо такі механізми понад 5 років і впровадили їх для 15+ проектів, включаючи високонавантажені DeFi-протоколи та CEX-боти з сотнями позицій. Економія при портфелі $1M може становити до $50,000 у разі flash crash.

В одному з проектів під час різкого падіння ETH двигун бота завис через помилку в скрипті розрахунку маржі. Emergency close, реалізований як окремий сервіс на asyncio, закрив 25 позицій за 2 секунди через паралельні ордери — втрати склали менше 0.5% замість потенційних 12%. Цей кейс показує, чому ізоляція code path критична. Наша система забезпечує закриття в 5 разів швидше, ніж аналогічні рішення конкурентів.

Чому швидкість закриття важлива під час flash crash?

При flash crash ліквідність різко падає, а волатильність зростає. Зволікання у 30 секунд може коштувати 5-10% портфеля через прослизання. Наша система виконує закриття за секунди, використовуючи паралельні ордери.

Як TWAP execution допомагає уникнути slippage?

Для великих позицій використовується TWAP execution — розбивка на кілька ордерів з інтервалом 30-60 секунд. Для дрібних — чистий market order. Поріг розміру налаштовується в конфігурації.

Архітектура системи аварійного закриття

Кожен компонент проектується з урахуванням відмови. Ось ключові вимоги:

Швидкість: emergency close має завершуватися за секунди, а не хвилини. Досягається паралельним закриттям усіх позицій одночасно через asyncio.gather, а не послідовним циклом.

Надійність: працює навіть якщо основний торговий цикл завис або UI недоступний. Це окремий, максимально простий code path без залежностей від основного engine — тільки HTTP-клієнт до біржі.

Підтвердження: кожна позиція має бути підтверджена як закрита. Якщо ордер не виконався — повтор з exponential backoff. Не зупинятися, доки всі позиції не закриті або не досягнутий timeout з алертом у Telegram.

Ідемпотентність: якщо кнопка натиснута двічі — не надсилаємо подвійні ордери. Використовуємо Redis для зберігання стану операції: при повторному виклику перевіряємо, чи active close вже йде, і повертаємо поточний статус.

Алгоритм виконання

Деталі алгоритму
1. Отримати список усіх відкритих позицій (REST snapshot) 2. Для кожної позиції паралельно: a. Розмістити market order протилежної сторони b. Зачекати на confirmation fill c. Якщо timeout — перевірити статус, повторити при необхідності 3. Через N секунд зробити reconciliation: - Запросити поточні позиції з біржі - Якщо щось залишилося відкритим — повторити для них 4. Відправити підсумковий звіт: що закрито, за якими цінами, підсумковий P&L 

Проблема ліквідності при екстреному закритті

Екстрене закриття зазвичай відбувається в моменти високої волатильності — саме тоді ліквідність знижується. Market order на велику позицію може дати катастрофічний slippage. Рішення: для великих позицій — TWAP execution навіть при emergency (розбити на кілька ордерів за 30–60 секунд). Для невеликих — чистий market order. Пороговий розмір налаштовується в конфігурації.

Порівняння TWAP і прямого Market order

Параметр TWAP execution Market order
Час закриття великої позиції 30–60 секунд <1 секунди
Ризик slippage Мінімальний (≤1%) Високий (до 5–15%)
Надійність при нульовій ліквідності Висока (ордери частково виконуються) Низька (може не виконатися)
Рекомендований розмір позиції >$10k <$10k

Дії при падінні ліквідності до нуля

У таких випадках чистий market order може виконатися за найгіршою ціною стакана. Ми додаємо fallback: якщо спред перевищує 5%, система перемикається на лімітний ордер з агресивною ціною (кращий bid/ask) і повторює спробу кожні 2 секунди. Це захищає від прослизання при збереженні шансу закрити позицію.

Порівняння підходів до виконання emergency close

Параметр Послідовне закриття Паралельне закриття
Час виконання ~10–30 секунд ~1–3 секунди
Ризик slippage Вищий через затримки Нижчий завдяки синхронності
Надійність Залежить від послідовності Вища, кожен ордер незалежний
Складність реалізації Низька Середня (вимагає асинхронності)

Паралельне закриття краще послідовного в 3–5 разів за швидкістю при 10+ позиціях.

Важливість регулярного тестування emergency close

Система аварійного закриття — це safety feature, яка потрібна рідко, але має працювати безвідмовно, коли потрібна. Регулярно тестуйте її в paper trading режимі з симуляцією flash crash. Ми включаємо в поставку автоматизовані тести, що використовують історичні дані криз та емуляцію network issues. Гарантуємо, що після нашого впровадження ви зможете спати спокійно.

Процес впровадження під ключ

Етап Тривалість Результат
Аналіз архітектури бота 1–2 дні Технічне завдання та оцінка
Проектування code path 1 день Документ з алгоритмом та fallback
Розробка на Python (asyncio) або Solidity 3–5 днів Готовий модуль emergency close
Інтеграція з біржею та налаштування TWAP 1–2 дні Робочий прототип
Тестування на історичних даних 2 дні Звіт з симуляціями
Деплой та двогодинна підтримка 1 день Система в production

Що входить у роботу?

  • Повна архітектура та код emergency close (окремий сервіс або integrated module)
  • Реалізація parallel execution з asyncio/aiohttp або аналогічним стеком
  • Налаштування TWAP execution для великих позицій
  • Reconciliation та алерти при збоях
  • Документація (опис алгоритму, конфігурація, інструкція з тестування)
  • Підтримка 2 години після деплою

Замовте оцінку проекту під ключ — ми проаналізуємо ваш стек і запропонуємо оптимальне рішення за один робочий день. Пишіть нам або зв'яжіться, щоб обговорити деталі. Вартість роботи від $2,000 залежно від складності. Наприклад, для портфеля $500,000 економія при flash crash може становити $25,000.