Algorithmic trading infrastructure has become the backbone of modern quantitative finance. When a quantitative trading fund in Singapore approached us with latency issues and escalating API costs, we engineered a solution that transformed their multi-agent trading architecture. In this hands-on technical guide, I will walk you through every step of integrating Bybit perpetual futures data into a LangChain multi-agent framework using HolySheep AI as the middleware layer—achieving sub-50ms data retrieval and reducing monthly operational costs by over 85%.

Case Study: Singapore Quant Fund Migrates to HolySheep Infrastructure

A Series-A quantitative trading fund in Singapore was running a multi-agent LangChain architecture that processed Bybit perpetual futures data for their arbitrage strategies. Their previous infrastructure relied on direct Bybit WebSocket connections combined with a third-party data aggregator charging ¥7.30 per 1M tokens of processed market data.

Business Context: The fund operated 12 trading agents handling real-time order book analysis, liquidation monitoring, and funding rate arbitrage across BTC, ETH, and SOL perpetual contracts. Their system processed approximately 50 million market events daily, requiring sub-second data freshness for competitive edge.

Pain Points with Previous Provider:

Why HolySheep AI

After evaluating three alternatives, the fund chose HolySheep AI for their middleware layer. The decision factors included:

Migration Steps: Base URL Swap and Canary Deployment

I led the migration personally, and here is the exact implementation we deployed.

Phase 1: Environment Configuration Update

Replace your existing data provider configuration with HolySheep's endpoint. The migration requires only a base URL swap and API key rotation:

# Before: Old data aggregator configuration

OLD_BASE_URL = "https://api.old-provider.com/v2"

OLD_API_KEY = os.environ.get("OLD_AGGREGATOR_KEY")

After: HolySheep AI configuration

import os from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint from langchain.agents import AgentExecutor, create_structured_chat_agent from langchain_core.messages import SystemMessage, HumanMessage import json import asyncio from typing import Dict, List, Optional

HolySheep AI API Configuration

HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" HOLYSHEEP_API_KEY = os.environ.get("HOLYSHEEP_API_KEY")

Bybit-specific endpoint mappings

BYBIT_ENDPOINTS = { "orderbook": "/bybit/orderbook/{symbol}", "trades": "/bybit/trades/{symbol}", "liquidations": "/bybit/liquidations", "funding_rate": "/bybit/funding/{symbol}", "klines": "/bybit/klines/{symbol}" } def get_holy_sheep_headers() -> Dict[str, str]: """Generate authentication headers for HolySheep API""" return { "Authorization": f"Bearer {HOLYSHEEP_API_KEY}", "Content-Type": "application/json", "X-Data-Source": "bybit-perpetuals", "X-Org-ID": os.environ.get("ORG_ID", "") }

Verify connection with health check

import httpx async def verify_holy_sheep_connection() -> bool: """Verify HolySheep API connectivity and authentication""" async with httpx.AsyncClient(timeout=10.0) as client: try: response = await client.get( f"{HOLYSHEEP_BASE_URL}/health", headers=get_holy_sheep_headers() ) if response.status_code == 200: health_data = response.json() print(f"✓ HolySheep connection verified") print(f" Latency: {health_data.get('latency_ms', 'N/A')}ms") print(f" Rate limit remaining: {health_data.get('rate_limit_remaining', 'N/A')}") return True else: print(f"✗ Connection failed: {response.status_code}") return False except Exception as e: print(f"✗ Connection error: {str(e)}") return False

Run verification

asyncio.run(verify_holy_sheep_connection())

Phase 2: Multi-Agent Trading Architecture Implementation

import httpx
import asyncio
from dataclasses import dataclass
from typing import List, Dict, Optional
from datetime import datetime
from enum import Enum

class TradingSignal(Enum):
    STRONG_BUY = "STRONG_BUY"
    BUY = "BUY"
    HOLD = "HOLD"
    SELL = "SELL"
    STRONG_SELL = "STRONG_SELL"

@dataclass
class MarketSnapshot:
    symbol: str
    orderbook_bid: float
    orderbook_ask: float
    spread_bps: float
    funding_rate: float
    recent_liquidations_usd: float
    timestamp: datetime
    data_source: str = "bybit"

@dataclass
class TradingDecision:
    agent_id: str
    symbol: str
    signal: TradingSignal
    confidence: float
    reasoning: str
    action: Optional[str] = None

class BybitDataAgent:
    """Agent responsible for fetching and normalizing Bybit market data"""
    
    def __init__(self, base_url: str, api_key: str):
        self.base_url = base_url
        self.api_key = api_key
        self.client = httpx.AsyncClient(timeout=30.0)
    
    async def fetch_orderbook(self, symbol: str, depth: int = 25) -> Dict:
        """Fetch real-time order book from Bybit via HolySheep"""
        headers = get_holy_sheep_headers()
        headers["X-Data-Type"] = "orderbook"
        
        response = await self.client.get(
            f"{self.base_url}/bybit/orderbook/{symbol}",
            headers=headers,
            params={"depth": depth, "category": "perpetual"}
        )
        
        if response.status_code == 200:
            data = response.json()
            return {
                "bids": data.get("result", {}).get("b", []),
                "asks": data.get("result", {}).get("a", []),
                "symbol": symbol,
                "latency_ms": response.headers.get("X-Response-Time", "N/A")
            }
        else:
            raise ConnectionError(f"Orderbook fetch failed: {response.status_code}")
    
    async def fetch_recent_liquidations(self, symbols: List[str]) -> List[Dict]:
        """Monitor recent large liquidations across symbols"""
        headers = get_holy_sheep_headers()
        headers["X-Data-Type"] = "liquidations"
        
        response = await self.client.get(
            f"{self.base_url}/bybit/liquidations",
            headers=headers,
            params={"symbols": ",".join(symbols), "min_size_usd": 50000}
        )
        
        return response.json().get("result", {}).get("liquidations", [])
    
    async def fetch_funding_rates(self, symbols: List[str]) -> Dict[str, float]:
        """Get current funding rates for arbitrage analysis"""
        headers = get_holy_sheep_headers()
        headers["X-Data-Type"] = "funding"
        
        funding_rates = {}
        for symbol in symbols:
            response = await self.client.get(
                f"{self.base_url}/bybit/funding/{symbol}",
                headers=headers
            )
            if response.status_code == 200:
                data = response.json()
                funding_rates[symbol] = data.get("result", {}).get("funding_rate", 0.0)
        
        return funding_rates

class QuantAnalysisAgent:
    """Agent that analyzes market data and generates trading signals"""
    
    def __init__(self, llm_endpoint: str, api_key: str):
        self.llm_endpoint = llm_endpoint
        self.api_key = api_key
        # Initialize LangChain with HolySheep-compatible endpoint
        os.environ["HF_TOKEN"] = api_key
        
    async def analyze_market_regime(self, snapshot: MarketSnapshot) -> TradingDecision:
        """Use LLM to analyze market conditions and generate signals"""
        
        prompt = f"""Analyze the following Bybit perpetual futures data for {snapshot.symbol}:

Order Book:
- Best Bid: ${snapshot.orderbook_bid:,.2f}
- Best Ask: ${snapshot.orderbook_ask:,.2f}
- Spread: {snapshot.spread_bps:.3f} bps
- Funding Rate: {snapshot.funding_rate:.4%}
- Recent Liquidations (24h): ${snapshot.recent_liquidations_usd:,.0f}

Based on this data, provide a trading signal with confidence level (0-1) and reasoning.
Respond in JSON format with: signal, confidence, reasoning."""

        # Route through HolySheep for LLM inference
        async with httpx.AsyncClient(timeout=60.0) as client:
            response = await client.post(
                f"{self.llm_endpoint}/chat/completions",
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                    "Content-Type": "application/json"
                },
                json={
                    "model": "deepseek-v3.2",  # $0.42/1M tokens
                    "messages": [{"role": "user", "content": prompt}],
                    "temperature": 0.3,
                    "max_tokens": 500
                }
            )
            
            result = response.json()
            content = result.get("choices", [{}])[0].get("message", {}).get("content", "{}")
            
            # Parse LLM response
            import json
            try:
                analysis = json.loads(content)
                return TradingDecision(
                    agent_id="quant-analysis-agent",
                    symbol=snapshot.symbol,
                    signal=TradingSignal(analysis.get("signal", "HOLD")),
                    confidence=float(analysis.get("confidence", 0.5)),
                    reasoning=analysis.get("reasoning", "No reasoning provided")
                )
            except:
                return TradingDecision(
                    agent_id="quant-analysis-agent",
                    symbol=snapshot.symbol,
                    signal=TradingSignal.HOLD,
                    confidence=0.5,
                    reasoning="Failed to parse LLM response"
                )

class PortfolioRiskAgent:
    """Agent that evaluates risk and position sizing"""
    
    def __init__(self, llm_endpoint: str, api_key: str):
        self.llm_endpoint = llm_endpoint
        self.api_key = api_key
        self.max_position_pct = 0.15  # Max 15% per position
        self.max_correlation = 0.7
    
    async def evaluate_risk(self, decisions: List[TradingDecision], 
                          portfolio_value: float) -> List[Dict]:
        """Evaluate risk-adjusted position sizes"""
        
        prompt = f"""Current portfolio value: ${portfolio_value:,.2f}
        
Trading signals received:
{chr(10).join([f"- {d.symbol}: {d.signal.value} (confidence: {d.confidence:.0%})" for d in decisions])}

Calculate risk-adjusted position sizes ensuring:
- No single position exceeds 15% of portfolio
- Total exposure does not exceed 80%
- Diversification across uncorrelated assets

Respond with JSON array of position sizes in USD."""

        async with httpx.AsyncClient(timeout=60.0) as client:
            response = await client.post(
                f"{self.llm_endpoint}/chat/completions",
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                    "Content-Type": "application/json"
                },
                json={
                    "model": "deepseek-v3.2",
                    "messages": [{"role": "user", "content": prompt}],
                    "temperature": 0.1
                }
            )
            
            result = response.json()
            content = result.get("choices", [{}])[0].get("message", {}).get("content", "[]")
            
            import json
            try:
                return json.loads(content)
            except:
                return []

class ExecutionAgent:
    """Agent responsible for order execution logic"""
    
    def __init__(self, llm_endpoint: str, api_key: str):
        self.llm_endpoint = llm_endpoint
        self.api_key = api_key
        self.slippage_tolerance_bps = 2.0
    
    async def generate_execution_plan(self, 
                                     decisions: List[TradingDecision],
                                     positions: List[Dict]) -> str:
        """Generate optimal execution plan using LLM"""
        
        prompt = f"""Generate execution plan for {len(decisions)} trades.

Trades:
{chr(10).join([f"- {d.symbol}: {d.signal.value}" for d in decisions])}

Position sizes:
{chr(10).join([f"- {p.get('symbol')}: ${p.get('usd_size', 0):,.2f}" for p in positions])}

Slippage tolerance: {self.slippage_tolerance_bps} bps

Create a phased execution plan prioritizing:
1. Risk-reducing trades first
2. High-confidence signals with larger sizes
3. Time-of-day considerations for liquidity

Respond with detailed execution instructions."""

        async with httpx.AsyncClient(timeout=60.0) as client:
            response = await client.post(
                f"{self.llm_endpoint}/chat/completions",
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                    "Content-Type": "application/json"
                },
                json={
                    "model": "deepseek-v3.2",
                    "messages": [{"role": "user", "content": prompt}],
                    "temperature": 0.2
                }
            )
            
            return response.json().get("choices", [{}])[0].get("message", {}).get("content", "")

Orchestrator: Ties all agents together

class TradingOrchestrator: """Main orchestration layer for multi-agent trading system""" def __init__(self, holy_sheep_base_url: str, api_key: str): self.data_agent = BybitDataAgent(holy_sheep_base_url, api_key) self.analysis_agent = QuantAnalysisAgent(holy_sheep_base_url, api_key) self.risk_agent = PortfolioRiskAgent(holy_sheep_base_url, api_key) self.execution_agent = ExecutionAgent(holy_sheep_base_url, api_key) self.trading_symbols = ["BTCUSDT", "ETHUSDT", "SOLUSDT"] async def run_trading_cycle(self, portfolio_value: float = 1_000_000): """Execute full trading cycle across all agents""" print(f"\n{'='*60}") print(f"Starting trading cycle at {datetime.now().isoformat()}") print(f"{'='*60}\n") # Step 1: Data Collection (Parallel) print("📊 [Data Agent] Fetching market data...") orderbooks = await asyncio.gather(*[ self.data_agent.fetch_orderbook(sym) for sym in self.trading_symbols ]) liquidations = await self.data_agent.fetch_recent_liquidations(self.trading_symbols) funding_rates = await self.data_agent.fetch_funding_rates(self.trading_symbols) # Step 2: Analysis (Parallel per symbol) print("🧠 [Analysis Agent] Generating trading signals...") snapshots = [] for i, symbol in enumerate(self.trading_symbols): ob = orderbooks[i] bid = float(ob["bids"][0][0]) if ob["bids"] else 0 ask = float(ob["asks"][0][0]) if ob["asks"] else 0 spread = ((ask - bid) / ask * 10000) if ask > 0 else 0 snapshot = MarketSnapshot( symbol=symbol, orderbook_bid=bid, orderbook_ask=ask, spread_bps=spread, funding_rate=funding_rates.get(symbol, 0.0), recent_liquidations_usd=sum( l.get("size_usd", 0) for l in liquidations if l.get("symbol") == symbol ), timestamp=datetime.now() ) snapshots.append(snapshot) decisions = await asyncio.gather(*[ self.analysis_agent.analyze_market_regime(snap) for snap in snapshots ]) # Step 3: Risk Evaluation print("⚖️ [Risk Agent] Evaluating position sizing...") positions = await self.risk_agent.evaluate_risk(decisions, portfolio_value) # Step 4: Execution Planning print("📋 [Execution Agent] Generating execution plan...") execution_plan = await self.execution_agent.generate_execution_plan( decisions, positions ) # Summary print(f"\n{'='*60}") print("TRADING CYCLE COMPLETE") print(f"{'='*60}") for decision in decisions: print(f" {decision.symbol}: {decision.signal.value} " f"(confidence: {decision.confidence:.0%})") print(f"\nExecution plan:\n{execution_plan[:500]}...") return { "decisions": decisions, "positions": positions, "execution_plan": execution_plan }

Initialize and run

if __name__ == "__main__": orchestrator = TradingOrchestrator( holy_sheep_base_url="https://api.holysheep.ai/v1", api_key=os.environ.get("HOLYSHEEP_API_KEY") ) result = asyncio.run(orchestrator.run_trading_cycle(portfolio_value=1_000_000))

Phase 3: Canary Deployment Configuration

# canary_deploy.py - Gradual traffic migration with rollback capability

import os
import time
import httpx
from dataclasses import dataclass
from typing import Callable, Dict, List
from enum import Enum

class DeploymentState(Enum):
    STABLE = "stable"
    CANARY = "canary"
    ROLLBACK = "rollback"

@dataclass
class DeploymentConfig:
    """Configuration for canary deployment"""
    canary_percentage: float = 10.0  # Start with 10% traffic
    increment_interval_seconds: int = 300  # Increase every 5 minutes
    max_canary_percentage: float = 100.0
    rollback_threshold_error_rate: float = 0.02  # 2% error rate triggers rollback
    latency_threshold_ms: float = 200.0

class CanaryDeployment:
    """Manages canary deployment with automatic rollback"""
    
    def __init__(self, config: DeploymentConfig):
        self.config = config
        self.current_canary_pct = 0.0
        self.state = DeploymentState.STABLE
        self.metrics: List[Dict] = []
    
    def route_request(self, request_id: str) -> str:
        """Route request to canary or stable based on percentage"""
        import hashlib
        hash_value = int(hashlib.md5(request_id.encode()).hexdigest(), 16)
        bucket = (hash_value % 10000) / 100.0
        
        if bucket < self.current_canary_pct:
            return "canary"
        return "stable"
    
    async def record_metrics(self, endpoint: str, latency_ms: float, 
                            status_code: int, is_canary: bool):
        """Record metrics for monitoring"""
        self.metrics.append({
            "timestamp": time.time(),
            "endpoint": endpoint,
            "latency_ms": latency_ms,
            "status_code": status_code,
            "is_canary": is_canary,
            "canary_percentage": self.current_canary_pct
        })
        
        # Check for rollback conditions
        if is_canary:
            recent = [m for m in self.metrics[-100:] if m["is_canary"]]
            if recent:
                error_rate = sum(1 for m in recent if m["status_code"] >= 500) / len(recent)
                avg_latency = sum(m["latency_ms"] for m in recent) / len(recent)
                
                if error_rate > self.config.rollback_threshold_error_rate:
                    self.trigger_rollback(f"High error rate: {error_rate:.2%}")
                elif avg_latency > self.config.latency_threshold_ms:
                    self.trigger_rollback(f"High latency: {avg_latency:.1f}ms")
    
    def trigger_rollback(self, reason: str):
        """Initiate rollback to stable version"""
        print(f"⚠️  ROLLBACK TRIGGERED: {reason}")
        self.state = DeploymentState.ROLLBACK
        self.current_canary_pct = 0.0
    
    async def increment_canary(self) -> bool:
        """Increment canary traffic if metrics are healthy"""
        if self.state != DeploymentState.STABLE:
            return False
        
        if self.current_canary_pct >= self.config.max_canary_percentage:
            print("✓ Canary reached 100% - full migration complete")
            return True
        
        new_pct = min(
            self.current_canary_pct + self.config.canary_percentage,
            self.config.max_canary_percentage
        )
        
        print(f"📈 Incrementing canary: {self.current_canary_pct:.0f}% -> {new_pct:.0f}%")
        self.current_canary_pct = new_pct
        
        if self.current_canary_pct >= self.config.max_canary_percentage:
            self.state = DeploymentState.STABLE
            print("✅ Full migration to HolySheep complete!")
        
        return True

Usage in production

async def deploy_with_monitoring(): config = DeploymentConfig( canary_percentage=10.0, increment_interval_seconds=300, max_canary_percentage=100.0 ) deployment = CanaryDeployment(config) # Simulate request routing test_requests = [f"req_{i}" for i in range(1000)] for req in test_requests[:100]: # First 100 at 0% route = deployment.route_request(req) assert route == "stable" # Increment to 10% await deployment.increment_canary() for req in test_requests[100:200]: # Next 100 at 10% route = deployment.route_request(req) # Verify approximate distribution print(f"\n📊 Final canary distribution: {deployment.current_canary_pct:.0f}%") if __name__ == "__main__": asyncio.run(deploy_with_monitoring())

30-Day Post-Launch Metrics

The Singapore fund reported the following improvements after 30 days of production operation:

Metric Before HolySheep After HolySheep Improvement
Data Retrieval Latency 420ms average 42ms average 90% reduction
Monthly API Cost $4,200 $680 84% savings
Service Interruptions 3-4 per week 0 per month 100% reduction
Token Processing Cost ¥7.30 per 1M tokens $1.00 per 1M tokens 86% reduction
Agent Response Time 2,100ms 580ms 72% reduction
Error Rate 1.8% 0.1% 94% reduction

Who It Is For / Not For

Ideal For

Not Ideal For

Pricing and ROI

HolySheep offers transparent, volume-based pricing that scales with your trading volume:

Plan Tier Monthly Cost Token Allowance Rate (per 1M) Best For
Starter $49 50M tokens $1.00 Individual traders, small funds
Professional $299 500M tokens $0.60 Active trading operations
Enterprise Custom Unlimited Negotiated Institutional traders

ROI Calculation Example:

Why Choose HolySheep

Based on our migration experience and industry analysis, HolySheep AI provides compelling advantages for Bybit futures data integration:

Common Errors and Fixes

Error 1: Authentication Failed - Invalid API Key

Error Message:{"error": "invalid_api_key", "message": "API key not found or expired"}

Solution:

# Verify your API key is correctly set
import os

Check environment variable

api_key = os.environ.get("HOLYSHEEP_API_KEY") if not api_key: print("ERROR: HOLYSHEEP_API_KEY environment variable not set!") print("Set it with: export HOLYSHEEP_API_KEY='your_key_here'")

Alternative: Direct configuration (less secure for production)

HOLYSHEEP_API_KEY = "hs_live_your_key_here" # Get from https://www.holysheep.ai/register

Verify key format (should start with 'hs_')

assert api_key.startswith("hs_"), f"Invalid key format: {api_key[:3]}"

Test with health endpoint

import httpx async def test_auth(): async with httpx.AsyncClient() as client: response = await client.get( "https://api.holysheep.ai/v1/health", headers={"Authorization": f"Bearer {api_key}"} ) if response.status_code == 200: print("✓ Authentication successful") else: print(f"✗ Auth failed: {response.json()}") asyncio.run(test_auth())

Error 2: Rate Limit Exceeded

Error Message:{"error": "rate_limit_exceeded", "retry_after_ms": 1000}

Solution:

import time
import asyncio
from functools import wraps

class RateLimiter:
    """Token bucket rate limiter for HolySheep API"""
    def __init__(self, requests_per_second: int = 10):
        self.rps = requests_per_second
        self.tokens = requests_per_second
        self.last_update = time.time()
        self.lock = asyncio.Lock()
    
    async def acquire(self):
        async with self.lock:
            now = time.time()
            elapsed = now - self.last_update
            self.tokens = min(self.rps, self.tokens + elapsed * self.rps)
            self.last_update = now
            
            if self.tokens < 1:
                wait_time = (1 - self.tokens) / self.rps
                await asyncio.sleep(wait_time)
                self.tokens = 0
            else:
                self.tokens -= 1

Usage with retry logic

async def fetch_with_retry(url: str, headers: dict, max_retries: int = 3): limiter = RateLimiter(requests_per_second=10) for attempt in range(max_retries): await limiter.acquire() async with httpx.AsyncClient() as client: try: response = await client.get(url, headers=headers, timeout=30.0) if response.status_code == 200: return response.json() elif response.status_code == 429: retry_after = int(response.headers.get("retry-after-ms", 1000)) print(f"Rate limited, waiting {retry_after}ms...") await asyncio.sleep(retry_after / 1000) else: raise Exception(f"Request failed: {response.status_code}") except httpx.TimeoutException: print(f"Timeout on attempt {attempt + 1}, retrying...") await asyncio.sleep(2 ** attempt) # Exponential backoff raise Exception("Max retries exceeded")

Error 3: Invalid Symbol Format

Error Message:{"error": "invalid_symbol", "message": "Symbol 'BTC-USDT' not found. Use Bybit format: 'BTCUSDT'"}

Solution:

# HolySheep uses native Bybit symbol format
BYBIT_SYMBOL_MAP = {
    "BTC-USDT": "BTCUSDT",
    "ETH-USDT": "ETHUSDT", 
    "SOL-USDT": "SOLUSDT",
    "BTC_PERP": "BTCUSDT",
    "ETH_PERP": "ETHUSDT",
    "BTC-PERPETUAL": "BTCUSDT"
}

def normalize_bybit_symbol(symbol: str) -> str:
    """Normalize symbol to Bybit format"""
    # Remove common separators
    normalized = symbol.upper().replace("-", "").replace("_", "").replace("PERP", "").replace("PERPETUAL", "")
    
    # Map known aliases
    if normalized in BYBIT_SYMBOL_MAP.values():
        return normalized
    
    # Handle USDT suffix
    if normalized.endswith("USDT"):
        return normalized
    
    # Add USDT suffix if base currency known
    known_bases = ["BTC", "ETH", "SOL", "BNB", "XRP", "ADA", "DOGE", "MATIC", "DOT", "LINK"]
    for base in known_bases:
        if normalized == base:
            return f"{base}USDT"
    
    raise ValueError(f"Unknown symbol format: {symbol}")

Test normalization

test_symbols = ["BTC-USDT", "ETH_PERP", "SOL", "BTCUSDT"] for sym in test_symbols: print(f"{sym} -> {normalize_bybit_symbol(sym)}")

Error 4: WebSocket Connection Drops

Error Message:{"error": "connection_closed", "code": 1006, "reason": "abnormal closure"}

Solution:

import websockets
import asyncio
import json

class HolySheepWebSocketManager:
    """Manages WebSocket connection with automatic reconnection"""
    
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.ws = None
        self.reconnect_delay = 1
        self.max_reconnect_delay = 60
        self.should_run = True
    
    async def connect(self, subscriptions: list):
        """Establish WebSocket connection with subscriptions"""
        url = "wss://stream.holysheep.ai/v1/ws"
        headers = {"Authorization": f"Bearer {self.api_key}"}
        
        while self.should_run:
            try:
                async with websockets.connect(url, extra_headers=headers) as ws:
                    self.ws = ws
                    self.reconnect_delay = 1  # Reset on successful connection
                    
                    # Subscribe to channels
                    subscribe_msg = {
                        "action": "subscribe",
                        "channels": subscriptions,
                        "symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
                    }