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
| Option | Description |
|---|---|
--strategy | Classe Python de votre stratégie (ex. MaStrategie). |
--hyperopt-loss | Fonction de perte à minimiser (Sharpe, Sortino, Drawdown, etc.). |
--spaces | Espaces de paramètres à optimiser : buy, sell, roi, stoploss, trailing, etc. |
--timerange | Plage historique au format AAAAMMJJ-AAAAMMJJ. |
-e, --epochs | Nombre 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.








