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 на рік. Зв'яжіться з нами, щоб обговорити ваш проєкт — ми реалізуємо повний цикл розробки системи сигналів. Замовте демо: оцінимо архітектуру, терміни та бюджет. Отримайте консультацію щодо вашого проєкту — ми оцінимо архітектуру та запропонуємо оптимальне рішення.







