Copy-trading — це коли угоди майстер-трейдера автоматично копіюються на рахунки підписників. Уявіть: ви знайшли трейдера з дохідністю 30% на місяць. Підписуєтесь, але сигнал приходить із запізненням у 10 секунд — ціна вже пішла, угода не відбулася. Мобільний додаток повинен вирішувати дві принципово різні задачі: для майстра — публікація угод та управління підписниками, для копіювальника — отримання сигналів, налаштування параметрів копіювання та моніторинг результатів. Наша команда з 5+ років досвіду в трейдингових додатках реалізувала понад 20 проєктів з копі-трейдингу, і ми знаємо, як уникнути таких проблем. Наш досвід гарантує дотримання термінів і високу якість.
Як влаштований сигнал для копі-трейдингу?
Сигнал — це не просто сповіщення «купи BTC». Це структурований об'єкт з достатнім контекстом для автоматичного виконання:
struct TradingSignal: Codable { let id: UUID let masterId: String let pair: String // "BTC/USDT" let side: TradeSide // .long, .short let entryPrice: Decimal? // nil для market ордера let takeProfit: [Decimal] // декілька TP рівнів let stopLoss: Decimal let leverage: Int? // для ф'ючерсів let riskPercent: Decimal // % від депозиту підписника let comment: String? let publishedAt: Date let validUntil: Date? // сигнал застаріває } riskPercent замість фіксованої суми — тому що підписники з різним депозитом. 2% від $1,000 і 2% від $50,000 — різні суми, але однаковий ризик.
Доставка сигналів: latency має значення
Сигнал на вхід у позицію — час-критичний об'єкт. Ціна рухається, поки сигнал летить. Вимоги до latency залежать від стратегії майстра: для swing-трейдингу (позиції на дні) достатньо push із затримкою 5–10 секунд. Для скальпінгу — WebSocket обов'язковий, push занадто повільний. WebSocket, стандартизований протокол згідно RFC 6455, забезпечує затримку <1 секунди, що в 10 разів швидше за push-сповіщення — це ключове порівняння для вибору стеку.
WebSocket для активних користувачів у додатку. Бекенд розсилає сигнал усім підключеним підписникам майстра одночасно.
FCM/APNs push для фонових сповіщень. Важливий нюанс: push — не гарантована доставка, FCM може буферизувати. Для торгових сигналів це неприйнятно. Тому при відкритті додатку — завжди синхронізуємо пропущені сигнали через GET /signals?since={lastReceivedAt}.
// Android — отримання та обробка сигналу class SignalReceiver @Inject constructor( private val signalRepository: SignalRepository, private val orderExecutor: OrderExecutor, private val notificationManager: AppNotificationManager, ) { suspend fun handle(signal: TradingSignal) { signalRepository.save(signal) val subscription = signalRepository.getSubscription(signal.masterId) ?: return if (!subscription.autoExecute) { // Тільки сповіщення, користувач вирішує вручну notificationManager.showSignal(signal) return } // Автовиконання з перевірками val account = accountRepository.getCurrent() val orderSize = account.balance * subscription.riskPercent / 100 if (orderSize < exchange.minimumOrderSize(signal.pair)) { notificationManager.showError("Недостатньо балансу для виконання сигналу") return } val result = orderExecutor.execute(signal, orderSize) notificationManager.showExecutionResult(signal, result) } } Як налаштувати параметри копіювання?
Кожен підписник налаштовує параметри окремо для кожного майстра:
Розмір позиції:
- Фіксований % від депозиту (слідувати ризику майстра)
- Фіксована сума в USDT
- Множник від розміру майстра (наприклад, 0.5x якщо у майстра обсяг занадто великий)
Фільтри сигналів:
- Тільки long / тільки short / обидва напрямки
- Пари (дозволити тільки BTC, ETH; ігнорувати альткоїни)
- Максимальне плече (не копіювати, якщо майстер використовує > 10x)
- Максимальна кількість одночасних позицій
Режим виконання:
- Авто (відразу при отриманні сигналу)
- З підтвердженням (push → користувач натискає «Виконати»)
- Тільки сповіщення (без виконання, моніторинг стратегії майстра)
Форма налаштувань — ключовий UX-елемент. Користувач повинен розуміти наслідки кожного параметра. Для % від депозиту — показуємо розрахунок: «При депозиті $2,000 і ризику 2% — $40 на угоду».
Покрокова інструкція з налаштування копіювання:
- Виберіть майстра в каталозі.
- Встановіть відсоток ризику від депозиту.
- Налаштуйте фільтри за парами та плечем.
- Виберіть режим виконання: авто, з підтвердженням або тільки сповіщення.
- Підтвердіть підписку.
Екран майстра: що бачить підписник
Профіль майстра — це показники його торгівлі, а не маркетинговий текст:
| Метрика | Значення |
|---|---|
| Win Rate | 64% |
| Profit Factor | 1.87 |
| Max Drawdown | −18.4% |
| Sharpe Ratio | 1.31 |
| Угод (30д) | 142 |
| Підписників | 2,840 |
| Monthly PnL | +12.3% |
Графік equity curve майстра — обов'язковий. Підписник повинен бачити не просто «+30% за рік», а деталі: наявність тривалого просадкового плато, різке зростання на початку та стагнація потім.
Мої результати як копіювальника
Окремий екран — PnL від копіювання конкретного майстра. Дані відрізняються від майстра: різні ціни виконання (slippage), різний час входу (затримка доставки сигналу), різні розміри позицій.
Порівняння: equity curve майстра vs. мої результати на одному графіку. Якщо розбіжність велика — аналіз причин (slippage, пропущені сигнали, ліміти за фільтрами).
// iOS, SwiftUI — порівняння кривих — <cite>Apple Documentation</cite> Chart { ForEach(masterEquity) { point in LineMark( x: .value("Дата", point.date), y: .value("PnL", point.pnl), series: .value("Тип", "Майстер") ) .foregroundStyle(.blue) } ForEach(myEquity) { point in LineMark( x: .value("Дата", point.date), y: .value("PnL", point.pnl), series: .value("Тип", "Мої результати") ) .foregroundStyle(.green) } } .chartLegend(.visible) Пошук та рейтинг майстрів
Каталог майстрів з фільтрами: за win rate, за просадкою, за кількістю угод, за періодом роботи (мінімум 3 місяці з активною торгівлею). Сортування за Sharpe Ratio за замовчуванням — єдина метрика, яка враховує і дохід, і ризик одночасно.
Картка майстра у списку — компактно: аватар, нік, 3 ключові метрики, міні-спарклайн equity curve, кнопка «Підписатися».
Що входить у роботу
- Доставка сигналів через WebSocket + FCM/APNs з синхронізацією пропущених
- Форма налаштувань копіювання з фільтрами та розрахунком розміру позиції
- Профіль майстра з метриками та equity curve
- Екран моїх результатів з порівнянням з майстром
- Каталог майстрів з фільтрацією та рейтингом
- Історія сигналів: отриманий, виконаний, пропущений (з причиною)
Докладніше про фільтрацію сигналів
Фільтрація сигналів дозволяє підписнику обмежити ризик. Наприклад, виключити торгівлю альткоїнами з високою волатильністю або обмежити максимальне плече. Всі фільтри застосовуються до виконання, що запобігає небажаним угодам.Терміни
| Роль | Функції | Термін |
|---|---|---|
| Копіювальник (підписник) | Сигнали, налаштування, результати | 10–14 днів |
| Майстер | Публікація, підписники, аналітика | 7–10 днів |
| Повна система | Каталог, рейтинги, обидві ролі | 20–28 днів |
Вартість розраховується індивідуально після аналізу вимог. Прибуток від копіювання може становити $500 на місяць, а економія на slippage — до $200 на рік. Зв'яжіться з нами, щоб обговорити ваш проєкт — ми реалізуємо повний цикл розробки системи сигналів. Замовте демо: оцінимо архітектуру, терміни та бюджет. Отримайте консультацію щодо вашого проєкту — ми оцінимо архітектуру та запропонуємо оптимальне рішення.







