Guide rapide : installation, configuration et exécution de SampleStrategy sur Freqtrade.
Ce guide présente en détail l'installation, la configuration et l'exécution de la stratégie SampleStrategy pour Freqtrade, avec un focus sur les notions de backtesting (test rétrospectif) et de dry-run (exécution à blanc).
Remarque : pour la définition des termes utilisés dans ce guide, consultez le Lexique complet des termes courants en trading.
1. Présentation de la stratégie
La SampleStrategy hérite de IStrategy et utilise les indicateurs RSI, TEMA et Bollinger Bands pour générer des signaux d'entrée et de sortie.
- Voir le code complet (user_data/strategies/sample_strategy.py)
- Méthodes clés :
populate_indicators: calcul des indicateurs (RSI, TEMA, BB, ADX)populate_entry_trend: signauxenter_long/enter_shortpopulate_exit_trend: signauxexit_long/exit_shortinformative_pairs: charger des paires informatives
Sources & modules
import talib.abstract as ta: indicateurs RSI, TEMA, BB, patterns candlestick commentés (CDLENGULFING, CDL3INSIDE…)from technical import qtpylib: helpers (crossed_above, awesome_oscillator, heikinashi)freqtrade.strategy: interfaceIStrategy, paramètres Hyperopt (IntParameter, …), utilitaires (merge_informative_pair,stoploss_from_absolute)
Paramètres de la stratégie
| Attribut | Valeur | Description |
|---|---|---|
| INTERFACE_VERSION | 3 | Version de l’interface de stratégie. |
| can_short | False | Autorise la position short. |
| minimal_roi | {"60":0.01,"30":0.02,"0":0.04} | ROI minimal par période (surchargé par config.json). |
| stoploss | -0.10 | Seuil de stoploss. |
| trailing_stop | False | Activation du trailing stoploss (désactivé). |
| timeframe | "5m" | Timeframe des bougies. |
| process_only_new_candles | True | Traite uniquement les nouvelles bougies. |
| use_exit_signal | True | Utilise le signal interne de sortie. |
| exit_profit_only | False | Sortie uniquement en cas de profit. |
| ignore_roi_if_entry_signal | False | Ignore le ROI si un nouveau signal d’entrée apparaît. |
| startup_candle_count | 200 | Nombre de bougies requises avant génération de signaux. |
| order_types | {entry: "limit", exit: "limit", stoploss: "market"} | Types d’ordres pour entrée, sortie et stoploss. |
| stoploss_on_exchange | False | Si True, place le stoploss directement sur l’exchange (order book) ; sinon, géré localement par le bot. |
| order_time_in_force | {entry: "GTC", exit: "GTC"} | Règles Time In Force. |
| plot_config | – | Configuration des graphiques (MACD, RSI, etc.). |
Hyperparamètres
| Paramètre | Défaut | Description | Hyperoptable |
|---|---|---|---|
| buy_rsi | 30 | Seuil RSI entrée long | ✅ |
| sell_rsi | 70 | Seuil RSI sortie long | ✅ |
| short_rsi | 70 | Seuil RSI entrée short | ✅ |
| exit_short_rsi | 30 | Seuil RSI sortie short | ✅ |
Conditions d'entrée & sortie
| Signal | Conditions |
|---|---|
| enter_long | RSI > buy_rsi + TEMA ≤ bande médiane + TEMA croissante + volume > 0 |
| exit_long | RSI > sell_rsi + TEMA > bande médiane + TEMA décroissante + volume > 0 |
| enter_short | RSI > short_rsi + TEMA > bande médiane + TEMA décroissante + volume > 0 |
| exit_short | RSI > exit_short_rsi + TEMA ≤ bande médiane + TEMA croissante + volume > 0 |
Explication des conditions de sortie
- exit_long : déclenché quand RSI croise au-dessus de
sell_rsi(70), que TEMA se trouve au-dessus de la bande médiane et est décroissante, et que le volume > 0. - exit_short : déclenché quand RSI croise au-dessus de
exit_short_rsi(30), que TEMA se trouve au-dessous (ou égal) de la bande médiane et est croissante, et que le volume > 0.
TEMA : Triple Exponential Moving Average (moyenne mobile exponentielle triple), un indicateur technique pour lisser les données tout en réduisant le décalage.
Personnalisation rapide
- Indicateurs additionnels (uncomment pour activer) :
- ADX :
dataframe["adx"] = ta.ADX(dataframe) - DMI :
ta.PLUS_DM,ta.PLUS_DI,ta.MINUS_DM,ta.MINUS_DI - Aroon & Oscillator :
ta.AROON,ta.AROONOSC - Awesome Oscillator :
qtpylib.awesome_oscillator(dataframe) - Keltner Channel :
qtpylib.keltner_channel(dataframe) - Ultimate Oscillator :
ta.ULTOSC(dataframe) - CCI :
ta.CCI(dataframe) - Inverse Fisher RSI :
dataframe["fisher_rsi"],dataframe["fisher_rsi_norma"] - Stochastic Fast :
ta.STOCHF(dataframe) - Stochastic RSI :
ta.STOCHRSI(dataframe) - MACD :
ta.MACD(dataframe) - MFI :
ta.MFI(dataframe) - ROC :
ta.ROC(dataframe) - EMA (périodes 3,5,10,21,50,100) :
ta.EMA - SMA (périodes 50,100) :
ta.SMA - Parabolic SAR :
ta.SAR(dataframe) - Bollinger Bands :
qtpylib.bollinger_bandset pondérées :qtpylib.weighted_bollinger_bands
- ADX :
Personnalisation avancée
- Candlestick patterns :
ta.CDLHAMMER,ta.CDLDRAGONFLYDOJI,ta.CDLENGULFING,ta.CDLHARAMI, etc. (commentés) - Heikin Ashi :
qtpylib.heikinashi(dataframe) - Orderbook :
self.dp.orderbook(pair, 1)pourbest_bid/best_ask - Trailing Stoploss : activez
trailing_stop = Trueet configureztrailing_stop_positiveet offsets - Multi-timeframe : utilisez
@informativeetmerge_informative_pair() - Graphiques personnalisés : configurez
plot_config(main_plot, subplots)
2. Prérequis
- Python 3.8+ et virtualenv (
python3 --version) - Installation de Freqtrade : voir guide d’installation détaillé
- TA‑Lib et CCXT installés (
pip install TA-Lib ccxt) - Créez et activez l’environnement virtuel :
python3 -m venv .venv && source .venv/bin/activate
3. Emplacement du fichier
Placez SampleStrategy.py dans votre dossier de stratégies personnelles :
user_data/strategies/sample_strategy.pyAssurez-vous que le nom de la classe correspond au nom de fichier :
class SampleStrategy(IStrategy):
...
4. Configuration de config.json
Dans user_data/config.json, définissez au minimum :
{
"strategy": "SampleStrategy",
"timeframe": "5m",
"stake_currency": "USDT",
"stake_amount": "unlimited",
"dry_run": true,
"minimal_roi": { "60": 0.01, "30": 0.02, "0": 0.04 },
"stoploss": -0.10,
"use_exit_signal": true,
"exit_profit_only": false,
"ignore_roi_if_entry_signal": false,
"max_open_trades": 3,
"exchange": { "name": "binance" },
"pair_whitelist": ["BTC/USDT", "ETH/USDT"]
}Remarque : les paramètres minimal_roi, stoploss et timeframe peuvent aussi être définis ou surchargés directement dans la classe.
4.1 Configuration des commissions
Vous pouvez indiquer le coût de la commission dans votre config.json (et/ou le surcharger en CLI). Par exemple, pour Binance Spot :
{
...,
"exchange": {
"name": "binance",
"fee": {
"maker": 0.00075, // 0.075 %
"taker": 0.0025 // 0.25 %
},
...
}
}Selon votre version de Freqtrade, vous pouvez aussi trouver ces clés au même niveau que "exchange" :
{
...,
"maker_fee": 0.00075,
"taker_fee": 0.0025,
...
}En backtesting, vous pouvez en plus passer les frais en CLI :
freqtrade backtesting \
--config user_data/config.json \
--strategy SampleStrategy \
--fee-maker 0.00075 \
--fee-taker 0.0025Ou simplement :
freqtrade backtesting … --fee 0.0025 # même taux pour maker & takerDe plus, Freqtrade reconnaît automatiquement la propriété fee (taker) globale définie dans config.json. Si vous lancez le backtesting sans spécifier de flags de frais, vous devriez voir :
Using fee 0.2500% - custom fee from config file.5. Principes de la stratégie
- Entry
- Indicateur principal : RSI.
- Achat : RSI croise au-dessus de
buy_rsi(par défaut 30). - Short : RSI croise au-dessus de
short_rsi(par défaut 70) avec filtration TEMA et Bollinger.
- Exit
- Long : RSI croise au-dessus de
sell_rsi(par défaut 70). - Short : RSI croise au-dessus de
exit_short_rsi(par défaut 30). - Filtre par position de la TEMA par rapport à la bande médiane.
- Long : RSI croise au-dessus de
Indicateurs calculés : RSI (TA-Lib), TEMA, Bandes de Bollinger, ADX (options commentées : Keltner, CCI…).
Paramètres hyperoptables : buy_rsi, sell_rsi, short_rsi, exit_short_rsi.
6. Lancer la stratégie

6.1 Mode simulation (backtesting)
Exemple de commande sur la période du 1er janvier 2025 au 1er décembre 2025 :
freqtrade backtesting \
--config user_data/config.json \
--strategy SampleStrategy \
--timerange 20250101-202512016.2 Mode trade (dry-run)
Pour valider la stratégie en conditions de marché réel sans risque :
freqtrade trade \
--config user_data/config.json \
--strategy SampleStrategy7. Optimisation des hyperparamètres
Pour optimiser les seuils RSI en backtesting :
freqtrade hyperopt \
--config user_data/config.json \
--strategy SampleStrategy \
--spaces buy,sell \
--epochs 100Astuce : remplacez --spaces par exit ou roi, ou ajoutez --time-limit 3600.
8. Mode graphique (Web UI)
Préparation de l’UI :
freqtrade install-uiCette commande compile les sources du front-end (Vue.js) et place les fichiers statiques dans user_data/web_ui/.
Freqtrade propose une interface Web pour lancer les backtests, la recherche d’hyperparamètres et le mode trade/dry-run directement depuis un navigateur.
freqtrade webserver --config user_data/config.jsonPuis ouvrez http://127.0.0.1:8080 dans votre navigateur.
9. Personnalisation
- Timeframe : modifiez
timeframe = "5m"dans la classe ou dansconfig.json. - Ajout d’indicateurs : éditez la méthode
populate_indicators(). - ROI / stoploss : mettez à jour les dictionnaires
minimal_roietstoploss. - Trailing stop : activez
trailing_stop_positiveettrailing_stop_positive_offset.
10. Bonnes pratiques
- Effectuez des backtests sur plusieurs mois et différentes paires.
- Surveillez les logs pour détecter les signaux inattendus.
- Utilisez Hyperopt pour ajuster plusieurs espaces de paramètres.
- Ne passez en réel qu’après validation en backtest et en dry-run.
11. Dépannage / FAQ
- Erreur
unrecognized arguments: mettez à jour Freqtrade ou vérifiez les options CLI. - Frais ignorés : utilisez la clé globale
feedansconfig.json. - Activer le mode debug :
freqtrade -vet consultezuser_data/logs.
12. Liens utiles
13. Conclusion
Prêt ? Lancez dès maintenant votre hyperopt ou passez en execution en dry-run pour valider votre configuration et créer votre première stratégie live !




