Переглянути джерело

Enhance HyperliquidClient order handling - Implemented slippage calculation for market orders by fetching the current market price, ensuring more accurate order execution. Updated order creation to include slippage-adjusted pricing, improving trade reliability.

Carles Sentis 2 тижнів тому
батько
коміт
fd6d9c27f5
2 змінених файлів з 27 додано та 3 видалено
  1. 26 2
      src/hyperliquid_client.py
  2. 1 1
      src/telegram_bot.py

+ 26 - 2
src/hyperliquid_client.py

@@ -278,9 +278,33 @@ class HyperliquidClient:
                 logger.error("❌ Client not initialized")
                 return None
             
-            # CCXT-style order creation
+            # Get current market price for slippage calculation
+            ticker = self.sync_client.fetch_ticker(symbol)
+            if not ticker:
+                logger.error(f"❌ Could not fetch ticker for {symbol}")
+                return None
+                
+            current_price = ticker.get('last')
+            if not current_price:
+                logger.error(f"❌ Could not get current price for {symbol}")
+                return None
+            
+            # Apply slippage tolerance (default 0.5% for market orders)
+            slippage_percent = 0.5  # 0.5% slippage
+            if side == 'buy':
+                # For buy orders, increase price to ensure fill
+                slippage_price = current_price * (1 + slippage_percent / 100)
+            else:
+                # For sell orders, decrease price to ensure fill
+                slippage_price = current_price * (1 - slippage_percent / 100)
+            
+            logger.info(f"🔄 Market order: {side} {amount} {symbol} @ current ${current_price:.2f} (slippage price: ${slippage_price:.2f})")
+            
+            # CCXT-style order creation with price for slippage
             order_params = params or {}
-            order = self.sync_client.create_market_order(symbol, side, amount, params=order_params)
+            order_params['price'] = slippage_price  # Add price for slippage calculation
+            
+            order = self.sync_client.create_market_order(symbol, side, amount, price=slippage_price, params=order_params)
             
             logger.info(f"✅ Successfully placed {side} market order for {amount} {symbol}")
             logger.debug(f"📄 Order details: {order}")

+ 1 - 1
src/telegram_bot.py

@@ -37,7 +37,7 @@ class TelegramTradingBot:
         self.bot_heartbeat_seconds = getattr(Config, 'BOT_HEARTBEAT_SECONDS', 10)
         self.external_trade_timestamps = set()  # Track external trade timestamps to avoid duplicates
         self.last_position_check = {}  # Track last position state for comparison
-        self._position_tracker = {}  # For enhanced position tracking
+        self.position_tracker = {}  # For enhanced position tracking
         self.stats = None
         self.version = "Unknown"  # Will be set by launcher