> Что значит исключить проскальзывание цены и как это реализовать (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Автомакон

Стек: Go

> Пример ответа

Исключить проскальзывание цены (slippage) означает гарантировать, что сделка исполнится ровно по той цене, которую ожидал пользователь, без отклонений вверх или вниз. На практике полное исключение невозможно из-за рыночной волатильности и задержек, но в контексте DeFi или биржевых API это достигается установкой жесткого лимита на цену исполнения.

В Go для реализации защиты от проскальзывания при работе с криптобиржами (например, Binance API) используется параметр price в лимитных ордерах и проверка stopPrice для стоп-лоссов. Пример для спотовой торговли:

GO
type OrderRequest struct {
Symbol string `json:"symbol"`
Side string `json:"side"` // BUY или SELL
Type string `json:"type"` // LIMIT
Price float64 `json:"price"`
Quantity float64 `json:"quantity"`
Slippage float64 `json:"-"` // не передается в API
}
func PlaceLimitOrder(client *binance.Client, req OrderRequest) error {
// Устанавливаем цену с учетом допустимого проскальзывания
if req.Side == "BUY" {
// Для покупки: цена не выше (1 + slippage) от текущей
req.Price = math.Min(req.Price, currentPrice*(1+req.Slippage))
} else {
// Для продажи: цена не ниже (1 - slippage) от текущей
req.Price = math.Max(req.Price, currentPrice*(1-req.Slippage))
}
// Отправляем лимитный ордер
order, err := client.NewCreateOrderService().
Symbol(req.Symbol).
Side(binance.SideType(req.Side)).
Type(binance.OrderTypeLimit).
TimeInForce(binance.TimeInForceGTC).
Price(fmt.Sprintf("%.8f", req.Price)).
Quantity(fmt.Sprintf("%.8f", req.Quantity)).
Do(context.Background())
return err
}

Ключевые моменты:

  • Используйте лимитные ордера вместо рыночных - они гарантируют цену, но не гарантируют исполнение.

  • Для рыночных ордеров применяйте параметр slippageTolerance (например, в Uniswap V3 это sqrtPriceLimitX96), который задает максимальное отклонение от текущей цены.

  • В высоконагруженных системах добавляйте повторную проверку цены перед отправкой ордера через WebSocket-ленту.

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

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью