Статистика угод торгового бота в мобільному додатку
Історія угод без аналітики — це просто журнал. Статистика торгового бота відповідає на питання: яка стратегія прибуткова, на якому таймфреймі, з яким win rate, і де бот втрачає найбільше грошей.
Метрики, які потрібні трейдеру
Ключові показники, без яких статистика бездоганна:
- Total PnL (реалізований) — загальний дохід/збиток по всім закритим позиціям
- Win Rate — частка прибуткових угод
- Profit Factor — сума всіх прибуткових угод / сума всіх збиткових угод (> 1.5 приймемо)
- Max Drawdown — максимальне падіння балансу від піку до дна у %
- Average RR — середнє співвідношення ризику/доходу
- Sharpe Ratio — опціонально, для просунутих користувачів
Ці метрики розраховуються на backend з сирих даних угод та передаються через API. Мобільний додаток їх відображає, а не розраховує.
Основні екрани
Дашборд статистики. Summary-картки: Total PnL за період, Win Rate, кількість угод. Графік кумулятивного PnL у часі — растуча крива (або ні). Період — 7d / 30d / All, перемикається одним дотиком.
// iOS, SwiftUI — перемикач періоду та завантаження даних
struct StatsDashboard: View {
@StateObject private var viewModel = StatsDashboardViewModel()
var body: some View {
VStack {
Picker("Період", selection: $viewModel.period) {
Text("7д").tag(StatsPeriod.week)
Text("30д").tag(StatsPeriod.month)
Text("Все").tag(StatsPeriod.all)
}
.pickerStyle(.segmented)
.onChange(of: viewModel.period) { _ in
Task { await viewModel.reload() }
}
switch viewModel.state {
case .loading: ProgressView()
case .loaded(let stats):
PnLChart(dataPoints: stats.cumulativePnl)
StatsGrid(stats: stats)
case .error(let msg): ErrorView(message: msg)
}
}
.task { await viewModel.reload() }
}
}
Графік кумулятивного PnL — лінія, вісь X — час, вісь Y — накопленний PnL в USDT. Колір лінії: зелений для позитивного результату, червоний для негативного. Дотик на точку — показує дату та значення PnL.
Історія угод. Список з пагінацією (cursor-based, не offset — обсяг даних може бути великим). Кожна запис: пара, сторона, розмір, PnL, дата. Фільтр за парою, за стороною (long/short), за результатом (profit/loss). Сортування за датою або за розміром PnL.
На Android LazyColumn з Pager (Jetpack Paging 3). Завантажує сторінки по 50 записів при прокруткі:
val deals = botRepository.getDeals(botId, filter)
.cachedIn(viewModelScope)
.collectAsLazyPagingItems()
LazyColumn {
items(deals, key = { it.id }) { deal ->
DealRow(deal = deal)
}
item {
if (deals.loadState.append is LoadState.Loading) {
CircularProgressIndicator()
}
}
}
Порівняння стратегій
Якщо бот підтримує кілька стратегій або торгових пар, корисний екран порівняння: таблиця, де рядки — стратегії/пари, стовпці — Win Rate, PnL, кількість угод. Одразу видно, що працює.
| Пара | Угод | Win Rate | PnL | Profit Factor |
|---|---|---|---|---|
| BTC/USDT | 142 | 58% | +1240 USDT | 1.82 |
| ETH/USDT | 98 | 51% | +320 USDT | 1.31 |
| SOL/USDT | 67 | 44% | −180 USDT | 0.87 |
Така таблиця будується з агрегованих даних API та рендериться через DataTable (Flutter) або UICollectionView із compositional layout (iOS).
Що входить до роботи
- Дашборд із summary-метриками та графіком кумулятивного PnL
- Перемикач періоду (7d/30d/All)
- Історія угод з пагінацією, фільтрами та сортуванням
- Таблиця порівняння за парами/стратегіями
- Експорт історії до CSV
Терміни
5–7 робочих днів. Вартість розраховується індивідуально після аналізу вимог.







