Реалізація розміщення рринкового ордера в мобільному додатку біржі
Рвинковий ордер виконується миттєво по найкращій доступній ціні. Користувач вводить тільки кількість — ціну не вказує. Це робить UI простіше ніж лімітний, але добавляє іншу проблему: slippage. Користувач натиснув «Купити» при ціні 42 000, а виконалося по 42 150 — і це нормально, але потрібно показати це заздалегідь.
Відображення очікуваної ціни виконання
Ринкова ціна змінюється постійно. Показуй у формі поточну найкращу ціну з ордербука (ask для покупки, bid для продажу), оновлюючи її через WebSocket. Рядом — оцінкова вартість угоди: Amount × bestAsk. Підпис «Ориєнтовно» та попередження про slippage при низькій ліквідності.
Низька ліквідність — коли глибини ордербука недостатньо, щоб поглинути весь об'єм по першому рівню. Якщо користувач хоче купити 10 BTC, а на найкращому рівні доступно тільки 3 BTC — реальна ціна буде вища. Проста евристика: пройтися по рівням ордербука та посчітати weighted average price (WAP) для вказаного об'єму.
// Android — розрахунок середневзвішеної ціни виконання з снапшота ордербука
fun estimateMarketPrice(asks: List<Pair<BigDecimal, BigDecimal>>, targetQty: BigDecimal): BigDecimal {
var remaining = targetQty
var totalCost = BigDecimal.ZERO
for ((price, qty) in asks) {
val fill = minOf(remaining, qty)
totalCost += fill * price
remaining -= fill
if (remaining <= BigDecimal.ZERO) break
}
return if (remaining > BigDecimal.ZERO) BigDecimal.ZERO // недостатньо ліквідності
else totalCost.divide(targetQty, 8, RoundingMode.HALF_UP)
}
Поле введення: кількість або сума
Для рвинкового ордера біржі часто підтримують два режими: вказати кількість базової валюти (quoteOrderQty=false) або вказати суму в котируванні (quoteOrderQty у Binance). Перемикач BTC/USDT над полем Amount — стандартний UX. У режимі USDT користувач вводить суму, біржа сама розраховує кількість.
Подвійне підтвердження
Рвинковий ордер неможливо відмінити після відправки. Мінімум — alert з кнопкою підтвердження. Для великих сум (вище порога, заданого в налаштуваннях) — вимагати введення PIN або біометрії заново.
Часовий графік: 2–3 дні включаючи WebSocket-оновлення ціни, розрахунок WAP, перемикач режиму введення та діалог підтвердження.







