При резком движении рынка на 5% одновременная ликвидация сотен позиций может перегрузить движок. Задержки в 200 мс приводят к проскальзыванию на 1–2% — биржа теряет миллионы из Insurance Fund. Мы проектируем движок, который обрабатывает ликвидации за <50 мс, предотвращая каскадные убытки. Свяжитесь с нами, чтобы обсудить архитектуру вашей системы.
Почему маржинальная торговля требует быстрого движка — разработка системы маржинальной
При волатильности рынка десятки позиций могут достичь ликвидационной цены одновременно. Если движок не справляется с нагрузкой, задержки приводят к исполнению по худшей цене — биржа несёт убытки, которые покрывает Insurance Fund. В худшем случае включается Auto-Deleveraging, что вызывает недовольство пользователей. Наш движок обрабатывает ликвидации в 2 раза быстрее типовых реализаций благодаря параллельному выполнению и атомарной маркировке позиций.
Какие режимы маржи мы поддерживаем
Изолированная маржа — каждая позиция имеет собственный залог. Риск ограничен этой позицией. Подходит для трейдеров, которые хотят контролировать риск по каждой сделке.
Кросс-маржа — все позиции используют общий залоговый пул. Прибыльные позиции поддерживают убыточные. Ликвидация наступает только при отрицательном балансе счета. Требует более сложного расчёта минимальной маржи.
| Параметр | Изолированная | Кросс-маржа |
|---|---|---|
| Риск | Ограничен позицией | Распределён по всем позициям |
| Управление залогом | По каждой позиции отдельно | Общий баланс |
| Ликвидация | При снижении залога позиции | При отрицательном equity |
| Рекомендуется | Новичкам, риск-менеджмент | Профессионалам, хеджирование |
Как рассчитывается ликвидационная цена
Для Long позиции в изолированной марже ликвидация наступает, когда убыток достигает (initial margin — maintenance margin fee). Формула:
func CalculateLiquidationPrice(pos IsolatedPosition, config MarginConfig) Decimal { maintenanceMarginAmount := pos.EntryPrice.Mul(pos.Quantity).Mul(config.MaintenanceMarginRate) lossAtLiquidation := pos.InitialMargin.Sub(maintenanceMarginAmount) priceDropAllowed := lossAtLiquidation.Div(pos.Quantity) if pos.Side == Long { return pos.EntryPrice.Sub(priceDropAllowed) } else { return pos.EntryPrice.Add(priceDropAllowed) } } Пример расчёта ликвидационной цены
Long BTC, entry $42,000, leverage 10x → maintenance margin = 0.5% → liquidation price ≈ $38,010.Как работает ликвидационный движок
Движок получает обновления цен из mark price oracle и проверяет все открытые позиции. При пересечении ликвидационной цены позиция атомарно маркируется, размещается market-ордер на закрытие, рассчитывается ликвидационная комиссия (обычно 0.5–1.5%). Остаток залога (residual) возвращается пользователю, убыток покрывается Insurance Fund. Ключевая метрика — время от триггера до размещения ордера: у нас <50 мс.
type LiquidationEngine struct { /* ... */ } func (le *LiquidationEngine) checkLiquidations(update PriceUpdate) { positions := le.db.GetPositionsForLiquidation(update.Pair, update.Price) for _, pos := range positions { go le.liquidatePosition(pos, update.Price) } } Финансовые механизмы: Insurance Fund, funding rate и ADL
Insurance Fund
Insurance Fund формируется из ликвидационных комиссий. Если ликвидация исполняется по цене хуже ликвидационной (проскальзывание), убыток списывается из этого пула. Это резерв, который защищает биржу от каскадных потерь.
Funding rate
Бессрочные контракты (Funding rate) не имеют даты экспирации. Funding rate — механизм, который поощряет или штрафует длинные/короткие позиции в зависимости от отклонения mark price от index price. Мы реализуем расчёт funding rate на основе премиума:
func CalculateRate(markPrice, indexPrice Decimal) Decimal { premium := markPrice.Sub(indexPrice).Div(indexPrice) interestRate := Decimal("0.0001") clampedDiff := Clamp(interestRate.Sub(premium), -0.0005, 0.0005) return premium.Add(clampedDiff) } Funding применяется каждые 8 часов. Long платит short, если rate > 0, и наоборот.
Auto-Deleveraging
Если Insurance Fund исчерпан, включается Auto-Deleveraging: принудительно закрываются наиболее прибыльные позиции, чтобы компенсировать убыток. Это крайняя мера, и мы проектируем систему так, чтобы ADL срабатывал как можно реже — за счёт достаточного Insurance Fund и быстрых ликвидаций.
Почему mark price важнее last price
Ликвидации должны основываться на агрегированной цене с нескольких бирж (mark price), а не на последней сделке. Иначе злоумышленник может манипулировать last price маленькой сделкой, чтобы триггерить ликвидации. Мы используем медиану из трёх источников (Binance, OKX, Bybit) с интеграцией Chainlink:
func GetMarkPrice(pair string) Decimal { prices := []Decimal{binancePrice, okxPrice, bybitPrice} sort.Slice(prices, func(i, j int) bool { return prices[i].LessThan(prices[j]) }) return prices[1] } Как выглядит интерфейс трейдера
Пользователь видит в реальном времени margin ratio, ликвидационную цену, P&L и может добавить/вывести залог. Мы используем React + wagmi + RainbowKit для интеграции с кошельками. Пример компонента:
function PositionCard({ position }) { const marginRatio = position.equity / position.maintenanceMargin * 100; const urgency = marginRatio < 110 ? 'critical' : marginRatio < 150 ? 'warning' : 'safe'; return ( <Card> <PnLDisplay pnl={position.unrealizedPnl} /> <div>Liquidation: ${position.liquidationPrice.toFixed(2)}</div> <MarginRatioBar ratio={marginRatio} urgency={urgency} /> <AddMarginButton position={position} /> </Card> ); } Что входит в разработку под ключ
- Архитектурная документация (UML-диаграммы, описание потоков данных)
- Разработка смарт-контрактов (Solidity) для учёта залогов и ликвидаций (если требуется on-chain)
- Backend-движки на Go: isolated/cross margin, liquidation, funding, insurance fund
- Интеграция с ораклами Chainlink для mark price
- UI-компоненты на React/TypeScript с WebSocket-подписками
- Нагрузочное тестирование (до 10 000 позиций параллельно)
- Деплой в облако (AWS/GCP) и мониторинг (Grafana, Prometheus)
- Обучение вашей команды и 3-месячная поддержка после запуска
Ориентировочные сроки
| Компонент | Срок |
|---|---|
| Isolated margin engine | 4–5 недель |
| Liquidation engine | 3–4 недели |
| Cross margin | 3–4 недели |
| Perpetual funding rate | 2–3 недели |
| Insurance fund + ADL | 2–3 недели |
| Mark price oracle | 1–2 недели |
| UI для маржин торговли | 4–6 недель |
| Полная система | 4–6 месяцев |
Стоимость рассчитывается индивидуально и зависит от сложности и требуемого стека. Для точной оценки напишите нам — проведём бесплатный аудит вашего проекта и предложим решение. Закажите консультацию — поможем снизить потери от ликвидаций. Гарантируем NDA и прозрачное ценообразование.







