בוט מסחר מעבד אלפי עסקאות ביום, אך ללא ויזואליזציה של מדדים, היעילות שלו נותרת לא ברורה. יישמנו מודול סטטיסטיקות לבוט מסחר עבור אפליקציית מסחר ניידת המציג PnL, Win Rate, Profit Factor ומדדי בוט אחרים בזמן אמת, ומאפשר לסוחרים לזהות במהירות חולשות באסטרטגיה. לדוגמה, לאחר פריסת הדשבורד שלנו, לקוח אחד גילה שהבוט שלו היה בעל Win Rate של 65% אך Profit Factor של 1.1 בלבד — כלומר עסקאות רווחיות היו קטנות מדי ועסקאות מפסידות גדולות מדי. עזרנו לייעל את הפרמטרים, וה- Profit Factor השתפר פי 1.6 ל-1.8, מה שהגדיל את הרווחיות הכוללת ב-40%. עם למעלה מ-20 פרויקטים מוצלחים ו-5+ שנות ניסיון בפיתוח אפליקציות מסחר, אנו מבטיחים תוצאות יוצאות דופן.
שלבים ליישום סטטיסטיקות בוט מסחר
- הגדרת מדדים מרכזיים (PnL, Win Rate, Profit Factor, Max Drawdown, Average RR, Sharpe Ratio, Calmar Ratio).
- בניית נקודות קצה של API בצד השרת לאיגוד נתוני עסקאות גולמיים לפי תקופה.
- עיצוב פריסת דשבורד עם כרטיסי סיכום ותרשים מצטבר.
- יישום מעבר בין תקופות (7d/30d/All) באמצעות פקדים מפולחים.
- הוספת היסטוריית עסקאות עם דפדוף, פילטרים (זוג, צד, תוצאה) ומיון.
- שמירת מדדים מצטברים במטמון בצד הלקוח לטעינה מיידית.
בעיות שאנו פותרים
סוחר רוצה לדעת איזו אסטרטגיה רווחית, באיזה מסגרת זמן הבוט מציג את שיעור הניצחון הטוב ביותר, והיכן מתרחשות הירידות הגדולות ביותר. ללא סטטיסטיקות מצטברות, כל עסקה נשארת נקודה בלוג. אנו פותרים זאת על ידי יישום דשבורד עם מדדים מרכזיים והיסטוריה ניתנת לסינון.
כיצד מיושמות סטטיסטיקות עסקאות בוט מסחר
מדדים מרכזיים שבלעדיהם סטטיסטיקות חסרות משמעות:
| מדד | תיאור |
|---|---|
| Total PnL | רווח/הפסד ממומש על פני כל הפוזיציות הסגורות |
| Win Rate | אחוז העסקאות הרווחיות |
| Profit Factor | יחס בין סך העסקאות הרווחיות לסך העסקאות המפסידות (>1.5 מקובל, >2 מצוין) |
| Max Drawdown | הירידה המקסימלית מהשיא לשפל באחוזים |
| Average RR | יחס סיכון/תשואה ממוצע |
| Sharpe Ratio | אופציונלי, לניתוח תשואה מותאמת סיכון מתקדם |
מדדים אלה מחושבים בצד השרת מנתוני עסקאות גולמיים ומועברים דרך API. אפליקציית הנייד מציגה אותם ללא ביצוע חישובים.
מסכים עיקריים — סטטיסטיקות בוט מסחר
דשבורד סטטיסטיקות. כרטיסי סיכום: 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.
כיצד להציג היסטוריית עסקאות עם דפדוף?
רשימה עם דפדוף (מבוסס סמן, לא offset — נפח הנתונים יכול להיות גדול). כל רשומה: זוג, צד, גודל, PnL, תאריך. סינון לפי זוג, צד (לונג/שורט), תוצאה (רווח/הפסד). מיון לפי תאריך או גודל PnL. באנדרואיד עם Jetpack Compose סטטיסטיקות, // 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() } } } עם LazyColumn (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()
}
}
} Profit Factor חשוב יותר מ-Win Rate
Win Rate גבוה (60%+) יכול להיות מטעה אם העסקה המפסידה הממוצעת גדולה פי שניים מהעסקה הרווחית הממוצעת. Profit Factor מתחשב בגודלי עסקאות: ערך של 1.5 אומר שעל כל דולר שאבד, מרוויחים $1.5. למסחר אוטומטי, אנו ממליצים לשמור על Profit Factor של לפחות 1.5, בעוד Win Rate יכול לנוע בין 50–70%. Profit Factor של 1.8 טוב פי 1.6 מ-1.1. התאמת יתר לנתונים היסטוריים יכולה לנפח את ה-Win Rate, אך Profit Factor נשאר מדד חזק.
השוואת אסטרטגיות
אם הבוט תומך במספר אסטרטגיות או זוגות מסחר, מסך השוואה שימושי: טבלה שבה שורות הן אסטרטגיות/זוגות, עמודות הן 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 מצטברים ומוצגת באמצעות Pager (Flutter) או 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() } } } עם פריסה קומפוזיציונית (iOS). עבור סטטיסטיקות Flutter, אנו משתמשים בחבילת DataTable לתרשימים.
כיצד מטופל עיבוד נתונים בצד הלקוח?
כדי להאיץ את התצוגה, אנו שומרים מדדים מצטברים במטמון בצד הלקוח (Room/SQLite או CoreData). זה מאפשר לדשבורד להיפתח מיידית ללא המתנה לבקשת רשת. בעדכוני נתונים, סנכרון רקע מביא מדדים עדכניים. אנו גם מיישמים ייצוא היסטוריית עסקאות ל-CSV לניתוח ב-Excel.
נקודת קצה טיפוסית: UICollectionView. תגובה: GET /api/bots/{id}/stats?period=30d. בצד הלקוח, המודל מפוענח באמצעות { totalPnl: 1240.0, winRate: 0.58, profitFactor: 1.82, maxDrawdown: 0.12, tradesCount: 142, cumulativePnl: [{"date":"2024-01-15","value":100}, ...] } (iOS) או Codable (אנדרואיד).
מה כלול בעבודה
- דשבורד עם מדדי סיכום ותרשים PnL מצטבר
- מעבר תקופות (7d/30d/All)
- היסטוריית עסקאות עם דפדוף, פילטרים ומיון
- טבלת השוואה לפי זוגות/אסטרטגיות
- ייצוא היסטוריה ל-CSV
- שמירת נתונים במטמון בצד הלקוח לתגובה מיידית
- תיעוד מלא, גישת הדגמה וחודש תמיכה
לוח זמנים
לוח זמנים משוער: 5–7 ימי עבודה בהתאם למורכבות אינטגרציית השרת. המחיר מחושב בנפרד לאחר ניתוח דרישות. הזמינו פיתוח — נדון בפרטים ונספק גישת הדגמה.
עם למעלה מ-20 פרויקטים מוצלחים לאפליקציות מסחר ב-iOS ואנדרואיד ו-5+ שנים בשוק, אנו מבטיחים עמידה במדדים כולל Max Drawdown ואופטימיזציית ביצועים לנפחי נתונים גדולים. אנו גם מספקים תיעוד מלא, גישת הדגמה וחודש תמיכה.







