שילוב Hummingbot למסחר Market Making ואלגוריתמי

שילוב Hummingbot למסחר Market Making ואלגוריתמי השקת את Hummingbot עם Pure Market Making, ושבוע לאחר מכן ה-PnL שלך ירד ב-15%? הסיבה היא סטיית מלאי — צבירה של נכס הבסיס במהלך תנועות טרנד. שילבנו את Hummingbot עבור למעלה מ-20 פרויקטים, החל מסטארטאפים ועד...

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1451
  • image_web-applications_feedme_466_0.webp
    פיתוח אפליקציית ווב עבור FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    פיתוח אתר עבור BELFINGROUP
    1005
  • image_ecommerce_furnoro_435_0.webp
    פיתוח חנות מקוונת לחברת FURNORO
    1270
  • image_logo-advance_0.webp
    עיצוב לוגו לחברת B2B Advance
    719
  • image_crm_enviok_479_0.webp
    פיתוח אפליקציית ווב עבור Enviok
    1011

שילוב Hummingbot ליצירת שוק ומסחר אלגוריתמי

השקת את Hummingbot עם Pure Market Making, ושבוע לאחר מכן הרווח שלך ירד ב-15%? הסיבה היא סטיית מלאי — הצטברות של נכס הבסיס במהלך תנועות מגמה. שילבנו את Hummingbot עבור למעלה מ-20 פרויקטים, מסטארטאפים ועד חברות מסחר פרטיות, ואנחנו יודעים כיצד להימנע מטעויות נפוצות. במאמר זה נדון בתצורה, סקריפטים מותאמים אישית ובקרת סיכון.

Hummingbot הוא מסגרת קוד פתוח ליצירת שוק ואסטרטגיות נזילות, המתוארת בתיעוד הרשמי. בניגוד ל-Backtrader או Freqtrade, Hummingbot בנוי למרווח הצעת מחיר-ביקוש: הצבת הצעות דו-צדדיות וניהול מלאי. הוא תומך ביותר מ-40 בורסות (CEX ו-DEX). בהתבסס על הנתונים שלנו, Hummingbot מספק 30% פחות סטיית מלאי בהשוואה ל-Freqtrade באותם תנאי שוק. חיסכון ממוצע בעמלות בהיקף חודשי של מיליון דולר הוא כ-1500 דולר.

אסטרטגיות ליצירת שוק

אסטרטגיה מקור רווח סיכון עיקרי מרווח אופייני ב-ETH/USDT
Pure Market Making מרווח הצעת מחיר-ביקוש בניכוי עמלות סטיית מלאי במהלך תנועות כיווניות 0.06-0.15%
Cross-Exchange Market Making מרווח בין בורסות בניכוי עלות גידור החלקה בעת גידור 0.03-0.08%
Perpetual Market Making מרווח + שער מימון חיסול במהלך תנועות חזקות 0.04-0.12%
AMM Arbitrage ארביטראז' בין DEX ל-CEX עלות גז והחלקה 0.01-0.05%

הטבלה מראה: Pure Market Making מציע את המרווח הגדול ביותר אך דורש בקרת מלאי קפדנית. Cross-Exchange בטוח יותר אך מורכב יותר להגדרה.

למה בקרת מלאי חשובה

הסיכון העיקרי ביצירת שוק הוא הצטברות מלאי בכיוון אחד במהלך תנועת שוק כיוונית. לדוגמה, בזוג BTC-USDT כשהמחיר עולה, הבוט מוכר את נכס הבסיס (BTC) וצובר USDT. אם לא מתאימים את המרווח בזמן, יחס המלאי יכול להגיע ל-80% בנכס הבסיס, ותיקון יגרום להפסדים עקב ירידת ערך.

אנו משתמשים בסקריפט עם שינוי מרווח דינמי בהתבסס על יחס המלאי. הנה דוגמה:

class InventoryAwareMarketMaker(ScriptStrategyBase): target_base_pct = Decimal("0.5") # целевые 50% в base asset max_shift_spread = Decimal("0.003") # максимальный сдвиг спреда def on_tick(self): # Рассчитываем текущий inventory ratio balances = self.connectors[self.exchange].get_all_balances() base_balance = balances.get("BTC", Decimal(0)) quote_balance = balances.get("USDT", Decimal(0)) mid_price = self.connectors[self.exchange].get_mid_price(self.trading_pair) base_value = base_balance * mid_price total_value = base_value + quote_balance current_base_pct = base_value / total_value if total_value > 0 else Decimal("0.5") # Сдвигаем спред чтобы восстановить баланс inventory_skew = current_base_pct - self.target_base_pct shift = inventory_skew * self.max_shift_spread * 2 # Если перебор base — сдвигаем цены вниз (стимулируем продажи) bid_spread = self.base_spread - shift ask_spread = self.base_spread - shift # цена продажи ниже = больше продаж 

גישה זו הפחיתה את סטיית המלאי באחד הפרויקטים שלנו מ-35% ל-8% תוך יומיים. הפרמטר המרכזי הוא class InventoryAwareMarketMaker(ScriptStrategyBase): target_base_pct = Decimal("0.5") # целевые 50% в base asset max_shift_spread = Decimal("0.003") # максимальный сдвиг спреда def on_tick(self): # Рассчитываем текущий inventory ratio balances = self.connectors[self.exchange].get_all_balances() base_balance = balances.get("BTC", Decimal(0)) quote_balance = balances.get("USDT", Decimal(0)) mid_price = self.connectors[self.exchange].get_mid_price(self.trading_pair) base_value = base_balance * mid_price total_value = base_value + quote_balance current_base_pct = base_value / total_value if total_value > 0 else Decimal("0.5") # Сдвигаем спред чтобы восстановить баланс inventory_skew = current_base_pct - self.target_base_pct shift = inventory_skew * self.max_shift_spread * 2 # Если перебор base — сдвигаем цены вниз (стимулируем продажи) bid_spread = self.base_spread - shift ask_spread = self.base_spread - shift # цена продажи ниже = больше продаж : עבור זוגות עם תנודתיות גבוהה הגדר 45%, עבור יציבים 55%.

כיצד להתקין את Hummingbot

השיטה המומלצת היא באמצעות Docker. שכפל את המאגר והרץ את הקונטיינר:

git clone https://github.com/hummingbot/hummingbot.git cd hummingbot docker compose up -d 

בניית Docker מבטיחה שחזור תצורה.

התקנה חלופית באמצעות pip

התקן באמצעות pip: target_base_pct, אך עלולות להתעורר בעיות תלות ב-Windows. אנו ממליצים להשתמש בסביבה וירטואלית.

כיצד לכתוב אסטרטגיה מותאמת אישית

from hummingbot.strategy.script_strategy_base import ScriptStrategyBase from hummingbot.core.data_type.common import OrderType, TradeType from decimal import Decimal class SimpleMarketMaker(ScriptStrategyBase): """Простой маркет-мейкер с фиксированным спредом""" trading_pair = "BTC-USDT" exchange = "binance" # Параметры bid_spread = Decimal("0.001") # 0.1% под mid-price ask_spread = Decimal("0.001") # 0.1% над mid-price order_amount = Decimal("0.001") # BTC на каждую сторону refresh_time = 30 # секунд markets = {exchange: {trading_pair}} def on_tick(self): if self.current_timestamp - self.last_refresh < self.refresh_time: return self.cancel_all_orders() mid_price = self.connectors[self.exchange].get_mid_price(self.trading_pair) if not mid_price: return bid_price = mid_price * (1 - self.bid_spread) ask_price = mid_price * (1 + self.ask_spread) self.buy( connector_name=self.exchange, trading_pair=self.trading_pair, amount=self.order_amount, order_type=OrderType.LIMIT, price=bid_price, ) self.sell( connector_name=self.exchange, trading_pair=self.trading_pair, amount=self.order_amount, order_type=OrderType.LIMIT, price=ask_price, ) self.last_refresh = self.current_timestamp 

סקריפט זה הוא בסיס. עבור סביבת ייצור, הוסף בקרת מלאי, טיימאאוט ורישום שגיאות.

כיצד להגדיר אסטרטגיה באמצעות YAML

# conf/strategies/pure_market_making.yml strategy: pure_market_making exchange: binance market: BTC-USDT bid_spread: 0.1 # % ask_spread: 0.1 # % minimum_spread: -100 # допускаем отрицательный спред order_refresh_time: 30 # секунд max_order_age: 1800 # 30 минут order_amount: 0.001 filled_order_delay: 60 inventory_skew_enabled: true inventory_target_base_pct: 50 inventory_range_multiplier: 1.0 

מה כולל שילוב Hummingbot

  • ניתוח תרחיש מסחר ובחירת אסטרטגיה.
  • התקנה ותצורת תשתית (Docker, שרת).
  • כתיבת סקריפטים מותאמים אישית לפרמטרים שלך.
  • שילוב בורסה (מפתחות API, רשימת IP לבנה).
  • בדיקות חוזרות על נתונים היסטוריים ובדיקות בסביבת ארגז חול.
  • הדרכת צוות ותיעוד.

ציר הזמן תלוי במורכבות האסטרטגיה: מיום אחד להגדרת Pure Market Making בסיסית ועד 3 ימים לסקריפטים מותאמים אישית עם Cross-Exchange וגידור.

טעויות נפוצות בשילוב Hummingbot

טעות השלכה פתרון
התעלמות מסטיית מלאי הצטברות מלאי עודף השתמש בשינוי מרווח דינמי
target_base_pct שגוי הפסדים במהלך מגמות 40-45% לזוגות תנודתיים, 50% ליציבים
חוסר בסטופ-לוס הפסדים גדולים במהלך תנועות >5% בטל הזמנות וקבע פוזיציה
רענון תכוף מדי עמלות מופרזות הגדל את git clone https://github.com/hummingbot/hummingbot.git cd hummingbot docker compose up -d ל-60 שניות

בפרויקט אחד, גילינו שבוט עם pip install hummingbot על ETH-USDT הציב 200 הזמנות בדקה, ואכל את כל הרווח בעמלה של 0.1%. לאחר הגדרת from hummingbot.strategy.script_strategy_base import ScriptStrategyBase from hummingbot.core.data_type.common import OrderType, TradeType from decimal import Decimal class SimpleMarketMaker(ScriptStrategyBase): """Простой маркет-мейкер с фиксированным спредом""" trading_pair = "BTC-USDT" exchange = "binance" # Параметры bid_spread = Decimal("0.001") # 0.1% под mid-price ask_spread = Decimal("0.001") # 0.1% над mid-price order_amount = Decimal("0.001") # BTC на каждую сторону refresh_time = 30 # секунд markets = {exchange: {trading_pair}} def on_tick(self): if self.current_timestamp - self.last_refresh < self.refresh_time: return self.cancel_all_orders() mid_price = self.connectors[self.exchange].get_mid_price(self.trading_pair) if not mid_price: return bid_price = mid_price * (1 - self.bid_spread) ask_price = mid_price * (1 + self.ask_spread) self.buy( connector_name=self.exchange, trading_pair=self.trading_pair, amount=self.order_amount, order_type=OrderType.LIMIT, price=bid_price, ) self.sell( connector_name=self.exchange, trading_pair=self.trading_pair, amount=self.order_amount, order_type=OrderType.LIMIT, price=ask_price, ) self.last_refresh = self.current_timestamp , המרווח נשמר והעמלות ירדו ב-60%.

Hummingbot הוא התקן דה-פקטו ליצירת שוק קריפטו במרחב הקוד הפתוח. המהנדסים שלנו מוסמכים על ידי Hummingbot ויעזרו להגדיר אסטרטגיה לפרופיל הסיכון שלך. צור קשר לייעוץ — ננתח את השוק ונציע את התצורה האופטימלית. הזמן שילוב Hummingbot והרווח שלך כבר לא יהיה תלוי במקרה.