Hyperopt avec Freqtrade – Optimisation de stratégie de trading automatisée

Hyperopt avec Freqtrade – Optimisation de stratégie de trading automatisée

Introduction

Dans le trading algorithmique, Hyperopt est l’outil intégré à Freqtrade qui automatise la recherche des meilleurs paramètres pour vos stratégies : seuils RSI, stop‑loss, take‑profit, retour sur investissement (ROI), trailing stop, etc. Plutôt que de tâtonner manuellement, Hyperopt utilise des méthodes d’optimisation bayésienne pour explorer efficacement l’espace de paramètres et maximiser un critère de performance (Sharpe, Sortino, drawdown, etc.).

1. Installation des dépendances

Avec un environnement Python natif

source .venv/bin/activate
pip install -r requirements-hyperopt.txt

Avec Docker

Aucune installation supplémentaire : l’image Docker officielle de Freqtrade intègre déjà Hyperopt.

2. Commande de base pour lancer Hyperopt

freqtrade hyperopt \
  --strategy MaStrategie \
  --hyperopt-loss SharpeHyperOptLossDaily \
  --spaces roi stoploss trailing \
  --timerange 20220101-20220301 \
  -e 100
OptionDescription
--strategyClasse Python de votre stratégie (ex. MaStrategie).
--hyperopt-lossFonction de perte à minimiser (Sharpe, Sortino, Drawdown, etc.).
--spacesEspaces de paramètres à optimiser : buy, sell, roi, stoploss, trailing, etc.
--timerangePlage historique au format AAAAMMJJ-AAAAMMJJ.
-e, --epochsNombre d’itérations (passes) sur l’espace de recherche.

3. Comprendre les résultats

Après exécution, Hyperopt affiche la meilleure combinaison et ses métriques associées (profit, ratio Sharpe, drawdown, etc.). Ces valeurs se retrouvent sous la forme de dictionnaires buy_params, sell_params, roi_params, stoploss_params ou trailing_params.

4. Intégrer les paramètres optimisés

from freqtrade.strategy import IStrategy
class MaStrategie(IStrategy):
    buy_params = {
        'rsi_buy': 30,
        'lower_bb': 0.995
    }
    sell_params = {
        'rsi_sell': 70,
        'upper_bb': 1.005
    }
    roi_params = {'0': 0.10, '30': 0.05, '60': 0.02}
    stoploss_params = {'stoploss': -0.03}
    trailing_params = {
      'trailing_stop': True,
      'trailing_stop_positive': 0.01
    }

    def populate_indicators(self, dataframe, metadata):
        import talib as ta
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
        bollinger = ta.BBANDS(dataframe['close'], timeperiod=20)
        dataframe['lower_bb'] = bollinger[2]
        dataframe['upper_bb'] = bollinger[0]
        return dataframe

Puis validez ces paramètres via un backtest hors optimisation :

freqtrade backtesting \
  --strategy MaStrategie \
  --timerange 20210401-20210601

5. Personnaliser l’optimisation

5.1. Fonction de perte sur‑mesure

from freqtrade.optimize.hyperopt import IHyperOptLoss
class MyCustomLoss(IHyperOptLoss):
    @staticmethod
    def loss(backtest_result):
        sharpe = backtest_result.sharpe_ratio
        dd = backtest_result.max_drawdown
        return dd - 0.1 * sharpe

Puis lancez :

freqtrade hyperopt \
  --strategy MaStrategie \
  --hyperopt-loss MyCustomLoss \
  …

5.2. Espaces de recherche personnalisés

from freqtrade.optimize.space import SKDecimal
class MaStrategie(IStrategy):
    class HyperOpt:
        @staticmethod
        def stoploss_space():
            return [
                SKDecimal(-0.05, -0.01, decimals=3, name='stoploss'),
            ]
        @staticmethod
        def roi_space():
            return [
                SKDecimal(0.01, 0.10, decimals=3, name='roi_0'),
                SKDecimal(0.005, 0.05, decimals=3, name='roi_30'),
            ]

6. Conseils et pièges à éviter

  • Overfitting : testez toujours sur une plage hors la période d’optimisation.
  • Bornes réalistes : définissez des intervalles de recherche cohérents avec votre horizon.
  • Ressources : l’optimisation peut être gourmande ; privilégiez le multiprocessing ou un serveur dédié.
  • Iterations suffisantes : un petit nombre d’epochs (10–20) peut manquer de couverture, un grand nombre rallonge le temps.

Conclusion

L’outil Hyperopt de Freqtrade transforme la tâche manuelle de réglage des paramètres en un processus automatisé et reproductible, augmentant la rigueur du backtesting et la robustesse de vos stratégies. Que vous soyez débutant ou quant expérimenté, l’optimisation bayésienne vous aide à trouver rapidement des combinaisons performantes – à condition de respecter les bonnes pratiques de validation et de rester vigilant face aux risques de sur‑optimisation.

Liens utiles

Articles similaires