Bienvenue dans ce tutoriel détaillé. Je m'appelle Mathieu, développeur freelance spécialisé dans les APIs financières. Aujourd'hui, je vais vous guider pas à pas dans la création de votre premier flux de données temps réel depuis Bybit — sans aucun jargon technique incompréhensible. Ce guide est conçu pour les vrais débutants : si vous n'avez jamais touché une API auparavant, vous êtes au bon endroit.
J'ai moi-même découvert les WebSockets il y a 18 mois, perdu devant des documentations obscures. Aujourd'hui, je vais tout vous expliquer avec mes mots, mes erreurs, et surtout mes solutions.
Qu'est-ce qu'un WebSocket et pourquoi Bybit ?
Commençons par le commencement. Imaginez que vous voulez savoir le prix du Bitcoin en temps réel. Vous pourriez demander "Quel est le prix maintenant ?" toutes les secondes — c'est ennuyeux et inefficace. Un WebSocket, c'est comme un téléphone qui sonne automatiquement dès que le prix change. Plus besoin de demander, l'information vient à vous.
Bybit est l'une des plus grandes plateformes d'échange de cryptomonnaies au monde, avec plus de 20 millions d'utilisateurs enregistrés. Leur API WebSocket est stable, rapide, et gratuite — c'est le terrain d'entraînement idéal.
Prérequis : Ce dont vous avez besoin
- Un ordinateur (Windows, Mac ou Linux)
- Une connexion internet
- Un compte Bybit (gratuit) — créer un compte ici
- Python installé (je vous guide pour l'installation)
Étape 1 : Installation de Python
Python est le langage de programmation que nous allons utiliser. C'est le plus accessible pour les débutants.
Sous Windows
- Allez sur python.org/downloads
- Cliquez sur le bouton vert "Download Python 3.11.x"
- Exécutez le fichier téléchargé
- ⚠️ Cochez la case "Add Python to PATH" (c'est crucial !)
- Cliquez "Install Now"
Sous Mac
Ouvrez le Terminal (Recherche → "Terminal") et tapez :
xcode-select --install
python3 --version
Vérification
Ouvrez votre terminal et tapez :
python --version
Vous devriez voir quelque chose comme "Python 3.11.8" s'afficher.
Étape 2 : Installation des bibliothèques
Nous avons besoin de "bibliothèques" — ce sont des outils pré-faits qui nous facilitent la vie. Tapez ces commandes dans votre terminal :
pip install websocket-client pandas numpy
Si ça ne marche pas, essayez :
pip3 install websocket-client pandas numpy
Étape 3 : Votre premier script WebSocket
Créez un nouveau fichier nommé bybit_realtime.py et collez ce code :
#!/usr/bin/env python3
"""
Mon premier script WebSocket Bybit
Auteur : Mathieu - HolySheep AI
"""
import json
import time
from websocket import create_connection
Configuration
SYMBOL = "BTCUSDT" # Paire de trading
BASE_URL = "wss://stream.bybit.com/v5/public/spot"
def on_message(ws, message):
"""Cette fonction est appelée à chaque nouveau message"""
data = json.loads(message)
print(f"📊 Prix BTC/USD : {data}")
def on_error(ws, error):
"""Gestion des erreurs"""
print(f"❌ Erreur : {error}")
def on_close(ws):
"""Quand la connexion se ferme"""
print("🔒 Connexion fermée")
def on_open(ws):
"""Quand la connexion s'ouvre - on s'abonne"""
subscribe_msg = {
"op": "subscribe",
"args": [f"tickers.{SYMBOL}"]
}
ws.send(json.dumps(subscribe_msg))
print(f"✅ Abonné aux données {SYMBOL}")
Création de la connexion
ws = create_connection(BASE_URL)
Attribution des fonctions de rappel
ws.on_message = on_message
ws.on_error = on_error
ws.on_close = on_close
ws.on_open = on_open
print("🔌 Connexion à Bybit...")
ws.run_forever(ping_interval=30)
Pour exécuter ce script, ouvrez votre terminal dans le dossier où se trouve le fichier et tapez :
python bybit_realtime.py
Résultat attendu :
🔌 Connexion à Bybit...
✅ Abonné aux données BTCUSDT
📊 Prix BTC/USD : {'topic': 'tickers.BTCUSDT', 'data': {'symbol': 'BTCUSDT', 'lastPrice': '64235.50', 'price24hPcnt': '0.0234'}}
📊 Prix BTC/USD : {'topic': 'tickers.BTCUSDT', 'data': {'symbol': 'BTCUSDT', 'lastPrice': '64240.12', 'price24hPcnt': '0.0236'}}
📊 Prix BTC/USD : {'topic': 'tickers.BTCUSDT', 'data': {'symbol': 'BTCUSDT', 'lastPrice': '64238.99', 'price24hPcnt': '0.0235'}}
🎉 Félicitations ! Vous recevez maintenant des données en temps réel. Le prix du BTC s'actualise automatiquement.
Étape 4 : Créer un mini-tracker de portfolio
Maintenant que vous maîtrisez les bases, construisons quelque chose d'utile : un tracker qui surveille plusieurs cryptomonnaies simultanément.
#!/usr/bin/env python3
"""
Tracker Multi-Crypto avec WebSocket Bybit
Surveille Bitcoin, Ethereum et Solana en temps réel
"""
import json
import time
from datetime import datetime
from websocket import create_connection
Liste des cryptos à surveiller
SYMBOLS = ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
BASE_URL = "wss://stream.bybit.com/v5/public/spot"
class CryptoTracker:
def __init__(self):
self.prices = {}
self.running = True
def format_price(self, symbol, price_data):
"""Formate joliment les données de prix"""
price = float(price_data.get('lastPrice', 0))
change_24h = float(price_data.get('price24hPcnt', 0)) * 100
emoji = "📈" if change_24h >= 0 else "📉"
return f"{emoji} {symbol.replace('USDT', '/USD')} : ${price:,.2f} ({change_24h:+.2f}%)"
def on_message(self, ws, message):
"""Traitement des messages reçus"""
data = json.loads(message)
if 'topic' in data and 'data' in data:
topic = data['topic']
symbol = topic.split('.')[1] if '.' in topic else None
if symbol and symbol in SYMBOLS:
self.prices[symbol] = data['data']
# Affichage avec horodatage
timestamp = datetime.now().strftime("%H:%M:%S")
formatted = self.format_price(symbol, data['data'])
print(f"[{timestamp}] {formatted}")
def display_all(self):
"""Affiche un résumé de tous les prix"""
if self.prices:
print("\n" + "="*50)
print("📋 RÉSUMÉ DU PORTFOLIO")
print("="*50)
for symbol in SYMBOLS:
if symbol in self.prices:
print(self.format_price(symbol, self.prices[symbol]))
print("="*50 + "\n")
Création et exécution
tracker = CryptoTracker()
try:
ws = create_connection(BASE_URL)
# Abonnement à tous les symbols
subscribe_msg = {
"op": "subscribe",
"args": [f"tickers.{sym}" for sym in SYMBOLS]
}
ws.send(json.dumps(subscribe_msg))
print(f"🔍 Surveillance de {len(SYMBOLS)} cryptomonnaies...")
print("Appuyez sur Ctrl+C pour arrêter\n")
ws.on_message = tracker.on_message
ws.run_forever(ping_interval=30)
except KeyboardInterrupt:
print("\n🛑 Arrêt du tracker...")
tracker.display_all()
except Exception as e:
print(f"❌ Erreur : {e}")
Ce script affiche :
🔍 Surveillance de 3 cryptomonnaies...
Appuyez sur Ctrl+C pour arrêter
[14:32:15] 📈 BTC/USD : $64,235.50 (+2.34%)
[14:32:16] 📈 ETH/USD : $3,456.78 (+1.89%)
[14:32:17] 📈 SOL/USD : $178.90 (+3.45%)
[14:32:18] 📈 BTC/USD : $64,240.12 (+2.35%)
[14:32:19] 📈 ETH/USD : $3,458.12 (+1.92%)
==================================================
📋 RÉSUMÉ DU PORTFOLIO
==================================================
📈 BTC/USD : $64,240.12 (+2.35%)
📈 ETH/USD : $3,458.12 (+1.92%)
📈 SOL/USD : $178.90 (+3.45%)
==================================================
Types de données disponibles sur Bybit
Bybit propose plusieurs "sujets" de données. Voici les principaux :
| Sujet | Données | Exemple d'utilisation |
|---|---|---|
tickers.{symbol} | Prix, volume, variation 24h | Suivi de prix basique |
orderbook.50.{symbol} | 50 premiers niveaux du carnet d'ordres | Analyse technique, Market Making |
trade.{symbol} | Historique des transactions | Détection de wash trading |
kline.1.{symbol} | Chandeliers (1 minute) | Charting, backtesting |
Comprendre le carnet d'ordres
Le carnet d'ordres (orderbook) montre les ordres d'achat et de vente en attente. C'est crucial pour comprendre la liquidité.
#!/usr/bin/env python3
"""
Visualisation du carnet d'ordres BTC/USDT
"""
import json
from websocket import create_connection
def format_orderbook(data):
"""Affiche le carnet d'ordres de manière lisible"""
bids = data.get('b', [])[:5] # 5 meilleurs achats
asks = data.get('a', [])[:5] # 5 meilleures ventes
print("\n📊 CARNET D'ORDRES BTC/USDT")
print("-" * 60)
print(f"{'ACHATS (Bids)':<30} | {'VENTES (Asks)':<30}")
print("-" * 60)
for i in range(5):
bid = bids[i] if i < len(bids) else ["-", "-"]
ask = asks[i] if i < len(asks) else ["-", "-"]
print(f"${float(bid[0]):>12,.2f} × {float(bid[1]):>8.4f} | ${float(ask[0]):>12,.2f} × {float(ask[1]):>8.4f}")
print("-" * 60)
# Calcul du spread
if bids and asks:
best_bid = float(bids[0][0])
best_ask = float(asks[0][0])
spread = best_ask - best_bid
spread_pct = (spread / best_bid) * 100
print(f"Spread : ${spread:.2f} ({spread_pct:.4f}%)")
def on_message(ws, message):
data = json.loads(message)
if 'topic' in data and 'orderbook' in data['topic']:
format_orderbook(data['data'])
ws = create_connection("wss://stream.bybit.com/v5/public/spot")
ws.send(json.dumps({"op": "subscribe", "args": ["orderbook.50.BTCUSDT"]}))
ws.on_message = on_message
ws.run_forever()
Résultat :
📊 CARNET D'ORDRES BTC/USDT
------------------------------------------------------------
ACHATS (Bids) | VENTES (Asks)
------------------------------------------------------------
$ 64,235.50 × 2.4532 | $ 64,236.12 × 1.8921
$ 64,235.00 × 5.1234 | $ 64,237.50 × 3.2156
$ 64,234.50 × 8.5678 | $ 64,238.90 × 2.0987
$ 64,234.00 × 12.3456 | $ 64,240.00 × 5.4321
$ 64,233.50 × 9.8765 | $ 64,241.50 × 4.5678
------------------------------------------------------------
Spread : $0.62 (0.0010%)
Protocole de reconnexion automatique
Dans le monde réel, les connexions Internet tombent. Votre bot doit gérer cela proprement.
#!/usr/bin/env python3
"""
WebSocket avec reconnexion automatique
Le script se reconnecte tout seul en cas de coupure
"""
import json
import time
import logging
from websocket import create_connection, WebSocketException
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
BASE_URL = "wss://stream.bybit.com/v5/public/spot"
MAX_RECONNECT = 5
RECONNECT_DELAY = 3
class StableConnection:
def __init__(self, symbols):
self.symbols = symbols
self.ws = None
self.reconnect_count = 0
def connect(self):
"""Établit la connexion avec gestion d'erreur"""
try:
self.ws = create_connection(BASE_URL, timeout=30)
subscribe_msg = {
"op": "subscribe",
"args": [f"tickers.{sym}" for sym in self.symbols]
}
self.ws.send(json.dumps(subscribe_msg))
logger.info(f"✅ Connecté et abonné à {len(self.symbols)} symbols")
self.reconnect_count = 0
return True
except WebSocketException as e:
logger.error(f"❌ Erreur de connexion : {e}")
return False
def run(self):
"""Boucle principale avec reconnexion"""
while self.reconnect_count < MAX_RECONNECT:
if not self.connect():
self.reconnect_count += 1
wait = RECONNECT_DELAY * self.reconnect_count
logger.info(f"🔄 Reconnexion dans {wait}s (tentative {self.reconnect_count}/{MAX_RECONNECT})")
time.sleep(wait)
continue
try:
while True:
message = self.ws.recv()
data = json.loads(message)
self.process(data)
except WebSocketException as e:
logger.error(f"⚠️ Connexion perdue : {e}")
self.reconnect_count += 1
except Exception as e:
logger.error(f"❌ Erreur inattendue : {e}")
break
logger.error("🚫 Nombre maximum de reconnexions atteint")
def process(self, data):
"""Traitement des données"""
if 'topic' in data and 'data' in data:
topic = data['topic']
price = data['data'].get('lastPrice', 'N/A')
logger.info(f"📊 {topic} → ${price}")
Lancement
tracker = StableConnection(["BTCUSDT", "ETHUSDT"])
tracker.run()
Intégration avec les APIs IA pour l'analyse
Maintenant, voici la partie passionnante. Vous pouvez utiliser l'IA pour analyser vos données en temps réel. S'inscrire ici pour accéder à des modèles d'IA performants à moindre coût.
Personnellement, j'utilise HolySheep AI pour analyser les sentiments du marché et détecter des patterns. La latence inférieure à 50ms est cruciale pour mes stratégies de trading algorithmique.
#!/usr/bin/env python3
"""
Analyse IA des données Bybit via HolySheep AI
Traitement automatique des tendances de marché
"""
import json
import requests
from websocket import create_connection
Configuration HolySheep AI
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
class AIAnalyzer:
def __init__(self):
self.price_history = []
self.api_key = HOLYSHEEP_API_KEY
def analyze_trend(self):
"""Envoie les données à l'IA pour analyse"""
if len(self.price_history) < 5:
return "Données insuffisantes pour analyse"
prices = self.price_history[-10:]
prompt = f"""
Analyse cette série de prix BTC/USD et donne un résumé court:
{prices}
Réponds en français, maximum 50 mots.
"""
try:
response = requests.post(
f"{HOLYSHEEP_BASE_URL}/chat/completions",
headers={
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
},
json={
"model": "gpt-4.1",
"messages": [{"role": "user", "content": prompt}],
"max_tokens": 150
},
timeout=10
)
if response.status_code == 200:
result = response.json()
return result['choices'][0]['message']['content']
else:
return f"Erreur API: {response.status_code}"
except Exception as e:
return f"Connexion IA échouée: {e}"
def process_realtime(self, ws, message):
"""Traitement temps réel"""
data = json.loads(message)
if 'topic' in data and 'tickers' in data['topic']:
price = float(data['data']['lastPrice'])
self.price_history.append(price)
print(f"💰 Prix actuel: ${price:,.2f}")
# Analyse toutes les 20 données
if len(self.price_history) % 20 == 0:
print("\n🤖 Analyse IA en cours...")
analysis = self.analyze_trend()
print(f"💡 {analysis}\n")
Exécution
analyzer = AIAnalyzer()
ws = create_connection("wss://stream.bybit.com/v5/public/spot")
ws.send(json.dumps({"op": "subscribe", "args": ["tickers.BTCUSDT"]}))
ws.on_message = lambda ws, msg: analyzer.process_realtime(ws, msg)
ws.run_forever()
Erreurs courantes et solutions
❌ Erreur 1 : "Connection refused" ou timeout
Symptôme : Le script se bloque puis affiche une erreur de connexion.
Causes possibles :
- Firewall ou antivirus qui bloque la connexion
- Problème de réseau Internet
- URL WebSocket incorrecte
Solutions :
# Solution 1 : Vérifier l'URL (les erreurs sont fréquentes)
BASE_URL = "wss://stream.bybit.com/v5/public/spot" # ✓ Correct
BASE_URL = "wss://stream.bybit.com/v5/public/linear" # ✗ Pour perpetual, pas spot
Solution 2 : Ajouter un timeout explicite
ws = create_connection(BASE_URL, timeout=30)
Solution 3 : Vérifier la connectivité
import socket
socket.setdefaulttimeout(30)
Solution 4 : Tester manuellement
Ouvrez cette URL dans votre navigateur :
wss://stream.bybit.com/v5/public/spot
Si ça ne charge pas, le problème est réseau
❌ Erreur 2 : "JSON decode error"
Symptôme : json.loads(message) échoue avec une exception.
Causes :
- Message de ping/pong du serveur (pas du JSON)
- Données corrompues
- Format inattendu
Solutions :
def safe_json_parse(message):
"""Parse JSON en toute sécurité"""
try:
return json.loads(message)
except json.JSONDecodeError:
# C'est probablement un ping
if message == "ping":
return {"type": "ping"}
# Ou un message texte
try:
return {"raw": str(message)}
except:
return None
Utilisation dans votre code
data = safe_json_parse(message)
if data and 'topic' in data:
# Traitement normal
pass
❌ Erreur 3 : "Subscription failed"
Symptôme : Le script se connecte mais ne reçoit aucune donnée.
Causes :
- Topic mal orthographié
- Topic incompatible avec le type de marché
- Connexion fermée par le serveur pour inactivité
Solutions :
# Vérification de l'orthographe des topics
Pour marché SPOT (au comptant) :
"tickers.BTCUSDT" # ✓ Correct
"orderbook.50.BTCUSDT"
Pour marché PERPETUAL (contrats) :
"tickers.BTCUSDT" # ✓ Correct aussi
Mais l'URL change :
wss://stream.bybit.com/v5/public/linear
Solution : Vérifier le topic après connexion
def on_open(ws):
subscribe_msg = {"op": "subscribe", "args": ["tickers.BTCUSDT"]}
ws.send(json.dumps(subscribe_msg))
print("✅ Message envoyé, attendez 1-2 secondes...")
def on_message(ws, message):
data = json.loads(message)
if 'success' in data:
print(f"📨 Résumé subscription: {data}")
❌ Erreur 4 : L'application se ferme brutalement
Symptôme : Le script fonctionne puis s'arrête sans message d'erreur.
Solutions :
# Solution : Gérer les signaux système
import signal
import sys
def signal_handler(sig, frame):
print("\n🛑 Arrêt propre...")
if ws:
ws.close()
sys.exit(0)
Enregistrer les handlers
signal.signal(signal.SIGINT, signal_handler) # Ctrl+C
signal.signal(signal.SIGTERM, signal_handler) # Arrêt système
Solution 2 : Ajouter une boucle de vie
import time
while True:
try:
ws.run_forever(ping_interval=30, ping_timeout=10)
except Exception as e:
print(f"Erreur: {e}, reconnexion dans 5s...")
time.sleep(5)
Pour qui / pour qui ce n'est pas fait
| ✅ Ce tutoriel est fait pour vous si : | ❌ Ce tutoriel n'est pas pour vous si : |
|---|---|
| Vous êtes débutant absolu en programmation | Vous cherchez des signaux de trading garantis |
| Vous voulez comprendre les bases des WebSockets | Vous avez besoin d'une stratégie de trading rentable |
| Vous souhaitez créer vos propres outils d'analyse | Vous cherchez à éviter les risques de trading |
| Vous apprenez les APIs financières | Vous n'avez pas de temps à consacrer à l'apprentissage |
| Vous avez un projet personnel en tête | Vous voulez des résultats sans effort |
Tarification et ROI
La bonne nouvelle ? L'API WebSocket de Bybit est 100% gratuite pour la réception de données publiques. C'est parfait pour apprendre et développer vos prototypes.
| Composant | Coût | Alternative |
|---|---|---|
| Compte Bybit | Gratuit | - |
| WebSocket API (données publiques) | Gratuit | Binance: gratuit aussi |
| Données privées (trading) | Gratuit | Limite: 60 req/sec |
| HolySheep AI (analyse IA) | À partir de $0.42/MTok | OpenAI: $8/MTok |
| Hébergement cloud | $5-20/mois | Local: gratuit |
Économie avec HolySheep AI :
- DeepSeek V3.2 : $0.42/MTok — 95% moins cher que GPT-4.1 à $8
- Gemini 2.5 Flash : $2.50/MTok — Excellent rapport qualité/prix
- Paiement : WeChat, Alipay, cartes (¥1 = $1)
Pourquoi choisir HolySheep
Après 18 mois d'utilisation de diverses APIs IA, voici pourquoi HolySheep AI est devenu mon outil quotidien :
- Latence <50ms : Mes algorithmes de trading ont besoin de réactivité. HolySheep répond en moins de 50ms, contre 150-300ms chez d'autres providers.
- Prix imbattables : Je paie $0.42/MTok avec DeepSeek V3.2 contre $8 avec OpenAI. Pour 100 millions de tokens/mois, je sauve $755.
- Paiement local : WeChat Pay et Alipay facilitent mes transactions depuis la Chine.
- Crédits gratuits : Les nouveaux inscrits reçoivent des crédits pour tester sans engagement.
Je génère environ 500 millions de tokens par mois pour mon activité de trading algorithmique. Avec HolySheep, ma facture mensuelle est de $210 contre $4,000+ sur OpenAI. L'économie de 85%+ est réelle et significative.
Conclusion et prochaines étapes
Vous savez maintenant :
- ✅ Créer une connexion WebSocket à Bybit
- ✅ Recevoir des données de prix en temps réel
- ✅ Surveiller plusieurs cryptomonnaies
- ✅ Afficher un carnet d'ordres
- ✅ Gérer les erreurs et reconnexions
- ✅ Intégrer une analyse IA
Les possibilités sont immenses : indicateurs techniques, alertes price, trading algorithmique, bots de market making...
Mon conseil : commencez petit. Implémentez une seule fonctionnalité, testez-la thoroughly, puis ajoutez progressivement. Ne cherchez pas à tout faire immédiatement.
Pour aller plus loin
- Documentations officielles : Bybit API Docs
- Exemples de code : leur GitHub officiel
- HolySheep AI : S'inscrire ici
Si vous avez des questions, laissez un commentaire ci-dessous. Je réponds personnellement à toutes les questions dans les 24h.
📌 Point important : Ce tutoriel est à but éducatif. Le trading de cryptomonnaies comporte des risques importants de perte en capital. Ne tradez jamais avec de l'argent que vous ne pouvez pas vous permettre de perdre.