Реализация размещения рыночного ордера в мобильном приложении биржи
Мы проектируем и внедряем форму размещения рыночного ордера для мобильных биржевых приложений. Рыночный ордер исполняется мгновенно по лучшей доступной цене — пользователь вводит только количество, цену не указывает. Это упрощает интерфейс по сравнению с лимитным, но порождает проблему slippage: пользователь нажал «Купить» при цене 42 000, а исполнился по 42 150. Мы показываем эту разницу заранее и предотвращаем неожиданности. Для мобильной торговли скорость и удобство ввода — решающие факторы. Закажите реализацию под вашу маржу — получите прозрачный UI с защитой от проскальзывания.
Как работает форма рыночного ордера?
Форма отображает текущую лучшую цену из ордербука (ask для покупки, bid для продажи), обновляемую через WebSocket. Рядом — оценочная стоимость сделки: Amount × bestAsk. Подпись «Ориентировочно» и предупреждение о slippage при низкой ликвидности. Мы используем Market order как базовое понятие.
При объёме 10 BTC по паре BTC/USDT с глубиной ордербука всего 3 BTC на первом уровне, slippage может достигать 1.2% (около 500 USDT). Это критично для крупных сделок — мы вычисляем точную оценку через средневзвешенную цену (WAP). Оценка ликвидности через WAP — ключевой элемент. Для сравнения, метод простого процента от best price ошибается в 3 раза чаще: WAP даёт точность до 0.1% при полном снапшоте ордербука.
Что такое 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) } Такая оценка даёт реалистичные ожидания и снижает количество жалоб на «неправильное» исполнение. Для сравнения, лимитный ордер не подвержен slippage, но может не исполниться вовсе.
| Параметр | Рыночный ордер | Лимитный ордер |
|---|---|---|
| Скорость исполнения | Мгновенно | Зависит от цены |
| Контроль slippage | Через WAP | Не нужен |
| Сложность UI | Выше (оценка цены) | Ниже (указать цену) |
| Метод оценки slippage | Точность | Сложность |
|---|---|---|
| WAP по ордербуку | Высокая при полном снапшоте | Средняя |
| Простой процент от best price | Низкая | Низкая |
| Симуляция исполнения | Очень высокая | Высокая |
Пример расчёта WAP на реальных данных
Для пары ETH/USDT с ордербуком: ask1: 2000 USDT с объёмом 5 ETH, ask2: 2005 USDT с объёмом 10 ETH. При покупке 12 ETH WAP = (5*2000 + 7*2005)/12 ≈ 2002.92 USDT. Разница с best ask 2000 USDT составляет 0.15% slippage.Какие проблемы решаем?
- Недостаточная ликвидность: вычисляем WAP и показываем реальную цену исполнения. Если объём не может быть исполнен — предупреждаем красным индикатором.
- Двойное подтверждение: для крупных сумм (выше порога) — alert с PIN или биометрией (Face ID / Touch ID / Android BiometricPrompt). Рыночный ордер нельзя отменить после отправки, поэтому подтверждение обязательно.
- Два режима ввода: количество базовой валюты или сумма в котируемой. Переключатель BTC/USDT над полем Amount — стандартный UX для бирж. Режим ввода по сумме особенно полезен при торговле с фиксированным бюджетом: пользователь вводит, сколько USDT готов потратить, а приложение автоматически вычисляет количество базовой валюты с учётом текущей цены и ожидаемого slippage. Это решает проблему нехватки ликвидности для крупных сумм — пользователь видит, что его ордер может быть исполнен частично.
Что входит в реализацию?
- WebSocket-интеграция для обновления цены в реальном времени
- Расчёт WAP из ордербука с учётом глубины
- Переключатель режима ввода (количество/сумма)
- Диалог подтверждения с порогом для PIN/биометрии
- Обработка ошибок: недостаток ликвидности, обрыв соединения
- Документация и код-ревью
Процесс работы и сроки
- Анализ: изучаем API биржи (Binance, Bybit и др.) и требования к UI.
- Проектирование: согласовываем макеты и логику подтверждения.
- Реализация: пишем код с учётом threading и реактивности (Combine/Coroutines).
- Тестирование: проверяем на тестовом ордербуке с разной глубиной.
- Деплой: публикуем в TestFlight/Internal Track для UAT.
Ориентировочные сроки: от 2–3 дней на базовую форму до 1–2 недель с биометрией и кастомными порогами. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки.
Наш опыт: более 5 лет в разработке биржевых приложений для iOS и Android. Реализованные проекты включают интеграцию с Binance, Bybit и KuCoin. Гарантируем соблюдение App Store Review Guidelines (Section 4.2/5.1) и безопасность данных.
Получите консультацию по вашему проекту — оценим сложность интеграции рыночных ордеров и предложим оптимальное решение.







