Aller au contenu

06 · Filtres de contexte et gestion du risque

Le chapitre qui produit le plus d'amélioration par ligne de code écrite. Les filtres coûtent peu et éliminent des classes entières de pertes ; la gestion du risque détermine si vous êtes encore là dans six mois.

Pourquoi les filtres priment sur le motif

Un motif d'order flow a un pouvoir prédictif faible et instable. Un filtre de contexte, lui, agit sur la composition de l'échantillon : il retire les situations où le motif n'a structurellement aucune raison de fonctionner.

L'ordre de priorité mesuré empiriquement

Dans la plupart des systèmes intrajournaliers, le classement des sources d'amélioration est :

  1. filtre horaire ;
  2. filtre de régime (tendance/range) ;
  3. filtre de volatilité ;
  4. gestion de la sortie ;
  5. optimisation des paramètres du motif.

Le point 5 est celui sur lequel 90 % du temps est dépensé, et c'est le dernier de la liste. C'est aussi le seul qui produise du surajustement.

Les filtres essentiels

Filtre horaire

Créneau (heure de Paris) Caractère Recommandation
00 h 00 – 08 h 00 Session asiatique, volume faible Éviter
08 h 00 – 14 h 30 Session européenne Volume modéré, motifs moins fiables
14 h 30 – 15 h 30 Pré-ouverture US, publications macro Éviter ou traiter à part
15 h 30 – 18 h 00 Ouverture cash US Créneau principal
18 h 00 – 20 h 00 Milieu de séance Volume en baisse, motifs dégradés
20 h 00 – 22 h 00 Clôture US Volume élevé, comportement spécifique

Le milieu de séance produit des faux signaux

Entre 18 h et 20 h, le volume chute fortement. Les seuils absolus calibrés sur l'ouverture ne se déclenchent plus ; les seuils relatifs se déclenchent sur du bruit. Dans les deux cas, le résultat est mauvais — c'est le créneau qui détruit le plus de comptes prop.

Filtre de volatilité

Deux bornes, pas une :

\[ \sigma_{\min} \le \sigma_{\text{réalisée}}(N) \le \sigma_{\max} \]
  • Borne basse : sans mouvement, les cibles ne sont pas atteintes et seules les commissions s'accumulent.
  • Borne haute : en volatilité extrême, le slippage explose et les stops sont franchis par-dessus.

Exprimez les bornes en quantiles de la distribution des 20 dernières séances, jamais en points d'indice.

Filtre de régime

Le ratio d'efficience (Kaufman) sur \(N\) barres :

\[ \text{ER}(N) = \frac{\lvert P_n - P_{n-N}\rvert}{\sum_{i=n-N+1}^{n} \lvert P_i - P_{i-1}\rvert} \]

Valeur dans \([0, 1]\) : proche de 1 pour une tendance rectiligne, proche de 0 pour un aller-retour.

Stratégie ER requis
Absorption (retournement) ≤ 0,40
Imbalances empilées (continuation) ≥ 0,55
Sweep et reprise ≤ 0,45

Filtre d'événement

Une liste d'horaires à exclure, chargée automatiquement :

  • publications macro majeures (NFP, CPI, décisions FOMC) : exclure de −5 min à +15 min ;
  • rollover des contrats trimestriels ;
  • veilles de jours fériés américains ;
  • premières et dernières minutes de séance.

L'exclusion doit être en dur dans le code

Un bot qui « sait » qu'il ne faut pas trader le FOMC mais dont le code ne le vérifie pas tradera le FOMC. C'est une liste de dates, dix lignes de Python, et cela évite la perte la plus violente de l'année.

Le dimensionnement

La règle de base

Risque fixe par trade, en pourcentage du drawdown disponible :

\[ n_{\text{contrats}} = \left\lfloor \frac{r \cdot D_{\text{disponible}}}{SL_{\text{ticks}} \cdot V_t} \right\rfloor \]
Symbole Signification Valeur type
\(r\) fraction risquée par trade 0,005 à 0,015
\(D_{\text{disponible}}\) distance au drawdown suiveur, en $ variable
\(SL_{\text{ticks}}\) stop en ticks 4 à 8
\(V_t\) valeur du tick 1,25 $ (MES)

En prop, le dénominateur du risque est le drawdown, pas le capital

Sur un compte 50 K avec drawdown suiveur de 2 500 $, votre capital de risque réel est de 2 500 $, pas de 50 000 $. Risquer 1 % « du compte » revient à risquer 20 % de votre marge de survie.

Et le drawdown suit vos gains : après 1 000 $ de profit, le seuil monte de 1 000 $. Votre marge ne s'élargit pas avec le succès — c'est la différence structurelle entre un compte prop et un compte propre, et elle change tout le dimensionnement.

La réduction progressive

Un mécanisme simple et efficace : réduire la taille quand la marge se réduit.

def taille(dd_disponible, dd_initial, base):
    """Réduit la taille quand on approche du drawdown. Linéaire, sans finesse
    inutile : la simplicité est ici une qualité."""
    ratio = dd_disponible / dd_initial
    if ratio > 0.75:
        return base
    if ratio > 0.50:
        return max(1, base // 2)
    if ratio > 0.30:
        return 1
    return 0  # arrêt complet

L'arrêt à 30 % est une décision, pas un aveu d'échec

Un compte à 30 % de marge restante est un compte dont la probabilité de survie est faible et dont la probabilité de rebond exige une série de gains improbable. S'arrêter préserve la possibilité de recommencer avec une stratégie révisée, plutôt que de finir grillé.

Les plafonds journaliers

Plafond Valeur Raison
Perte maximale 30 % du drawdown restant Survie
Profit maximal selon la règle de consistance Éligibilité au versement
Nombre de trades 15 à 20 Anti-emballement
Pertes consécutives 3 Détection de changement de régime

Le plafond de profit se calcule avec la formule du chapitre Règles des prop firms :

\[ \text{plafond du jour} = \frac{c}{1-c} \cdot P_{\text{cumulé}} \]

Le plafond de trades protège contre un bug

Une boucle mal gardée, un signal qui se redéclenche à chaque tick, une reconnexion qui rejoue des événements : les mécanismes qui produisent 400 trades en dix minutes sont nombreux et bêtes. Le compteur journalier est la dernière ligne de défense, et il est trivial à écrire. Il ne coûte rien tant qu'il ne sert pas, et il sauve un compte la fois où il sert.

Le seuil d'arrêt de la stratégie

Il faut décider à l'avance à quel moment la stratégie est déclarée morte. Critères objectifs :

Critère Seuil
Drawdown cumulé > 2 × le drawdown maximal observé en backtest
Taux de réussite sur 50 trades < taux d'équilibre − 5 points
Espérance sur 100 trades négative
Fréquence des signaux divisée par 2 par rapport au backtest

Le dernier critère est le plus intéressant et le moins surveillé : un effondrement de la fréquence des signaux signale que le régime a changé ou que votre flux de données s'est dégradé. Il précède souvent la dégradation de performance.

Le seuil se fixe avant, jamais pendant

Un seuil décidé pendant un drawdown sera toujours révisé à la baisse. Écrivez les quatre seuils dans un fichier de configuration avant la mise en production, et faites que le bot s'arrête tout seul quand il les atteint.

Résumé

  • Les filtres améliorent davantage que l'optimisation des paramètres, pour bien moins de risque de surajustement.
  • Filtre horaire d'abord, puis régime, puis volatilité.
  • Exclusions d'événements en dur dans le code.
  • En prop, le capital de risque est le drawdown disponible, pas le solde.
  • Réduction progressive de taille, arrêt à 30 % de marge restante.
  • Plafonds journaliers de perte, de profit, de nombre de trades et de pertes consécutives.
  • Les seuils d'arrêt de la stratégie se fixent avant la mise en production.

Chapitre précédent : OFI et microprice · Partie suivante : Développement