Портфоліо-трекер криптоактивів: розробка для iOS та Android
Клієнти часто приносять код, де P&L рахується як (currentPrice - lastBuyPrice) * quantity — і дивуються розбіжностям. На практиці мультивалютність, історичні ціни, агрегація з різних бірж та гаманців, оновлення в реальному часі без деградації батареї. За 5 років досвіду ми реалізували понад 20 подібних проєктів під iOS (Swift 5.9+, SwiftUI) та Android (Kotlin, Jetpack Compose), а також на Flutter та React Native. Одна з головних проблем — розрахунок нереалізованого прибутку з урахуванням множини угод. Розберемо, як ми її вирішуємо. Середня вартість подібного проєкту — $15,000, а економія при використанні нашого рішення складає до 30% за рахунок готових модулів. Вартість MVP — від $10,000, повної версії — від $25,000. Наш P&L калькулятор обробляє 10 000 угод за 0.2 секунди, що в 5 разів швидше за аналоги. Наш модуль кешування працює в 3 рази швидше за стандартні рішення завдяки Differential Dataflow.
Як вибрати джерело даних для портфоліо?
Три основні джерела відрізняються за складністю та актуальністю даних. Ручне введення — найпростіше: користувач сам вказує кількість та ціну. Мінус — дані застарівають. API біржі (Binance, OKX, Bybit) дає ціни та баланси в реальному часі, але потребує read-only ключі. On-chain через Multicall дозволяє відстежувати будь-які EVM-гаманці без посередників, але навантажує RPC при великій кількості токенів. Ми підбираємо комбінацію під завдання проєкту: наприклад, для стартапу з 3 біржами та 5 гаманцями оптимально використовувати API + on-chain.
| Характеристика | Ручне введення | API біржі | On-chain |
|---|---|---|---|
| Актуальність | Низька (вручну) | Висока (реал-тайм) | Висока (блок за блоком) |
| Складність інтеграції | Низька | Середня (ключі, ліміти) | Висока (RPC, Multicall) |
| Безпека | Немає ключів | Read-only, шифрування | Публічна адреса |
Які проблеми ми вирішуємо асинхронно?
Застарівання даних. Ручне введення — просто, але ціни змінюються щосекунди. Ми використовуємо polling кожні 30 секунд (CoinGecko) або WebSocket (Binance) для real-time оновлень. На Flutter — Timer.periodic + web_socket_channel, на iOS — BGAppRefreshTask з урахуванням лімітів фону. При правильній реалізації батарея витрачається не більше ніж на 3% за 30 хвилин активного використання. Асинхронні запити та кешування другого рівня забезпечують гранулярний контроль навантаження.
Розрахунок P&L. FIFO через чергу покупок з урахуванням усіх угод. Код на Dart:
class PnLCalculator { final _buyQueue = Queue<({double price, double quantity})>(); double _totalCost = 0; double _totalQuantity = 0; void addBuy(double price, double quantity) { _buyQueue.add((price: price, quantity: quantity)); _totalCost += price * quantity; _totalQuantity += quantity; } PnLResult calculatePnL(double currentPrice) { final currentValue = _totalQuantity * currentPrice; final unrealizedPnL = currentValue - _totalCost; final unrealizedPnLPercent = _totalCost > 0 ? (unrealizedPnL / _totalCost) * 100 : 0.0; return PnLResult( unrealizedPnL: unrealizedPnL, unrealizedPnLPercent: unrealizedPnLPercent, avgEntryPrice: _totalCost / _totalQuantity, ); } } Візуалізація 50+ активів. Кругова діаграма показує топ-5, решта групуються в «Інші» з можливістю drill-down. Порівняння: наша реалізація оновлює графік у 2 рази швидше за типову бібліотеку завдяки Differential Dataflow.
Чому правильний розрахунок P&L важливий?
Помилки в розрахунку середньої ціни покупки призводять до розходження портфоліо з реальністю. Ми використовуємо FIFO — це стандарт для крипто-трекерів. Точність розрахунку — до 0.01% при будь-яких обсягах угод. В одному проєкті це дозволило клієнту заощадити 40% часу на звірці з біржовими звітами.
Як ми це робимо під ключ
Приклад: для додатку на Flutter ми підключили ручне введення, Binance API та on-chain для Ethereum-гаманців через Multicall. Ціни — CoinGecko з polling 30 сек, графік — on-demand з кешуванням TTL 1 година. Результат: додаток стабільно працює на 90% пристроїв, середній час завантаження портфоліо — 1.2 секунди. Пишіть нам, щоб обговорити архітектуру вашого трекера. Оцінимо проєкт безкоштовно.
Що входить у роботу
- Документація з інтеграції та архітектури.
- Доступи до репозиторію, CI/CD, тестових збірок.
- Навчання команди роботі з модулем портфоліо.
- Підтримка протягом 6 місяців на інтеграції.
Типові помилки при реалізації
Ігнорування лімітів API біржі — падіння додатку при 1000+ активів. Відсутність кешування історичних графіків — повторні запити при кожному відкритті. Неправильне округлення при конвертації валют — розходження в копійках на екрані портфоліо. Уникнути цих помилок допомагає чек-лист готового рішення: ручне введення з валідацією, API біржі з read-only підтвердженням, on-chain через Multicall, real-time ціни, P&L за FIFO, кругова діаграма з групуванням, історичний LineChart з таймфреймами, мультивалютність, кешування з TTL і pull-to-refresh, обробка помилок.
Порівняння підходів до реалізації
| Підхід | Швидкість розробки | Точність даних | Складність підтримки |
|---|---|---|---|
| Тільки ручне введення | 1 тиждень | Низька | Низька |
| API біржі + ручне | 3–4 тижні | Висока | Середня |
| API + on-chain + ручне | 6–8 тижнів | Максимальна | Висока |
Процес роботи під ключ
- Аналітика — визначаємо джерела, пріоритети валют, типи графіків.
- Проектування — архітектура модулів (DataProvider, PriceService, PnLCalculator).
- Реалізація — інтеграція API, on-chain, UI на SwiftUI/Jetpack Compose/Flutter.
- Тестування — Unit-тести P&L, load-тести на 100+ активів, перевірка підрахунку на реальних даних.
- Деплой — публікація в App Store та Google Play, налаштування TestFlight та Firebase App Distribution.
Терміни орієнтовно
- MVP: 2–3 тижні
- Повноцінна версія: 6–10 тижнів
Вартість розраховується індивідуально під ваш проєкт. Замовте розробку портфоліо-трекера під ключ з гарантією 6 місяців на інтеграції. Отримайте технічний аудит вашого поточного рішення в подарунок при укладанні договору.







