Реализация истории торгов в мобильном приложении биржи

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация истории торгов в мобильном приложении биржи
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация истории торгов в мобильном приложении биржи

История торгов на бирже — это не просто список ордеров. Это таблица с высоким темпом обновления в реальном времени, фильтрацией по торговым парам и типам ордеров, пагинацией на тысячах записей, корректным отображением статусов и расчётом P&L по каждой сделке.

Типы записей и структура данных

Биржевая история включает несколько сущностей, которые важно разделять на UI:

  • Ордера (Orders) — то, что пользователь выставил: лимитный, рыночный, стоп. Статус: open, filled, partially_filled, cancelled
  • Сделки (Trades/Fills) — фактические исполнения ордеров. Один ордер может иметь несколько fills
  • P&L — расчёт прибыли по закрытым позициям
class TradeRecord {
  final String tradeId;
  final String orderId;
  final String symbol;        // "BTC/USDT"
  final TradeSide side;       // buy / sell
  final double price;         // цена исполнения
  final double quantity;
  final double fee;
  final String feeAsset;      // "USDT" или "BNB" (если fee discount)
  final DateTime executedAt;
  final OrderType orderType;  // market, limit, stop_limit
}

P&L для spot торговли: (sell_price - avg_buy_price) * quantity - fees. Для бирж, которые не предоставляют P&L через API — вычисляем локально, сопоставляя buy и sell сделки по FIFO.

Загрузка данных: REST + WebSocket

Исторические данные — через REST API биржи. Большинство бирж (Binance, OKX, Bybit) имеют /api/v3/myTrades или аналог с cursor-based пагинацией по fromId или startTime:

Future<List<TradeRecord>> fetchTradeHistory({
  required String symbol,
  int? fromId,
  DateTime? startTime,
  int limit = 50,
}) async {
  final response = await dio.get('/api/v3/myTrades', queryParameters: {
    'symbol': symbol.replaceAll('/', ''),
    if (fromId != null) 'fromId': fromId,
    if (startTime != null) 'startTime': startTime.millisecondsSinceEpoch,
    'limit': limit,
    'timestamp': DateTime.now().millisecondsSinceEpoch,
    'signature': _sign(queryString), // HMAC-SHA256
  });
  return (response.data as List).map(TradeRecord.fromJson).toList();
}

Real-time обновления — WebSocket executionReport (Binance) или orders channel. При получении события об исполнении ордера — добавляем сделку в начало списка и обновляем статус ордера.

UI: виртуализированный список

История торгов может содержать тысячи записей. ListView.builder с пагинацией — единственный правильный подход. Обычный ListView с children из 5000 виджетов вызовет jank при прокрутке и OOM на слабых устройствах.

NotificationListener<ScrollNotification>(
  onNotification: (notification) {
    if (notification is ScrollEndNotification &&
        notification.metrics.pixels >= notification.metrics.maxScrollExtent - 200) {
      _loadNextPage(); // lazy load при приближении к концу списка
    }
    return false;
  },
  child: ListView.builder(
    itemCount: _trades.length + (_hasMore ? 1 : 0),
    itemBuilder: (context, index) {
      if (index == _trades.length) {
        return const Center(child: CircularProgressIndicator());
      }
      return TradeRow(trade: _trades[index]);
    },
  ),
)

Фильтрация

Фильтры по торговой паре, по стороне (buy/sell), по типу ордера, по дате. Критически важно: фильтрация по дате через DateTimeRange picker с пресетами «сегодня / 7 дней / 30 дней».

Фильтры применяем на сервере при загрузке (параметры запроса), не на клиенте — иначе при большой истории придётся скачать всё и фильтровать локально.

Цветовая индикация и читаемость

Стандарт для биржевых приложений: buy — зелёный, sell — красный. Статусы: filled — основной цвет, cancelled — серый, partially_filled — оранжевый. Цена исполнения — чуть крупнее остальных полей.

Для отображения P&L: зелёный с + для прибыли, красный с - для убытка. Ноль — нейтральный цвет.

Экспорт

Кнопка экспорта в CSV — стандартное требование для биржевых историй (налоговая отчётность). Формируем CSV с полями: Date, Pair, Side, Price, Quantity, Fee, Fee Asset, Total. BOM для корректного открытия в Excel.

Что входит в работу

  • REST API интеграция с поддержкой пагинации и подписи запросов (HMAC-SHA256)
  • WebSocket для real-time обновлений новых сделок
  • Виртуализированный список с ленивой загрузкой
  • Фильтры по паре, стороне, дате
  • Отображение P&L (если API предоставляет или расчёт по FIFO)
  • Экспорт в CSV

Сроки

Базовая история с пагинацией и фильтрами: 3–5 дней. С real-time, P&L расчётом и экспортом: 1–2 недели. Стоимость рассчитывается индивидуально.