FreqAI : Intelligence Artificielle pour vos stratégies Freqtrade

FreqAI : Intelligence Artificielle pour vos stratégies Freqtrade

Introduction

FreqAI est un module intégré à Freqtrade qui vous permet d’enrichir vos stratégies de trading automatique avec des modèles de machine learning. Plutôt que de coder manuellement vos signaux, vous définissez vos features (variables techniques) et vos targets (labels), puis FreqAI s’occupe de l’entraînement, de la prédiction et de la gestion des outliers en temps réel. Vous pouvez choisir parmi plusieurs algorithmes (CatBoost, LightGBM, XGBoost) ou créer le vôtre via l’interface IFreqaiModel :contentReference[oaicite:0]{index=0}.

1. Intégrer FreqAI à votre stratégie

Dans votre classe héritant de IStrategy, il suffit de :


startup_candle_count: int = 20

def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    # Démarre FreqAI : crée les features & targets, entraîne/prédit
    dataframe = self.freqai.start(dataframe, metadata, self)
    return dataframe
  

Le paramètre startup_candle_count doit couvrir le plus grand pas de temps utilisé dans vos indicateurs :contentReference[oaicite:1]{index=1}.

2. Création automatique des features

FreqAI détecte vos fonctions préfixées feature_engineering_* et les appelle pour produire toutes les variantes de vos indicateurs (périodes, timeframes, décalages, paires de corrélation) :


def feature_engineering_expand_all(self, dataframe, period, **kwargs):
    # Ex. : EMA, RSI, MFI…
    dataframe["%-ema-period"] = ta.EMA(dataframe, timeperiod=period)
    dataframe["%-rsi-period"] = ta.RSI(dataframe, timeperiod=period)
    return dataframe
  

Un autre hook, feature_engineering_standard(), permet d’ajouter des features globales (ex. : jour de la semaine) qui ne seront pas multipliées :contentReference[oaicite:2]{index=2}.

3. Définition des targets

Dans set_freqai_targets(), vous créez vos labels préfixés & :


def set_freqai_targets(self, dataframe, **kwargs):
    # Exemple : variation moyenne du prix sur N bougies
    dataframe["&-s_close"] = (
        dataframe["close"]
        .shift(-self.freqai_info["feature_parameters"]["label_period_candles"])
        .rolling(self.freqai_info["feature_parameters"]["label_period_candles"])
        .mean() / dataframe["close"]
        - 1
    )
    return dataframe
  

Les targets peuvent être continues (regression) ou discrètes (classification), selon le modèle choisi :contentReference[oaicite:3]{index=3}.

4. Confiance et outliers

FreqAI ajoute plusieurs colonnes pour évaluer la fiabilité de chaque prédiction :

  • do_predict : indicateur [-2…2] sur la confiance (DI, SVM, DBSCAN)
  • df['&*_mean'] / df['&*_std'] : moyenne et écart‑type historique du target

Vous pouvez filtrer ou ajuster dynamiquement vos seuils (z‑score) pour l’entrée/sortie :contentReference[oaicite:4]{index=4}.

5. Choix des modèles de prédiction

FreqAI embarque plusieurs algorithmes GBDT prêts à l’emploi, sélectionnables via --freqaimodel :

  • CatBoost (régression & classification)
  • LightGBM (régression & classification)
  • XGBoost (régression & classification)

Vous pouvez également implémenter votre propre modèle en héritant de IFreqaiModel et en plaçant votre classe dans user_data/freqaimodels :contentReference[oaicite:5]{index=5}.

6. Configuration et paramètres

Dans votre fichier de configuration (config.json), la section freqai gère notamment :

  • label_period_candles : horizon de prédiction
  • indicator_periods_candles : liste des périodes à tester
  • include_timeframes, include_shifted_candles, include_corr_pairs : paramètres d’expansion
  • fit_live_predictions_candles : historique des prédictions pour statistique dynamique

Assurez‑vous que startup_candle_count couvre au moins deux fois la plus grande période utilisée pour éviter les NaNs au démarrage :contentReference[oaicite:6]{index=6}.

7. Liens utiles

Articles similaires