פיתוח בוט מסחר פנימי לבורסות קריפטו
בורסת קריפטו צעירה ללא נזילות היא בורסה מתה. סוחרים הולכים למקום שבו המרווחים צרים ועומק ספר ההזמנות גדול. בוט עושות שוק פנימי פותר זאת: אנו מתכננים ופורסים בוטים למסחר עם גישה ישירה למנוע ההתאמה, מצמצמים את זמן האחזור למיקרו-שניות ומבטלים עמלות. בניגוד לבוטים ציבוריים לבינאנס, הבוט הפנימי שלנו מתקשר דרך IPC או gRPC, ועוקף את תקרת ה-HTTP ומגבלות הקצב. זה משיג זמן אחזור של פחות מ-100 מיקרו-שניות לעומת 1–5 אלפיות השנייה עבור API חיצוני.
לפי CoinMarketCap, כ-70% מהנפח בבורסות המובילות מסופק על ידי עושי שוק.
מקרה אחרון: עבור בורסה X עם נפח יומי של 50 מיליון דולר, פרסנו עושה שוק פנימי. תוצאה: המרווח ירד מ-0.5% ל-0.08%, הנפח גדל ב-300% תוך חודש אחד. החיסכון בעמלות עלה על 60,000 דולר בחודש — 40% יותר מאשר שימוש ב-API חיצוני.
לצוות שלנו ניסיון של למעלה מ-7 שנים בפיתוח בוטים למסחר. אנו מבטיחים פעילות יציבה וביקורת שקופה לכל פרויקט.
מדוע בורסה זקוקה לבוט מסחר משלה?
אנו מתכננים בוטים שמחזיקים מרווח של 0.05–0.1% עבור זוגות יציבים ועומק ספר הזמנות של עד 50 BTC ברמה. הבוט מסנכרן ברציפות מחירים עם בורסות חיצוניות (Binance, OKX) דרך WebSocket, ומתאים את הציטוטים שלו כל 100 אלפיות השנייה. זהו נוהג לגיטימי — רוב הבורסות משתמשות בעושי שוק פנימיים בעת ההשקה.
כיצד מפתחים בוט מסחר לבורסת קריפטו?
התהליך כולל מספר שלבים: ניתוח דרישות, עיצוב ארכיטקטורה, יישום אסטרטגיה, אינטגרציה עם API פנימי, בדיקות וביקורת, ופריסה. כל שלב מסתיים בתוצאה מתועדת. משך הזמן נע בין 3 ל-5 שבועות.
| שלב | משך | תוצר |
|---|---|---|
| ניתוח דרישות | 2–3 ימים | מפרט אסטרטגיה |
| עיצוב ארכיטקטורה | 3–5 ימים | עיצוב ברמה גבוהה |
| יישום אסטרטגיה | 5–10 ימים | אב טיפוס עובד |
| אינטגרציית API | 3–5 ימים | חיבור למנוע התאמה |
| בדיקות וביקורת | 3–5 ימים | דוח ביקורת |
| פריסה | 2–3 ימים | שחרור לייצור |
תצורת בוט שלב אחר שלב
- בחרו אסטרטגיה (עשיית שוק, ארביטראז', טרנד).
- הגדירו פרמטרים: מרווח, מספר רמות, נפח לכל רמה.
- חברו מחיר ייחוס מבורסה חיצונית דרך WebSocket.
- הריצו במצב בדיקה על סביבת staging פנימית.
- נטרו מדדים: נפח, מרווח, רווח והפסד, הזמנות פעילות.
כיצד בנוי בוט עושות שוק?
שלושה מרכיבים מרכזיים: אסטרטגיית ציטוט, ניהול מלאי, והגנה מפני תנועות שוק. נבחן כל אחד עם דוגמאות קוד.
אסטרטגיית ציטוט
class MarketMakerBot:
def __init__(self, pair: str, config: MMConfig):
self.pair = pair
self.spread_pct = config.spread_pct # 0.1% = 0.001
self.order_levels = config.order_levels # колиÑеÑÑво ÑÑовней (5-10)
self.level_spacing = config.level_spacing # ÑаÑÑÑоÑние Ð¼ÐµÐ¶Ð´Ñ ÑÑовнÑми
self.level_size = config.level_size # обÑÑм на ÑÑовне
self.reference_exchange = config.reference # Binance Ð´Ð»Ñ price feed
async def update_quotes(self):
# ÐолÑÑаем reference price Ñ Ð²Ð½ÐµÑней биÑжи
ref_price = await self.get_reference_price()
# ÐÑÑиÑлÑем bid/ask
half_spread = ref_price * self.spread_pct / 2
best_bid = ref_price - half_spread
best_ask = ref_price + half_spread
# ÐенеÑиÑÑем неÑколÑко ÑÑовней
new_bids = []
new_asks = []
for i in range(self.order_levels):
bid_price = best_bid * (1 - self.level_spacing * i)
ask_price = best_ask * (1 + self.level_spacing * i)
size = self.level_size * (1 + i * 0.5) # ÑвелиÑиваем ÑÐ°Ð·Ð¼ÐµÑ Ð´Ð°Ð»ÑÑе Ð¾Ñ mid
new_bids.append({'price': bid_price, 'size': size})
new_asks.append({'price': ask_price, 'size': size})
await self.refresh_orders(new_bids, new_asks)
async def refresh_orders(self, new_bids, new_asks):
# ÐÑменÑем ÑÑаÑÑе оÑдеÑа и вÑÑÑавлÑем новÑе аÑомаÑно
# ÐÑполÑзÑем bulk cancel + bulk place Ð´Ð»Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð¸Ð·Ð°Ñии вÑемени без коÑиÑовок
await self.exchange.cancel_all_orders(self.pair)
await asyncio.gather(
*[self.exchange.place_order(self.pair, 'buy', b['price'], b['size']) for b in new_bids],
*[self.exchange.place_order(self.pair, 'sell', a['price'], a['size']) for a in new_asks]
)
"} ניהול מלאי
במהלך מסחר פעיל, המלאי (יחס בין בסיס לציטוט) סוטה. יש צורך באיזון מחדש:
def calculate_inventory_skew(self, base_balance: float, quote_balance: float, mid_price: float) -> float:
""" Возвращает skew (-1.0 до +1.0)
-1.0: весь баланс в base (слишком много куплено) -> снижаем bid, повышаем ask
+1.0: весь баланс в quote (слишком много продано) -> повышаем bid, снижаем ask
"""
base_value = base_balance * mid_price
total_value = base_value + quote_balance
if total_value == 0:
return 0.0
ideal_pct = 0.5 # целевой баланс 50/50
current_pct = base_value / total_value
return (ideal_pct - current_pct) * 2 # нормируем к [-1, 1]
def apply_inventory_skew(self, mid_price: float, skew: float) -> tuple:
"""Смещаем котировки в сторону снижения дисбаланса"""
skew_adjustment = mid_price * self.skew_factor * skew
adjusted_mid = mid_price + skew_adjustment
bid = adjusted_mid * (1 - self.spread_pct / 2)
ask = adjusted_mid * (1 + self.spread_pct / 2)
return bid, ask
הגנה מפני תנועות שוק
תנועות שוק חדות עם פוזיציות פתוחות מהוות סיכון להפסד. הגנה:
async def check_price_deviation(self):
"""Останавливаем котирование при резком движении рынка"""
current_ref = await self.get_reference_price()
price_change = abs(current_ref - self.last_ref_price) / self.last_ref_price
if price_change > self.max_price_change: # например 0.5%
await self.cancel_all_orders()
await asyncio.sleep(self.pause_duration) # пауза N секунд
self.last_ref_price = current_refהתקפת סנדוויץ' מתרחשת כאשר תוקף מציב הזמנות לפני ואחרי העסקה שלך כדי להרוויח מתנועת המחיר. הגנה: השתמשו ב-mempool פרטי (למשל, Flashbots Protect) ויישמו בדיקת השפעת מחיר מקסימלית בחוזה עצמו. עבור בוטים של CEX זה פחות רלוונטי, אבל עבור אינטגרציית DEX זה חובה.
כיצד ליישם גישה פנימית לבורסה?
היתרון המרכזי של בוט פנימי הוא שהוא יכול לעבוד דרך ה-API הפנימי של הבורסה, תוך עקיפת תקרת HTTP, מגבלות קצב ועמלות. במקום HTTP, אנו משתמשים ב-IPC או gRPC, ומצמצמים את זמן האחזור מ-1–5 אלפיות השנייה ל-100 מיקרו-שניות. להלן דוגמה ב-Go:
// Прямой вызов matching engine без HTTP
type InternalBotConnector struct {
matchingEngine *MatchingEngine
balanceManager *BalanceManager
}
func (c *InternalBotConnector) PlaceOrder(order Order) ([]Trade, error) {
// Прямой вызов, без сети
return c.matchingEngine.AddOrder(order)
}
func (c *InternalBotConnector) GetOrderBook(pair string) OrderBook {
return c.matchingEngine.GetSnapshot(pair)
}בוט פנימי מהיר פי 50 מ-API חיצוני מבחינת זמן אחזור. זה קריטי לאסטרטגיות בתדירות גבוהה שבהן כל אלפית שנייה חשובה.
כיצד לנטר את ביצועי הבוט?
ניטור רווח והפסד בזמן אמת הוא חובה. אנו מיישמים מדדים לנפח, מרווח שנתפס, ומרווח אפקטיבי בנקודות בסיס.
class BotMetrics:
def __init__(self):
self.filled_volume = defaultdict(float)
self.pnl = defaultdict(float)
self.spread_captured = defaultdict(float)
def on_fill(self, trade: Trade):
pair = trade.pair
self.filled_volume[pair] += trade.quantity
# P&L расчёт: каждый fill с положительным спредом = доход
if trade.is_maker:
# Maker fill: мы получили спред
spread_earned = abs(trade.price - self.mid_price[pair]) * trade.quantity
self.spread_captured[pair] += spread_earned
def get_stats(self) -> dict:
return {
pair: {
'volume_24h': self.filled_volume[pair],
'spread_captured': self.spread_captured[pair],
'effective_spread_bps': self.spread_captured[pair] / self.filled_volume[pair] * 10000 if self.filled_volume[pair] > 0 else 0
}
for pair in self.filled_volume
}לוח מחוונים של Grafana מציג מדדים מרכזיים: נפח מסחר, מרווח, רווח והפסד, מספר הזמנות פעילות. התראות נשלחות ל-Telegram/Slack כאשר המדדים חורגים מהנורמה.
מה כלול בפיתוח?
- עיצוב ארכיטקטורה (מפרט ברמה גבוהה + מפורט)
- יישום אסטרטגיות ציטוט וניהול סיכונים
- אינטגרציה עם ה-API הפנימי של הבורסה (REST, WebSocket, gRPC)
- פיתוח לוח מחוונים לניטור (Grafana + Prometheus)
- בדיקות עומס וביקורת אבטחה
- תיעוד והדרכת צוות
אפשרויות נוספות
- אינטגרציה עם אורקל Chainlink להזנת מחירים
- תמיכה במספר זוגות ואסטרטגיות
- גיבוי ושחזור מאסון
מקרה בוחן: כיצד הגדלנו את נזילות הבורסה פי 4
לקוח: בורסה צעירה עם מחזור יומי של 5 מיליון דולר. המרווח היה 0.5%, עומק ספר ההזמנות רק 10 BTC במחיר הטוב ביותר. פיתחנו עושה שוק פנימי באמצעות אלגוריתם הציטוט שתואר לעיל. תוצאות לאחר חודש:
- המרווח הצטמצם ל-0.08%.
- עומק ספר ההזמנות גדל ל-200 BTC בחמש רמות.
- המחזור גדל ל-25 מיליון דולר ליום (גידול של 400%).
- החיסכון בעמלות אם היינו משתמשים ב-API חיצוני היה 3,000 דולר ליום, אבל עם גישה פנימית העמלות אפסיות.
השוואה: בוט פנימי מול API חיצוני
| מדד | בוט פנימי | API חיצוני |
|---|---|---|
| זמן אחזור | < 100 מיקרו-שניות | 1–5 אלפיות השנייה |
| עמלות | אפס | מייקר/טייקר |
| מגבלות קצב | אין | כן |
| גישה לספר הזמנות | מלאה | מוגבלת |
| אבטחה | סביבה מבודדת | תלוי בספק |
פיתוח בוט מסחר עם אסטרטגיית עשיית שוק לשימוש פנימי: 3–5 שבועות. כולל אסטרטגיית ציטוט, ניהול מלאי, לוח מחוונים לניטור, ואינטגרציה עם ה-API הפנימי של הבורסה.
קבלו ייעוץ: דונו בדרישות שלכם, נציע ארכיטקטורה ונעריך את ההשפעה הכלכלית. הזמינו פיתוח של בוט מסחר לבורסה שלכם.







