Розроблення мобільного додатка для інвестицій та торгівлі акціями
Торгове додаток — одна з найбільш технічно насичених категорій у мобільній розробці. Тут перетинаються realtime data streaming, регуляторні вимоги (KYC/AML), високонавантажені операції з фінансовими даними та UX, де затримка в одну секунду може коштувати клієнту грошей буквально. Швидко не вийде.
Realtime котирування: WebSocket та не тільки
REST-запит кожні 5 секунд — не варіант. Для котирування потрібен WebSocket або Server-Sent Events. Популярні провайдери: Alpaca Markets, Polygon.io, Finnhub, Interactive Brokers TWS API.
На iOS підключення через URLSessionWebSocketTask (нативно, iOS 13+) або через Starscream. Управління переподключенням при втраті сети — обов'язково: експоненціальний backoff, максимум 5 спроб, потім сповіщення користувачу. Network.framework та NWPathMonitor для моніторингу стану сети.
На Android — OkHttp WebSocket. Особливість: при переводі у фон Android агресивно вбиває мережеві з'єднання. ForegroundService з Notification для торгових додатків — необхідність, не опція. Користувач повинен отримувати алерти по цінових рівнях навіть коли телефон у кишені.
Candlestick графіки та технічний аналіз
Kastомний candlestick chart — не можна взяти будь-яку готову бібліотеку та вважати задачу вирішеною. Вимоги: рендеринг 1000+ свічок без джанка, горизонтальний scroll + pinch-to-zoom, overlay індикаторів (MA, EMA, Bollinger Bands, RSI).
На Flutter: fl_chart не осилить такий обсяг даних без сильної kastомізації — краще CustomPainter з явним управлінням перерисуванням. На iOS — либо нативний CAShapeLayer рендеринг, либо Metal/CoreGraphics для максимальної продуктивності. Дані для графіка агрегуємо на клієнті: хвилинні свічки → денні через OHLC-агрегацію з сховищем в in-memory кеші + SQLite для історії.
Управління ордерами та брокерська інтеграція
Якщо додаток робить реальні ордери, а не тільки відображає дані:
Market order / limit order / stop-loss — це OrderRequest з параметрами, який уходить у брокерський API. Alpaca REST API — відносно простий вхід для US stocks. Interactive Brokers TWS API — потужний, але вимагає IB Gateway як прошарок, що ускладнює архітектуру мобільного додатка. Fix Protocol — використовується в професійних системах, у мобільних додатках рідко.
Підтвердження ордера — обов'язково 2FA або biometric auth перед відправкою. Це не тільки UX-паттерн, це де-факто вимога регуляторів.
Регуляторні вимоги
Фінансовий додаток з реальними операціями вимагає ліцензування в більшості юрисдикцій. KYC: інтеграція з Onfido, Jumio або Sumsub для верифікації документів (OCR + liveness check). AML: моніторинг підозрілих операцій. GDPR / локальний захист даних — шифрування, right to deletion.
App Store та Google Play можуть вимагати підтвердження брокерської ліцензії перед публікацією додатків категорії Finance з реальними торговими операціями.
Портфель та аналітика
Портфель — список позицій з поточною вартістю, P&L в абсолюті та відсотках, XIRR для коректного розрахунку доходності з урахуванням часу взносів/виводів. XIRR не реалізований у стандартних мобільних бібліотеках — портуй алгоритм Ньютона-Рафсона або використовуй готову фінансову lib.
Watchlist з алертами по ціні: PriceAlert з instrumentId, targetPrice, direction (above/below). При отриманні котирування через WebSocket — локальна перевірка проти активних алертів. Сповіщення — через UNUserNotificationCenter / NotificationManager.
Процес роботи
Починаємо з визначення бізнес-моделі: paper trading (віртуальні гроші), real trading через брокерський API, або тільки інформаційний додаток (котирування, портфель без ордерів). Це кардинально змінює обсяг роботи. Вибираємо провайдерів даних та брокерський API, проектуємо архітектуру з урахуванням latency-вимог.
Орієнтири за термінами
Інформаційний додаток з котируваннями, графіками, watchlist та портфелем (без реальних ордерів): 10–16 тижнів. Повноцінне торгове додаток з ордерами, алертами, KYC та аналітикою: 20–36 тижнів. Вартість розраховується індивідуально після аналізу вимог.
Брокерська інтеграція подвоює терміни — закладай це в roadmap заздалегідь.







