Signal Pilot
🔴 Avancé • Leçon 57 sur 82

Automatisation du trading : code ton avantage, retire l'émotion

15 min de lecture • Exécution automatisée et API
Signal Pilot
Formation professionnelle au trading
0%
Vous avancez !
Continuez votre lecture pour terminer cette leçon

3 h du matin. Ton setup de sweep se déclenche. Tu dors.

Ton bot passe le trade, place le stop, vise 3R. Pendant que tu rêves.

6 h du matin. Tu te réveilles. Position clôturée. +2,8R de gain. Le café a meilleur goût.

🎯 La promesse de l'automatisation

Pas de FOMO. Pas de peur. Pas d'hésitation. Juste du code qui exécute tes règles parfaitement, à chaque fois.

Ce n'est pas de la science-fiction. C'est ainsi que les professionnels tradent en 2024.

📉 ÉTUDE DE CAS : l'appel de marge à 19 000 $ de Mike

Configuration : Mike Sullivan (exemple composite), développeur Python, compte de 200 000 $. Bot sur l'API Alpaca (acheter SPY quand RSI<30). Backtest 2020-2023 : 67 % de réussite, +140 000 $. Déployé avec ZÉRO garde-fou.

Le désastre (un matin de choc sur l'inflation) : Le bot a tourné 8 semaines (+14 000 $, 71 % de réussite). SPY ouvre en gap de -2,8 % à 510 $. Le bot voit un RSI à 22 et continue d'acheter : 200 000 $ à 510 $, 505 $, 495 $ et 490 $ = position de 800 000 $ (levier 4, prix de revient 499,87 $). À 15 h : SPY à 488 $ — 7 % sous la clôture de la veille — la position vaut 781 000 $, soit 19 005 $ de perte, et l'appel de marge tombe. Mike était au bureau et n'a rien pu faire.

Redressement : Compte après l'accident : 195 000 $. Reconstruit avec 5 garde-fous : position maximale de 50 000 $, VIX>25 = désactivé, 3 trades par jour maximum, alerte à -5 % sous le plus haut, arrêt complet à -10 %. Résultat sur les 8 mois suivants : 195 000 $ → 218 000 $ (+12 %), et aucun garde-fou n'a jamais failli.

Leçon : Code les garde-fous D'ABORD : (1) limites de position, (2) filtres de volatilité, (3) coupure au drawdown maximal, (4) bouton d'arrêt. Les backtests mentent : ils ignorent les cygnes noirs.

Quiz : le bot de Mike a pris un appel de marge en UNE SEULE MATINÉE. Quelle en est la cause ?

A) Slippage à l'exécution et problèmes de latence
B) La connexion à l'API a lâché pendant le krach
C) ZÉRO garde-fou : le bot a moyenné à la baisse 4 fois pendant une chute de 7 % sur la journée, atteignant une position de 800 000 $ (levier 4) sur un compte de 200 000 $
D) Un bug de code a généré des ordres en double
Bonne réponse : C. Mike a codé « acheter quand le RSI est survendu » mais jamais de limite de position, de filtre de volatilité ni de bouton d'arrêt. Le bot a bâti une position à levier 4 pendant le krach : 19 005 $ de perte et un appel de marge avant qu'il n'atteigne un clavier. Redressement : 5 garde-fous ajoutés, 195 000 $ → 218 000 $ en 8 mois. Code les garde-fous D'ABORD.
⚡ Gains rapides pour demain (cliquez pour déplier)
  1. Commence en simulation — Ne mets jamais de capital réel derrière une automatisation non testée. D'abord la simulation, et d'après la Partie 2 cela veut dire des mois, pas des semaines.
  2. Ajoute des limites de position — Code en dur une taille de position maximale : 2 % de risque du compte par trade ET un plafond de notionnel, parce que 2 % de risque n'est pas 2 % d'exposition.
  3. Construis un bouton d'arrêt — Crée un arrêt manuel qui coupe toute activité du bot en un clic ou une commande.
Partie 1 : pourquoi automatiser ton trading ?

Le problème humain dans le trading

Tu as passé 6 mois à peaufiner une stratégie. Passée au backtest. Testée en avant. Taux de réussite : 62 %. R moyen : 2,3. Avantage confirmé.

Tu la trades en réel. Le résultat ?

Mois Performance de la stratégie (si elle est suivie parfaitement) Ta performance réelle Le problème
Mois 1 +4 200 $ (62 % de réussite) +1 800 $ (48 % de réussite) 3 setups sautés (peur après une série de pertes)
Mois 2 +3 900 $ (60 % de réussite) -2 100 $ (38 % de réussite) Trades de revanche, taille doublée après les pertes
Mois 3 +5 100 $ (65 % de réussite) +900 $ (52 % de réussite) Hésitations sur les cassures, 40 % des signaux manqués

La vérité brutale : Tu as une stratégie rentable. Mais c'est TOI le maillon faible.

Les trois tueurs d'exécution

1. L'hésitation (sauter des trades par peur)

  • Tu viens d'encaisser 2 pertes. Le setup n° 3 apparaît. Tu te dis : « J'attends peut-être une confirmation… »
  • Tu attends. Le prix part sans toi. C'était un gagnant à 4R. Tu l'as manqué par peur.
  • Effet : Sauter les gagnants détruit l'espérance positive

2. Le surtrading (entrées de FOMO)

  • Le marché s'envole. Ta stratégie dit « pas de setup ». Mais tu ne supportes pas de regarder. Tu entres quand même.
  • Pas de stop. Pas de plan. Juste de l'espoir. Ça retourne. Tu perds.
  • Effet : Les entrées aléatoires diluent ton avantage dans le bruit

3. Une taille de position incohérente

  • Setup A : tu risques 1 % (prudent après la dernière perte)
  • Setup B : tu risques 5 % (confiant, « je le sens »)
  • Le setup A gagne 3R. Tu fais 3 %. Le setup B perd 1R. Tu perds 5 %. Net : -2 %.
  • Effet : Une seule mauvaise décision de taille efface 3 bons trades

💡 Ce que l'automatisation règle

Un bot de trading automatisé exécute avec une discipline parfaite:

  • Aucune hésitation : Le setup apparaît → le trade s'exécute (même après 5 pertes d'affilée)
  • Aucun FOMO : Le setup n'apparaît pas → le bot attend (peu importe l'ennui du marché)
  • Taille parfaite : Chaque trade risque exactement 2 % (ou ce que tu as programmé), à chaque fois

Résultat : Ta performance en backtest devient ta performance réelle. L'avantage que tu as testé est l'avantage que tu obtiens.

Le problème d'échelle (les limites du trading manuel)

Le trading manuel plafonne ton potentiel :

Contrainte Limite manuelle Potentiel automatisé
Marchés Surveiller 1-3 symboles (limite de l'attention humaine) Surveiller plus de 50 symboles en même temps
Unités de temps Suivre 1-2 unités de temps au maximum Scanner 5m, 15m, 1h et le journalier d'un coup
Heures Trader 6-8 heures par jour (risque d'épuisement) Trader en continu (crypto) ou sur toute la séance (actions)
Setups Attraper 5-10 setups par semaine (réaliste pour un discrétionnaire) Attraper 50-200 setups par semaine (le bot ne dort jamais et ne rate rien)

Exemple : Un trader manuel suit ES (futures S&P) en 15 minutes. Il attrape environ 8 setups par semaine. Il gagne 3 200 $ par mois en moyenne, soit environ 92 $ par setup.

Le même trader, automatisé : Le bot scanne ES, NQ et RTY (futures indiciels) plus GC et CL (métaux et énergie) en 5m, 15m et 1h. Il attrape environ 24 setups par semaine. Aux mêmes 92 $ par setup, cela fait 9 600 $ par mois.

Le déclic : Tu ne trades pas mieux. Tu trades PLUS — sans t'épuiser.

Et le plafond : ES, MES, SPY et QQQ sont largement le même trade. Ajouter des symboles corrélés multiplie ton nombre de signaux sans multiplier ton avantage — et cela multiplie ton risque quand quatre d'entre eux se déclenchent ensemble. Compte les occasions décorrélées, pas les tickers.

Quand l'automatisation a du sens (et quand elle n'en a pas)

L'automatisation fonctionne le mieux pour :

  • Les stratégies à règles : Critères d'entrée et de sortie clairs (par ex. « acheter quand le prix balaie un plus bas puis le reprend »)
  • Les setups fréquents : Les stratégies qui se déclenchent plus de 10 fois par semaine (le volume justifie le temps de codage)
  • L'exécution ennuyeuse : Les stratégies où le discernement n'apporte rien (avantages mécaniques)

L'automatisation peine avec :

  • Les setups discrétionnaires : « Je ne trade ça que quand je le *sens* » (l'intuition ne se code pas)
  • Les trades dépendants du contexte : « Cette cassure marche si le volume dépasse 2 fois la moyenne ET qu'il y a un catalyseur d'actualité » (un contexte complexe est difficile à quantifier)
  • Les stratégies à faible fréquence : Les setups qui se déclenchent 1-2 fois par mois (l'effort de codage ne vaut pas le coup)

⚠️ L'automatisation ne répare pas une mauvaise stratégie

Erreur fréquente : « Ma stratégie ne marche pas en manuel. Un bot la rendra peut-être rentable ? »

Réalité : L'automatisation exécute ta stratégie EXACTEMENT comme tu l'as codée. Si ta stratégie n'a pas d'avantage, le bot perdra régulièrement — juste plus vite et plus efficacement.

Règle : N'automatise QUE des stratégies à espérance positive prouvée sur plus de 100 trades manuels. L'automatisation amplifie les avantages. Elle n'en crée pas.

Partie 2 : choisir ton API et ton courtier

Comparatif des API de courtiers

Tous les courtiers ne permettent pas le trading automatisé. Et ceux qui le permettent varient énormément en qualité, en coût et en fonctionnalités.

Les meilleures API de courtiers pour le trading automatisé

Courtier Classes d'actifs Qualité de l'API Coûts Idéal pour
Alpaca Actions, ETF, crypto ⭐⭐⭐⭐⭐ Excellente (RESTful + WebSocket, bien documentée) Actions sans commission, 0,1-0,25 % en crypto Débutants (l'API la plus simple, simulation gratuite, bibliothèque Python)
Interactive Brokers (IBKR) Actions, options, futures, forex, CFD (marchés mondiaux) ⭐⭐⭐⭐ Bonne (puissante mais complexe, courbe d'apprentissage raide) 0,005 $ par action, 0,65 $ par contrat d'options Traders avancés (veulent automatiser options et futures, accès mondial)
Binance Crypto (plus de 600 paires ; la plateforme principale est fermée aux résidents américains — Binance.US est une place distincte et bien plus petite) ⭐⭐⭐⭐⭐ Excellente (REST + WebSocket, débit élevé) 0,1 % au comptant, 0,02-0,04 % sur futures (avec la remise BNB) Traders algo crypto (marchés en continu, forte liquidité)
Schwab (ex-TD Ameritrade / thinkorswim) Actions, options, futures ⭐⭐⭐ Moyenne (l'ancienne API TD Ameritrade a été retirée en 2024 ; la Schwab Trader API l'a remplacée et mûrit encore) 0 $ sur les actions, 0,65 $ par contrat d'options Clients Schwab existants (ont déjà le compte et veulent automatiser)
TradeStation Actions, options, futures ⭐⭐⭐⭐ Bonne (codage en EasyLanguage, backtesting intégré) 0 $ sur les actions, 0,60 $ par contrat d'options Traders actifs (veulent une plateforme intégrée, sans coder à côté)

Guide de décision rapide

Choisis Alpaca si : tu apprends l'automatisation (l'API la plus simple, simulation gratuite, la meilleure doc). Choisis Interactive Brokers si : il te faut options, futures ou marchés mondiaux (toutes les classes d'actifs, 0,005 $ par action, niveau institutionnel). Choisis Binance si : tu ne fais que de la crypto (marchés en continu, plus de 600 paires, 0,1 % de frais).

💡 Astuce de pro : commence toujours en simulation

Chaque courtier cité plus haut propose la simulation (trading fictif avec des données réelles).

Calendrier recommandé :

  1. Semaines 1-2 : Se connecter à l'API, tester le passage d'ordres de base (achat, vente, stop)
  2. Semaines 3-8 : Coder ta stratégie, la déployer en simulation, la surveiller chaque jour
  3. Semaines 9-12 : Valider la performance de la stratégie (colle-t-elle au backtest ?)
  4. À partir du mois 4 : Si elle est rentable 3 mois d'affilée en simulation, passe en réel avec 10 % du capital
  5. À partir du mois 6 : Si elle reste rentable, monte à l'allocation complète

Ne saute jamais la simulation. Mike (l'étude de cas ci-dessus) l'a sautée et a pris un appel de marge en une matinée.

Partie 3 : construire ta première stratégie automatisée

De l'idée de trading au code exécutable

Tu as une stratégie manuelle. Comment la traduire en code qu'un bot peut exécuter ?

Le cadre de traduction d'une stratégie en 5 étapes

Étape 1 : définir les conditions d'entrée (règles explicites uniquement)

Le trader manuel pense : « J'achète quand le prix balaie un plus bas et rebondit. »

C'est bien trop vague pour un bot. Un bot a besoin d'une logique précise :

  • Qu'est-ce qu'un « sweep » ? → Le plus bas de la bougie actuelle passe au moins 0,3 % sous le plus bas de swing précédent
  • Que veut dire « rebondit » ? → Le prix clôture à nouveau au-dessus du plus bas de swing en 1 à 3 bougies
  • Qu'est-ce qu'un « plus bas de swing » ? → Le plus bas des 20 dernières bougies

Version codée :

swing_low = min([bar.low for bar in last_20_bars])
current_low = current_bar.low
current_close = current_bar.close

if current_low < swing_low * 0.997:  # balaye 0,3 % en dessous
    if current_close > swing_low:     # repris
        ENTRY = True  # setup de sweep confirme

Étape 2 : définir les conditions de sortie (stop et objectif)

Le trader manuel : « Je place mon stop sous le balayage et je prends mes gains à un rapport de 3 pour 1. »

Version codée :

entry_price = current_close
stop_loss = swing_low * 0.995  # juste sous le balayage
stop_distance = entry_price - stop_loss
target = entry_price + (stop_distance * 3)  # objectif 3R

Étape 3 : définir la taille de position (gestion du risque)

Le trader manuel : « Je risque environ 2 % par trade. »

Version codée :

account_equity = 100000  # compte de 100 000 $
risk_per_trade = 0.02    # 2 %
risk_amount = account_equity * risk_per_trade  # 2 000 $

stop_distance = entry_price - stop_loss
position_size = risk_amount / stop_distance  # actions a acheter

# Exemple : entree 520 $, stop 518 $, distance 2 $
# Taille de position = 2 000 $ / 2 $ = 1 000 actions
# ...soit 520 000 $ de SPY sur un compte de 100 000 $. Une regle de
# 2 % ne dit rien du notionnel : un stop serre achete du levier.
max_notional = account_equity * 1.5   # plafond dur : 1,5 fois les fonds propres
position_size = min(position_size, max_notional / entry_price)
# Plafonne : 288 actions. Le vrai risque tombe a 576 $ et non 2 000 $ -
# c'est le prix a payer, et c'est lui qui te garde dans le jeu.

Étape 4 : définir la gestion du trade (facultatif)

Tu sors par paliers ? Tu suis avec un stop ? Tu prends des gains partiels ?

Exemple : « Je prends 50 % à 2R et je laisse courir le reste jusqu'à 3R. »

if current_price >= entry_price + (stop_distance * 2):
    SELL_HALF = True  # solder 50 % a 2R
    # Remonter le stop au point mort pour les 50 % restants

Étape 5 : définir les filtres (empêcher les mauvais setups)

Quelles conditions invalident le setup ?

  • Filtre horaire : Ne trader que pendant les 2 premières heures de séance (9h30-11h30 ET)
  • Filtre de volatilité : Sauter les trades quand le VIX dépasse 30 (trop haché)
  • Filtre de tendance : Setups longs uniquement quand le prix est au-dessus de l'EMA 50 périodes
if VIX > 30:
    SKIP_TRADE = True  # marche trop volatil

if current_time < "09:30" or current_time > "11:30":
    SKIP_TRADE = True  # hors de la fenetre de trading

✅ Exemple complet de stratégie (logique du bot de sweep)

Les 5 étapes combinées en pseudocode exécutable :

# Etape 1 : conditions d'entree
swing_low = min([bar.low for bar in last_20_bars])
if current_bar.low < swing_low * 0.997:  # balayage
    if current_bar.close > swing_low:     # repris

        # Etape 2 : sorties
        entry = current_bar.close
        stop = swing_low * 0.995
        target = entry + ((entry - stop) * 3)

        # Etape 3 : taille de position
        risk_amount = account_equity * 0.02
        size = risk_amount / (entry - stop)

        # Etape 4 : gestion du trade (50 % a 2R)
        profit_target_partial = entry + ((entry - stop) * 2)

        # Etape 5 : filtres
        if VIX < 30 and time_in_window():
            PLACE_ORDER(symbol, size, entry, stop, target)

C'est désormais exécutable. Un bot peut suivre ces règles parfaitement, à chaque fois.

Implémentation complète du bot (stratégie de sweep et retournement)

import alpaca_trade_api as tradeapi
from alpaca_trade_api.rest import TimeFrame
import os, time

# Configuration
API_KEY = os.getenv('ALPACA_API_KEY')  # NE JAMAIS ecrire en dur !
API_SECRET = os.getenv('ALPACA_API_SECRET')
api = tradeapi.REST(API_KEY, API_SECRET, 'https://paper-api.alpaca.markets')

MAX_NOTIONAL_MULT = 1.5   # ne jamais detenir plus de 1,5 fois les fonds propres
MAX_DAILY_LOSS = 0.03     # bouton d'arret : on stoppe la journee a -3 %

def get_swing_low(bars, lookback=20):
    # Exclure la bougie en cours. Si on la garde, le plus bas de swing EST le
    # plus bas actuel, le test de balayage n'est jamais vrai, le bot ne part pas.
    lows = [bar.l for bar in bars[-(lookback + 1):-1]]
    return min(lows)

def check_sweep(current_price, current_low, swing_low):
    # Balayage = plus bas actuel < plus bas de swing (0,3 %), puis reprise
    if current_low < swing_low * 0.997 and current_price > swing_low:
        return True
    return False

def calculate_position_size(api, entry, stop):
    equity = float(api.get_account().equity)
    risk_amount = equity * 0.02                        # 2 % de risque
    by_risk = risk_amount / (entry - stop)
    by_notional = (equity * MAX_NOTIONAL_MULT) / entry  # le garde-fou oublie par Mike
    return int(min(by_risk, by_notional))

def kill_switch_tripped(api):
    acct = api.get_account()
    move = (float(acct.equity) - float(acct.last_equity)) / float(acct.last_equity)
    return move <= -MAX_DAILY_LOSS

def in_position(api, symbol):
    # Demande au courtier ; ne te fie pas a une variable locale. Un bracket
    # execute et cloture la nuit ne doit pas bloquer le setup de demain.
    try:
        api.get_position(symbol)
        return True
    except Exception:
        return False

def place_bracket_order(api, symbol, size, entry, stop, target):
    try:
        order = api.submit_order(
            symbol=symbol, qty=size, side='buy', type='limit',
            limit_price=entry, time_in_force='gtc',
            order_class='bracket',
            stop_loss={'stop_price': stop},
            take_profit={'limit_price': target}
        )
        print(f"✓ Ordre : {size} actions @ ${entry} | Stop : ${stop} | Objectif : ${target}")
        return order
    except Exception as e:
        print(f"✗ Ordre echoue : {e}")
        return None

def run_bot(symbol='SPY'):
    print(f"Bot demarre. Surveillance de {symbol} pour des setups de sweep...")

    while True:
        try:
            if not api.get_clock().is_open:      # garde-fou 1 : heures de marche
                time.sleep(60)
                continue
            if kill_switch_tripped(api):         # garde-fou 2 : perte quotidienne
                print("🛑 Limite de perte quotidienne atteinte. J'arrete.")
                break

            bars = api.get_bars(symbol, TimeFrame.Minute, limit=50)
            current_price = bars[-1].c
            current_low = bars[-1].l
            swing_low = get_swing_low(bars)

            if not in_position(api, symbol) and check_sweep(current_price, current_low, swing_low):
                print(f"🎯 Sweep detecte @ ${current_price}")
                entry = current_price
                stop = swing_low * 0.995
                target = entry + (entry - stop) * 3  # 3R
                size = calculate_position_size(api, entry, stop)   # garde-fou 3 : notionnel
                if size > 0:
                    place_bracket_order(api, symbol, size, entry, stop, target)

            time.sleep(60)  # verifier chaque minute
        except Exception as e:
            print(f"Erreur : {e}")
            time.sleep(60)

run_bot()  # ~75 lignes - et les trois qui comptent le plus sont les garde-fous.

Ce que ça fait : Se connecte à Alpaca, récupère les bougies 1 minute de SPY, détecte les retournements après balayage (le plus bas passe sous le plus bas de swing puis le reprend), calcule la taille sur 2 % de risque plafonnée par le notionnel, passe un ordre bracket (entrée + stop + objectif 3R) et recommence toutes les 60 secondes — mais seulement quand le marché est ouvert, seulement si le courtier dit qu'aucune position n'est ouverte, et jamais si la journée est à -3 %. Discipline parfaite, zéro émotion, et trois freins.

💡 le déclic

Tu viens de retirer la couche humaine. Fini le « est-ce que je le prends ? ». Fini le « j'attends encore un peu ».

Le setup apparaît → le bot trade. Il n'apparaît pas → le bot attend. Discipline parfaite.

Partie 4 : mise en production (la partie difficile)

Simulation ≠ réel

Ton bot tourne parfaitement en simulation. Tu le passes en réel. Il plante. Des ordres sont rejetés. Tu ne comprends plus.

Bienvenue en production.

Erreurs courantes (et comment les gérer)

Erreurs courantes : Délai de connexion dépassé, ordre rejeté, exécutions partielles, limites de requêtes, marché fermé. Correctifs : Logique de réessai (3× avec attente exponentielle), vérifications préalables (fonds, horaires, prix), gestion des exécutions partielles, limitation des requêtes (200 par minute), vérification des horaires (9h30-16h ET). Les bots professionnels gèrent les erreurs proprement.

Logique de réessai (indispensable)

import uuid

def place_order_with_retry(api, **order_params):
    """Reessayer l'envoi de l'ordre jusqu'a 3 fois"""
    max_retries = 3

    # Le meme identifiant a chaque tentative. Si la premiere requete est bien
    # arrivee chez le courtier et que seule la reponse s'est perdue, le
    # reessai est rejete comme doublon au lieu de doubler ta position.
    order_params.setdefault('client_order_id', f"bot-{uuid.uuid4()}")

    for attempt in range(max_retries):
        try:
            order = api.submit_order(**order_params)
            return order  # Succes !

        except Exception as e:
            if attempt < max_retries - 1:
                wait = 2 ** attempt  # 1s puis 2s (attente exponentielle)
                print(f"Ordre echoue : {e}. Nouvel essai dans {wait}s...")
                time.sleep(wait)
            else:
                # Derniere tentative echouee
                print(f"Ordre echoue apres {max_retries} tentatives : {e}")
                # Envoyer une alerte (e-mail, SMS)
                raise  # Relancer l'exception

Surveillance et alertes (critique)

Ton bot tourne sur un VPS dans le cloud. Tu es au restaurant. Il rencontre une erreur.

Vous êtes maintenant à mi-parcours. Vous avez appris les stratégies clés.

Beau parcours ! Faites une courte pause pour vous étirer si nécessaire, puis nous entrerons dans les concepts avancés qui suivent.

Comment le sais-tu ?

Réponse : Par des alertes.

import smtplib
from email.mime.text import MIMEText

def send_alert(subject, message):
    """Envoyer une alerte par e-mail"""
    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = 'bot@yourbot.com'
    msg['To'] = 'you@gmail.com'

    # Envoi via le SMTP Gmail - il faut un mot de passe d'application
    # Gmail, pas celui du compte ; l'auth basique a ete coupee en 2022.
    with smtplib.SMTP('smtp.gmail.com', 587) as server:
        server.starttls()
        server.login('bot@yourbot.com', os.getenv('EMAIL_PASSWORD'))
        server.send_message(msg)

# Utilisation
try:
    # Logique de trading
    pass
except Exception as e:
    send_alert(
        subject="🚨 Erreur du bot de trading",
        message=f"Le bot a rencontre une erreur : {e}"
    )
    raise

Tu sais maintenant en quelques minutes si quelque chose casse.

🚨 Bouton d'arrêt (non négociable)

Ton bot doit arrêter de trader automatiquement si :

  • Le drawdown quotidien dépasse -3 % (la reconstruction de Mike coupait aussi définitivement à -10 % sous le plus haut)
  • 5 pertes consécutives s'enchaînent
  • Les erreurs d'API dépassent 10 par heure
  • Un comportement inattendu est détecté

Code ça. Teste-le. Ton compte en dépend.

Hébergement : où faire tourner ton bot

Pourquoi le PC de la maison échoue

  • Coupure de courant : Le PC s'éteint, le bot s'arrête
  • Coupure d'internet : Pas de connexion = trades manqués
  • Mises à jour Windows : Redémarrage automatique à 3 h = bot mort
  • Toi : « Je redémarre juste vite fait mon PC… »

Disponibilité : 95 % (inacceptable pour du trading algo)

Pourquoi le VPS cloud gagne

  • 99,9 % de disponibilité : AWS, DigitalOcean, Linode
  • Pas de coupure de courant : Alimentation redondante, sauvegardes
  • Internet rapide : Faible latence vers les API des courtiers
  • Redémarrage automatique : Le bot plante ? Il redémarre en 30 secondes

Coût : 5-20 $ par mois (l'amplificateur d'avantage le moins cher que tu achèteras jamais)

Partie 5 : le retour au réel

L'automatisation n'est pas du « je pose et j'oublie »

Tu déploies ton bot. Il trade un mois. Taux de succès : 65 %. Comme au backtest. Tu es ravi.

Mois 2 : le taux de succès tombe à 48 %. Tu ne comprends pas.

Que s'est-il passé ?

Le régime de marché a changé. Ta stratégie marche en marché en tendance. Le marché est passé en range. Ton bot a continué à trader. Les résultats en ont souffert.

🚨 La vérité qui dérange

L'automatisation amplifie ton avantage. Mais elle ne s'adapte pas toute seule aux changements de régime.

Tu dois toujours surveiller, revoir et ajuster. Juste moins souvent.

Check-list mensuelle d'entretien du bot

1. Indicateurs de performance : Taux de réussite à moins de 5 % du backtest ? R moyen positif ? Drawdown acceptable ? Slippage dégradé ? 2. Journaux d'erreurs : Erreurs de connexion, ordres rejetés, cas limites. 3. Vérification du régime : Le marché favorise-t-il encore la stratégie ? VIX élevé → mettre en pause. Faible volatilité → les cassures galèrent.

🎓 À retenir

  • L'automatisation retire l'émotion — mais ne répare pas une mauvaise stratégie
  • Commence avec Alpaca (actions) ou Binance (crypto) pour un accès facile à l'API
  • Trade 3 à 6 mois en simulation avant de passer en réel
  • La gestion d'erreurs est critique : réessais, alertes, bouton d'arrêt
  • Héberge sur un VPS cloud (5-20 $ par mois) pour 99,9 % de disponibilité
  • Contrôle chaque mois : performance, erreurs, alignement au régime

📝 Exercice pratique

Construis ton premier script de trading avec une API

  1. Ouvre un compte de simulation Alpaca
    • Inscris-toi sur alpaca.markets (simulation gratuite)
    • Génère ta clé d'API et ton secret
    • Installe la bibliothèque Python : pip install alpaca-trade-api
  2. Code un script de stratégie simple
    • Connecte-toi à l'API Alpaca
    • Récupère le prix de SPY toutes les 60 secondes
    • Mets en place une logique de base : si le prix passe au-dessus de la SMA 20 périodes, passe un ordre d'achat
    • Ajoute le calcul de la taille de position (2 % de risque par trade)
    • Inclus un stop à -1R
  3. Ajoute la gestion des erreurs
    • Encapsule les appels d'API dans des blocs try/except
    • Journalise toutes les erreurs dans un fichier
    • Mets en place la logique de réessai (3 tentatives)
  4. Teste 1 semaine en simulation
    • Surveille l'exécution : les ordres s'exécutent-ils correctement ?
    • Vérifie les journaux : y a-t-il des erreurs de connexion ?
    • Revois la performance : colle-t-elle à ton backtest ?

Objectif : Construis et déploie ton premier script de trading automatisé en simulation. Maîtrise les bases avant de risquer du capital réel.

🎮 Teste ta compréhension (sans pression)

Question 1 : tu as codé un bot qui tourne parfaitement en simulation. Quelle est la durée de test minimale avant de passer en réel ?

A) 1 semaine (si ça marche, on déploie !)
B) 1 mois (assez pour voir si c'est rentable)
C) 3 à 6 mois (vérifier la constance selon les conditions de marché)
D) Aucun test nécessaire (le backtest suffit)

Question 2 : le taux de succès de ton bot était de 65 % au backtest, mais il est à 48 % en réel après 2 mois. Quelle est la cause la plus probable ?

A) Le courtier sabote tes trades
B) Ton code a un bug (comportement aléatoire)
C) Le régime de marché a changé (la stratégie ne colle pas aux conditions actuelles)
D) Le backtesting est inutile (il échoue toujours en réel)

Si tu es arrivé jusqu'ici, tu comprends que l'automatisation n'a rien de magique : c'est de l'exécution disciplinée à grande échelle. Code ton avantage. Teste rigoureusement. Déploie prudemment. Surveille en continu.

Leçons associées

Avancé n° 55

Machine learning appliqué au trading

Utilise des modèles de ML pour générer des signaux de trading automatisés.

Lire la leçon →
Intermédiaire #32

Backtesting avancé

Teste tes stratégies automatisées avant de les déployer en réel.

Lire la leçon →
Avancé #59

Attribution de performance

Analyse quelles stratégies automatisées contribuent aux rendements.

Lire la leçon →

⏭️ La suite

Leçon #58 : théorie du portefeuille avancée — Théorie moderne du portefeuille, frontière efficiente, parité des risques et cadres professionnels de construction de portefeuille.

💬 Discussion (0 commentaire)

0/1000

Chargement des commentaires…

← Leçon précédente Leçon suivante →
À but éducatif uniquement. Le trading comporte un risque de perte substantiel. Ceci n'est pas un conseil financier. Les performances passées ne garantissent pas les résultats futurs.