BTC·
ETH·
SOL·
BNB·
XRP·
ADA·
DOGE·
AVAX·
LINK·
MATIC·
DOT·
ATOM·
BTC·
ETH·
SOL·
BNB·
XRP·
ADA·
DOGE·
AVAX·
LINK·
MATIC·
DOT·
ATOM·
Retour au blog
IALangChainPythonAutomatisationTrading

Créer un Agent IA de Trading avec LangChain, Python et GPT-4

iL
Ismaël Ladjohounlou
25 novembre 202519 min de lecture

Construisez un agent IA qui analyse les marchés, lit les actualités financières, génère des signaux et envoie des alertes Telegram — étape par étape avec du code Python réel.

Pourquoi les agents IA changent le trading

Un trader humain peut analyser 5-10 actifs par jour. Un agent IA peut en analyser 500 en quelques secondes, 24h/24, sans fatigue, sans biais émotionnel.

Ce guide construit un agent IA complet qui :

  1. Lit les actualités financières en temps réel
  2. Analyse les données de prix via l'API Binance
  3. Génère des signaux de trading avec GPT-4
  4. Envoie des alertes Telegram avec reasoning détaillé
  5. Tient un journal automatique de ses décisions

Prérequis

****bash pip install langchain langchain-openai python-telegram-bot ccxt pandas requests ****

Variables d'environnement nécessaires :
****bash OPENAI_API_KEY=sk-... TELEGRAM_TOKEN=... TELEGRAM_CHAT_ID=... ****


Architecture de l'agent

**** Agent Principal (LangChain ReAct) ├── Tool: get_price_data() → Binance API ├── Tool: get_financial_news() → NewsAPI ├── Tool: calculate_indicators()→ Pandas/TA-Lib ├── Tool: send_telegram_alert() → Telegram Bot └── Tool: log_decision() → SQLite/Supabase ****


Étape 1 : Définir les outils (tools)

****`python

tools.py

import ccxt
import pandas as pd
from langchain.tools import tool
from datetime import datetime
import requests
import json

─── Outil 1: Données de prix ─────────────────────────────────────────────────

@tool
def get_price_data(symbol: str, timeframe: str = "1h", limit: int = 100) -> str:
"""
Récupère les données OHLCV d'un actif depuis Binance.
symbol: ex 'BTC/USDT', 'ETH/USDT', 'SOL/USDT'
timeframe: '1m', '5m', '15m', '1h', '4h', '1d'
"""
try:
exchange = ccxt.binance()
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')

    # Calculer indicateurs de base
    df['ema_20'] = df['close'].ewm(span=20).mean()
    df['ema_50'] = df['close'].ewm(span=50).mean()

    # RSI
    delta = df['close'].diff()
    gain = delta.clip(lower=0).rolling(14).mean()
    loss = (-delta.clip(upper=0)).rolling(14).mean()
    df['rsi'] = 100 - (100 / (1 + gain/loss))

    last = df.iloc[-1]
    prev = df.iloc[-2]

    return json.dumps({
        "symbol": symbol,
        "current_price": round(last['close'], 4),
        "24h_change_pct": round((last['close'] - df.iloc[-24]['close']) / df.iloc[-24]['close'] * 100, 2),
        "ema_20": round(last['ema_20'], 4),
        "ema_50": round(last['ema_50'], 4),
        "rsi": round(last['rsi'], 1),
        "trend": "BULLISH" if last['ema_20'] > last['ema_50'] else "BEARISH",
        "ema_cross": "GOLDEN CROSS" if (prev['ema_20'] < prev['ema_50'] and last['ema_20'] > last['ema_50']) else
                     "DEATH CROSS" if (prev['ema_20'] > prev['ema_50'] and last['ema_20'] < last['ema_50']) else "NONE",
        "volume_vs_avg": round(last['volume'] / df['volume'].rolling(20).mean().iloc[-1], 2),
    })
except Exception as e:
    return f"Erreur: {str(e)}"

─── Outil 2: Actualités financières ─────────────────────────────────────────

@tool
def get_financial_news(query: str, max_results: int = 5) -> str:
"""
Récupère les dernières actualités financières pour un actif ou sujet donné.
query: ex 'Bitcoin', 'Federal Reserve', 'Gold XAUUSD'
"""
api_key = os.getenv("NEWS_API_KEY", "")
if not api_key:
return "NewsAPI non configuré — analyse basée uniquement sur les prix."

url = f"https://newsapi.org/v2/everything?q={query}&sortBy=publishedAt&pageSize={max_results}&apiKey={api_key}"
try:
    res = requests.get(url, timeout=5)
    articles = res.json().get('articles', [])
    news_list = []
    for a in articles:
        news_list.append({
            "titre": a.get('title', ''),
            "source": a.get('source', {}).get('name', ''),
            "date": a.get('publishedAt', '')[:10],
            "resume": a.get('description', '')[:200] if a.get('description') else '',
        })
    return json.dumps(news_list, ensure_ascii=False)
except:
    return "Impossible de récupérer les actualités."

─── Outil 3: Envoi Telegram ──────────────────────────────────────────────────

@tool
def send_telegram_alert(message: str) -> str:
"""
Envoie une alerte de trading sur Telegram.
message: le message formaté à envoyer
"""
import asyncio
from telegram import Bot

token   = os.getenv("TELEGRAM_TOKEN")
chat_id = os.getenv("TELEGRAM_CHAT_ID")

if not token or not chat_id:
    return "Telegram non configuré."

async def send():
    bot = Bot(token=token)
    await bot.send_message(chat_id=chat_id, text=message, parse_mode='HTML')

asyncio.run(send())
return "Alerte envoyée avec succès."

****`


Étape 2 : Créer l'agent LangChain

****`python

agent.py

from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub
from tools import get_price_data, get_financial_news, send_telegram_alert
import os

def create_trading_agent():
# Modèle GPT-4
llm = ChatOpenAI(
model="gpt-4o",
temperature=0.1, # Basse température pour des analyses cohérentes
api_key=os.getenv("OPENAI_API_KEY")
)

tools = [get_price_data, get_financial_news, send_telegram_alert]

# Prompt système personnalisé
system_prompt = """Tu es un analyste de trading algorithmique expert.

Ton rôle :

  1. Analyser les données de prix et indicateurs techniques
  2. Prendre en compte les actualités récentes
  3. Donner une opinion sur la direction probable du marché
  4. Suggérer une action (BUY, SELL ou HOLD) avec reasoning détaillé
  5. Spécifier des niveaux de SL et TP si applicable

Règles importantes :

  • Toujours analyser minimum 2 timeframes
  • Mentionner explicitement les risques
  • Ne jamais recommander de prendre plus de 1% de risque par trade
  • Format de sortie : emoji + action + prix + SL + TP + reasoning

Tu as accès aux outils : get_price_data, get_financial_news, send_telegram_alert
"""

prompt = hub.pull("hwchase17/react")
prompt = prompt.partial(system_message=system_prompt)

agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,
    max_iterations=10,
    handle_parsing_errors=True
)
return executor

─── Analyse principale ────────────────────────────────────────────────────────

def analyze_market(symbols: list[str]):
agent = create_trading_agent()

for symbol in symbols:
    print(f"\n📊 Analyse de {symbol}...")

    result = agent.invoke({
        "input": f"""

Analyse le marché pour {symbol} :

  1. Récupère les données de prix en timeframe 4H (limit=50)
  2. Récupère également les données en 1H (limit=24)
  3. Vérifie les actualités récentes sur {symbol.replace('/USDT', '')}
  4. Sur la base de cette analyse, génère une recommendation de trading
  5. Si l'opportunité est intéressante (signal fort), envoie une alerte Telegram avec ce format :

📊 Analyse {symbol}
⏰ {datetime.now().strftime("%d/%m/%Y %H:%M")}

📈 Tendance 4H : [BULLISH/BEARISH]
📉 RSI : [valeur]
🔄 Signal : [GOLDEN CROSS / DEATH CROSS / AUCUN]

🎯 RECOMMENDATION : [BUY/SELL/HOLD]
💰 Prix entrée : [prix]
🛑 Stop Loss : [prix] ([X]%)
✅ Take Profit : [prix] ([X]%)
📊 Risk/Reward : [ratio]

🧠 Reasoning :
[2-3 phrases expliquant pourquoi]

⚠️ Capital max recommandé : 0.5% du compte
"""
})
print(f"✅ Analyse terminée: {result['output'][:200]}...")

if name == "main":
symbols = ["BTC/USDT", "ETH/USDT", "SOL/USDT"]
analyze_market(symbols)
****`


Étape 3 : Automatiser avec un scheduler

****`python

scheduler.py

import schedule
import time
from agent import analyze_market

Analyse toutes les 4 heures

schedule.every(4).hours.do(lambda: analyze_market(["BTC/USDT", "ETH/USDT", "SOL/USDT"]))

Analyse quotidienne approfondie à 8h00

schedule.every().day.at("08:00").do(
lambda: analyze_market(["BTC/USDT", "ETH/USDT", "SOL/USDT", "XRP/USDT", "LINK/USDT"])
)

print("🤖 Agent de trading actif...")
while True:
schedule.run_pending()
time.sleep(60)
****`


Déployer sur VPS (Linux)

****`bash

1. Installer Python et les dépendances

sudo apt update && sudo apt install python3 python3-pip -y
pip3 install langchain langchain-openai ccxt pandas requests schedule python-telegram-bot

2. Créer le fichier .env

cat > .env << EOF
OPENAI_API_KEY=sk-...
TELEGRAM_TOKEN=...
TELEGRAM_CHAT_ID=...
EOF

3. Lancer en background avec screen

screen -S trading-agent
python3 scheduler.py

Ctrl+A+D pour detacher

4. Vérifier les logs

screen -r trading-agent
****`


Exemple de message Telegram généré

****`
📊 Analyse BTC/USDT
⏰ 15/11/2025 08:00

📈 Tendance 4H : BULLISH
📉 RSI : 58.3 (neutre, pas en surachat)
🔄 Signal : GOLDEN CROSS (détecté il y a 2 bougies)

🎯 RECOMMENDATION : BUY
💰 Prix entrée : $94,250
🛑 Stop Loss : $92,500 (-1.86%)
✅ Take Profit : $97,750 (+3.71%)
📊 Risk/Reward : 1:2.0

🧠 Reasoning :
Golden Cross confirmé sur 4H avec volume +1.8x la moyenne.
Les news récentes mentionnent un afflux institutionnel.
RSI en zone neutre — espace pour monter sans surextension.

⚠️ Capital max recommandé : 0.5% du compte
****`


Amélioration : ajouter la mémoire

****`python
from langchain.memory import ConversationBufferWindowMemory

memory = ConversationBufferWindowMemory(
memory_key="chat_history",
k=10, # Garde les 10 dernières interactions
return_messages=True
)

executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory, # L'agent se souvient des analyses précédentes
verbose=True
)
****`

Avec la mémoire, l'agent peut dire "BTC était bullish il y a 4 heures, maintenant les indicateurs divergent — signal d'inversion possible."


Tu veux ce système déployé pour toi ?

Je construis des agents IA de trading personnalisés : actifs analysés, intervalles, critères d'alerte, niveau de risque — tout selon ton workflow.

Prendre contact →