יישום מסחר במרווח (Margin Trading) באפליקציית מובייל לבורסה
אנו מפתחים אפליקציות מובייל לבורסות עם תמיכה מלאה במסחר במרווח. מסחר במרווח הוא מכשיר בסיכון גבוה: המשתמש מפקיד בטחון (מרווח), והבורסה מספקת מינוף של פי 3, פי 5 או פי 10. הרווח וההפסד מחושבים על גודל הפוזיציה המלא, לא על הבטחון. אם ההפסדים מתקרבים לסכום המרווח, הבורסה סוגרת את הפוזיציה בכוח (ליקווידציה). באפליקציית מובייל, קריטי להציג סיכונים אלה בזמן אמת: אפילו עיכוב של שנייה אחת בעדכון המחיר יכול להוביל לליקווידציה בלתי צפויה. המהנדסים שלנו, עם ניסיון של 6 שנים ביישומים פיננסיים, מיישמים מערכת ניהול מרווח אמינה העומדת בדרישות רגולטוריות ובשיטות האבטחה הטובות ביותר. אנו מבטיחים איכות קוד ועמידה בהסכמי NDA.
חשבונות מרווח: מבודד (Isolated) ומשולב (Cross)
שני מצבי מרווח עם לוגיקה שונה מהותית:
- מרווח משולב (Cross Margin) — יתרת חשבון המרווח כולה משמשת כבטחון לכל הפוזיציות. פוזיציה אחת 'אוכלת' את המרווח של אחרת. מחיר הליקווידציה מחושב עבור כל החשבון.
- מרווח מבודד (Isolated Margin) — לכל זוג מסחר יש ארנק מרווח מבודד נפרד. ההפסד המקסימלי מוגבל לסכום שבארנק זה. עבור חוויית משתמש במובייל, מרווח מבודד פשוט יותר: המשתמש מבין שהוא מפסיד רק את מה שהפקיד על אותו זוג. מרווח מבודד נותן למשתמש הבנה ברורה של ההפסד המקסימלי, בניגוד למרווח משולב שבו פוזיציה אחת יכולה לגרור את כל החשבון למטה. בפועל, זה מפחית פניות לתמיכה ב-30%.
ממשק המשתמש חייב להבחין בבירור בין שני המצבים. מתג עם הסבר קצר (tooltip או חלונית תחתונה עם דוגמה) הוא חובה.
כיצד מחושב מחיר הליקווידציה?
מחיר הליקווידציה הוא אינדיקטור מרכזי לפוזיציית מרווח. המשתמש חייב לראות אותו בממשק לפני פתיחת פוזיציה.
נוסחה לפוזיציית LONG מבודדת (מפושטת עבור Binance):
LiquidationPrice = EntryPrice × (1 - 1/Leverage + MaintenanceMarginRate) שיעור מרווח התחזוקה (Maintenance Margin Rate) עבור רוב זוגות Binance: 0.5%–1.5% בהתאם לדרגה.
// iOS — расчёт liquidation price для изолированной long-позиции
struct MarginPositionCalculator {
static func liquidationPriceLong(
entryPrice: Decimal,
leverage: Int,
maintenanceMarginRate: Decimal = 0.005
) -> Decimal {
let leverageDecimal = Decimal(leverage)
return entryPrice * (1 - 1 / leverageDecimal + maintenanceMarginRate)
}
static func liquidationPriceShort(
entryPrice: Decimal,
leverage: Int,
maintenanceMarginRate: Decimal = 0.005
) -> Decimal {
let leverageDecimal = Decimal(leverage)
return entryPrice * (1 + 1 / leverageDecimal - maintenanceMarginRate)
}
}מחיר הליקווידציה חייב להתעדכן בכל שינוי בגודל המינוף או בסכום המרווח. הצג אותו באדום עם אחוז המרחק מהמחיר הנוכחי — 'ליקווידציה במרחק 14.3% מהמחיר הנוכחי'.
מהו יחס המרווח וכיצד הוא מאותת על סיכון?
יחס מרווח = מרווח תחזוקה / הון החשבון × 100%.
- מתחת ל-100% — החשבון תקין
- 80–100% — אזור צהוב, התראת push 'הוסף מרווח נוסף'
- מעל 100% — סגירת פוזיציה בכפייה (ליקווידציה)
במסך הפוזיציה הפתוחה — פס התקדמות ליחס המרווח עם הדרגת צבעים (ירוק → צהוב → אדום). WebSocket מעדכן את היתרה ורווח/הפסד בזמן אמת.
הלוואה והחזר
עבודה עם הלוואות מרווח היא תהליך נפרד:
-
הלוואה (Borrow): המשתמש מציין את הסכום והמטבע. הבורסה מחזירה
LiquidationPrice = EntryPrice × (1 - 1/Leverage + MaintenanceMarginRate). הממשק מציג את מגבלת ההלוואה הזמינה, שיעור הריבית הנוכחי (שעתי/שנתי), והסכום המקסימלי הזמין. - החזר (Repay): תחילה משלמים ריבית, ולאחר מכן קרן. כפתור 'החזר הכל' מחשב את סכום ההחזר הכולל כולל ריבית שנצברה.
ב-API של Binance: // iOS — расчёт liquidation price для изолированной long-позиции struct MarginPositionCalculator { static func liquidationPriceLong( entryPrice: Decimal, leverage: Int, maintenanceMarginRate: Decimal = 0.005 ) -> Decimal { let leverageDecimal = Decimal(leverage) return entryPrice * (1 - 1 / leverageDecimal + maintenanceMarginRate) } static func liquidationPriceShort( entryPrice: Decimal, leverage: Int, maintenanceMarginRate: Decimal = 0.005 ) -> Decimal { let leverageDecimal = Decimal(leverage) return entryPrice * (1 + 1 / leverageDecimal - maintenanceMarginRate) } } ו-tranId. השיעורים זמינים דרך POST /sapi/v1/margin/loan.
התראות והתראות סיכון
מסחר במרווח דורש התראות יזומות:
- יחס מרווח > 75% → push 'מתקרב לליקווידציה על BTC/USDT'
- ריבית הלוואת מרווח שנצברה > X USDT → תזכורת תקופתית
- פוזיציה נסגרה בכפייה → push מיידי עם סכום ההפסד
Firebase Cloud Messaging עם עדיפות גבוהה להתראות ליקווידציה — APNs POST /sapi/v1/margin/repay, FCM GET /sapi/v1/margin/interestRateHistory. עדיפות רגילה עלולה לעכב את המסירה בכמה דקות, דבר קריטי במסחר במרווח.
מה כולל פיתוח מודול המרווח?
- תיעוד לאינטגרציה עם הבורסה (REST API + WebSocket)
- יישום מצבי מרווח מבודד ומשולב
- חישוב מחיר ליקווידציה ויחס מרווח עם עדכונים בזמן אמת
- ממשק פתיחת פוזיציה עם רווח/הפסד ופס התקדמות סיכון
- התראות push לליקווידציה ולקריאת מרווח (Margin Call)
- בדיקות על נתונים היסטוריים וסימולציית תרחישי לחץ
- הכשרת צוות הלקוח ותמיכה לאחר ההשקה
ממשק פוזיציה פתוחה
כרטיס הפוזיציה הפתוחה צריך להציג:
| שדה | עדכון |
|---|---|
| רווח/הפסד לא ממומש (USDT ו-%) | WebSocket בזמן אמת |
| מחיר ליקווידציה | בשינוי מרווח |
| יחס מרווח | זמן אמת |
| מינוף | סטטי בפתיחה |
| מחיר כניסה / מחיר סימון (Mark Price) | זמן אמת |
מחיר סימון (מחיר הוגן המבוסס על אינדקס) — חשוב להבחין בינו לבין המחיר האחרון (Last Price). רווח/הפסד וליקווידציה מחושבים לפי מחיר סימון, לא לפי המחיר האחרון.
לוחות זמנים והיקף
| רכיב | לוח זמנים |
|---|---|
| מתג משולב/מבודד עם הסברים | 3 ימים |
| טופס הזמנה עם חישוב מינוף וליקווידציה | שבוע |
| הלוואה והחזר + ממשק שיעורי ריבית | שבוע |
| רווח/הפסד ויחס מרווח בזמן אמת דרך WebSocket | שבוע |
| התראות סיכון push (קריאת מרווח, ליקווידציה) | 3 ימים |
| היסטוריית פוזיציות ועסקאות | 3 ימים |
מודול מרווח מינימלי: 4–5 שבועות. מערכת מלאה עם משולב/מבודד, היסטוריית הלוואות, ניתוח פוזיציות מפורט — 2–3 חודשים.
לצוות שלנו ניסיון של 6+ שנים בפיתוח אפליקציות בורסה, עם מסירה של 15+ פרויקטי מסחר במרווח ללקוחות בין 100 הבורסות הקריפטו המובילות. צור קשר להערכת פרויקט. הזמן פיתוח מודול מרווח — קבל ייעוץ על הארכיטקטורה.







