La personnalisation des stratégies de trading est l’étape clé pour tirer le meilleur parti d’un bot de trading, dont Gekko que nous avons installé dans un autre article. Si vous l’avez testé, vous vous demandez sûrement : comment puis-je vraiment adapter et améliorer des stratégies pour mes propres besoins ? Que vous soyez un utilisateur avancé ou débutant mais prêt à aller plus loin, ce guide vous propose une méthode concrète, étape par étape, pour personnaliser, tester et déployer en toute sécurité de nouvelles stratégies de trading sur Gekko. Nous aborderons leur code, des conseils de configuration, des techniques de backtesting – et surtout, vous comprendrez non seulement “comment” modifier une stratégie, mais aussi pourquoi chaque étape compte pour le trading réel.
Avant de commencer, pensez à consulter la documentation de Gekko :
Note : Ce guide suppose quelques bases en JavaScript. L’objectif n’est pas de donner cours de code généraliste, mais de vous donner la démarche concrète pour adapter et tester des stratégies dans Gekko.
Nous allons rappeler la démarche de test (dans l’interface web ou en ligne de commande), puis vous montrer comment personnaliser la stratégie MACD
en intégrant un stoploss, en ajustant les paramètres, et en apprenant à déboguer.
Premiers pas : démarrer avec une stratégie Gekko intégrée
Sur Gekko, chaque stratégie de trading est un fichier JavaScript situé dans le dossier /strategies
.
- Les stratégies deviennent visibles dans le menu de backtest de l’interface si vous leur associez un fichier de paramètres
.toml
dans/config/strategies/
. - Que vous utilisiez l’interface web ou la ligne de commande, il est nécessaire d’avoir importé des données de marché historiques pour réaliser vos tests ou simulations — consultez, si besoin, mon guide sur l’import de données.
- Il est recommandé de toujours commencer par un backtest (simulation) sur des données historiques : c’est sûr, rapide et efficace.
- Une fois satisfait, testez votre stratégie en mode “paper trader” (simulation toujours mais sur les cours réels du marché, sans engager de fonds) avant d’envisager de basculer en trading réel.
Voici comment la stratégie standard MACD livrée avec Gekko s’est comportée lors d’un backtest sur un historique Kraken EUR/ETH d’octobre 2016 à janvier 2019 en utilisant les paramètres par défaut.
Paramètres standards



Résultats avec paramètres standard

On voit dans les résultats ci-dessus, via la ligne « market » surlignée en orange, que l’évolution « naturelle » du cours du marché pour un nombre invariant d’actifs, sans réaliser aucune action de revente/achat/revente, est de 984% à la fin de la période. Une stratégie “buy and hold” (acheter immédiatement l’actif et le conserver) aurait donc permis de réaliser ce rendement.
En utilisant la stratégie standard basée sur MACD avec chandeliers de 6 heures et les seuils montrés plus haut, 168 transactions ont été effectuées pour un gain très légèrement inférieur (835 %) à l’évolution naturelle du marché, ce qui illustre à la fois l’intérêt et les limites de l’automatisation vis-à-vis de l’approche passive « acheter et conserver ».
En effet, si le pourcentage de gain est ici légèrement négatif dans le contexte globalement fortement haussier (+984%) sur la période étudiée de plus de deux ans, cela ne signifie pas pour autant que la stratégie MACD est mauvaise: elle aurait peut-être pu permettre dans certains cas de protéger nos gains, en revendant par exemple les assets précédemment acquis lors d’une période haussière, si une baisse du marché est détectée (ce que ne fait PAS la stratégie très basique « acheter et conserver »). Il est donc capital de backtester sur des périodes et des tendances différentes, pour analyser le comportement d’une même stratégie, avec les mêmes paramètres, ou en développant des paramètres qui s’ajustent dynamiquement en fonction de la tendance du marché. La complexité d’une stratégie peut aller très loin .. Reste à voir si les stratégies les plus simples ne sont pas aussi les meilleures …
Voyons désormais comment quelques ajustements de paramètres peuvent modifier les performances.
Voyons désormais comment quelques ajustements de paramètres peuvent modifier les performances.
Paramètres ajustés

Résultats avec paramètres ajustés

Bilan rapide
Rien qu’en modifiant quelques paramètres, les résultats évoluent sensiblement ! Attention toutefois : d’excellentes performances passées ne garantissent jamais les résultats à venir, tout particulièrement sur des marchés volatils. Le temps que nous passons ici à optimiser sur l’historique améliore la stratégie sur le passé, mais cela ne préjuge en rien de sa robustesse future. La prudence reste donc de mise avant toute utilisation en réel.
En observant plus finement le déroulement, on constate que la stratégie s’en sort un peu mieux lors des fortes tendances, qu’elles soient haussières ou baissières. On remarque aussi que certains paramètres mériteraient d’être affinés : des signaux d’achat (long) apparaissent parfois juste avant une baisse, ou des signaux de vente (short) juste avant une hausse, malgré une tendance en apparence franche du marché.

Étape 2 : Cloner et explorer la stratégie MACD
Cloner la stratégie MACD
- Commencez par copier la stratégie MACD standard (il est conseillé de ne jamais modifier les fichiers originaux – copiez d’abord la stratégie !) vers une nouvelle version, par exemple “MyMACD” :
cp <gekko_installdir>/strategies/MACD.js <gekko_installdir>/strategies/MyMACD.js
- (Optionnel mais recommandé) :
- Il est conseillé de dupliquer aussi le fichier de configuration TOML associé afin de pouvoir expérimenter les paramètres en toute sécurité via l’interface graphique.
cp <gekko_installdir>/config/strategies/MACD.toml <gekko_installdir>/config/strategies/MyMACD.toml
Aperçu rapide : fonctionnement de strategies/MACD.js
- La fonction
init()
initialise les variables (gestion de la tendance, historique requis via config.js sectiontradingAdvisor
, instancie l’indicateur MACD). - En consultant le fichier de l’indicateur MACD (
/strategies/indicators/MACD.js
) on constate qu’il utilise trois moyennes mobiles exponentielles (EMAs : courte, longue, signal), calcule les croisements, et renvoie ces valeurs pour être utilisées dans la logique de décision de la stratégie. - Le fonctionnement de l’indicateur MACD :
- Met à jour les EMAs “courte” et “longue” avec le prix du marché (plus précisément, avec la valeur de clôture de la dernière bougie/candle fournie par la stratégie).
- Calcule la différence entre ces deux EMAs, ce qui donne la valeur du MACD.
- Utilise cette différence (la valeur du MACD) pour calculer et mettre à jour l’EMA de signal.
- Renvoie enfin la différence entre la valeur du MACD et l’EMA de signal, qui est alors interprétée comme une tendance à la baisse (« bearish » comme disent nos amis anglosaxons) ou à la hausse (« bullish ») du marché, par les règles de décision de la stratégie.
- Pour plus d’information sur le MACD, vous pouvez consulter des tutoriels spécialisés ou l’article Wikipédia.
- La fonction
log()
peut afficher des informations utiles sur chaque bougie (valeurs EMA, différence MACD, etc.) dans les logs de Gekko, à chaque mise à jour de bougie. - La fonction
check()
contient la logique de décision de la stratégie :- Si l’indicateur MACD dépasse le seuil “up” configuré et si la tendance persiste : ACHAT
- Si l’indicateur MACD passe sous le seuil “down” et que la tendance persiste : VENTE
- Si l’indicateur MACD est entre les deux seuils : on ne fait rien.


Pour approfondir le fonctionnement du MACD, n’hésitez pas à lire des tutoriels dédiés ou l’article complet sur Wikipédia.
S’assurer que la nouvelle stratégie est bien utilisée
- Ajoutez au début de votre nouvelle stratégie un
log.debug('Running MyMACD!')
ou équivalent pour vérifier qu’elle est utilisée par Gekko.- Par exemple, modifiez la fonction log() de MyMACD.js, vers la ligne 51, et adaptez “MACD properties” → “MyMACD properties” :
- Par exemple, modifiez la fonction log() de MyMACD.js, vers la ligne 51, et adaptez “MACD properties” → “MyMACD properties” :
log.debug('calculated MyMACD properties for candle:'); log.debug('t', 'short:', macd.short.result.toFixed(digits)); log.debug('t', 'long:', macd.long.result.toFixed(digits));
Étape 3 : Modifier config.js
pour utiliser la stratégie MyMACD
Editer config.js
- Modifiez le plugin trading.Advisor pour pointer vers la bonne stratégie. Il suffit d’indiquer le nom du fichier de la stratégie (sans l’extension
.js
).
config.tradingAdvisor = { enabled: true, method: 'MyMACD', candleSize: 360, //to reflect the 6 hours candle I used in previous backtest historySize: 6, //to reflect the 6 candles of warmup period in backtest UI }
- Fournissez ensuite les paramètres à la stratégie (attention à la ligne 2) :
// MACD settings: config.MyMACD = { // EMA weight (α) // the higher the weight, the more smooth (and delayed) the line short: 10, long: 21, signal: 9, // the difference between the EMAs (to act as triggers) thresholds: { down: -0.7, up: 0.3, // How many candle intervals should a trend persist // before we consider it real? persistence: 0 } };
Ces deux modifications vous permettront d’utiliser votre nouvelle stratégie en ligne de commande Gekko.
Editer également votre fichier MyMACD.toml
- Si vous utilisez l’interface graphique, assurez-vous que
config/strategies/MyMACD.toml
reprend bien vos nouveaux paramètres, pour un contrôle total dans le menu de backtest.
short = 10 long = 21 signal = 9 [thresholds] down = -0.7 up = 0.3 persistence = 0
Lancer un backtest
Avec la CLI (ligne de comnande)
node gekko --config config.js --backtest
Assurez-vous que les logs affichent bien MyMACD et vos nouveaux messages de debug : cela confirme que la bonne stratégie est utilisée.
...
2019-01-09 14:07:52 (DEBUG): calculated MyMACD properties for candle:
2019-01-09 14:07:52 (DEBUG): short: 247.91113481
2019-01-09 14:07:52 (DEBUG): long: 253.43444971
2019-01-09 14:07:52 (DEBUG): macd: -5.52331490
2019-01-09 14:07:52 (DEBUG): signal: -4.87686289
2019-01-09 14:07:52 (DEBUG): macdiff: -0.64645201
2019-01-09 14:07:52 (DEBUG): In no trend
2019-01-09 14:07:52 (DEBUG): calculated MyMACD properties for candle:
2019-01-09 14:07:52 (DEBUG): short: 249.96729212
2019-01-09 14:07:52 (DEBUG): long: 253.96040883
2019-01-09 14:07:52 (DEBUG): macd: -3.99311671
2019-01-09 14:07:52 (DEBUG): signal: -4.70011365
2019-01-09 14:07:52 (DEBUG): macdiff: 0.70699694
2019-01-09 14:07:52 (DEBUG): In uptrend since 1 candle(s)
2019-01-09 14:07:52 (INFO): 2017-10-24 07:29:00: Paper trader simulated a BUY 0.00000000 EUR => 3.39807550 ETH
...
Avec l’interface web
La stratégie “MyMACD” s’affiche maintenant dans les menus de backtest et de simulation en temps réel (live). Vous pouvez directement jouer avec ses paramètres pour les ajuster.

Comparaison des résultats de backtests
Vous pouvez maintenant comparer les résultats entre le backtest de la stratégie standard et celui de votre version personnalisée MyMACD. Si tout est en place, avec les mêmes paramètres de base vous devriez retrouver les mêmes résultats — c’est le premier point à valider avant d’aller plus loin.

Même résultat ! Cela veut dire que nous avons maintenant une base fonctionnelle sur laquelle travailler et modifier la stratégie, sans toucher à la version originale.
Conseils pratiques
- Travaillez toujours avec des fichiers distincts, clonés pour vos configurations et stratégies à chaque essai.
- Utilisez un gestionnaire de versions (comme Git) ou faites des sauvegardes régulières de vos fichiers
.js
et.toml
.- Avant d’ajouter de la complexité, utiliser en complément un autre outil de visualisation de signaux, comme TradingView ou Kraken pour vérifier la cohérence de votre logique avec les mouvements du marché réel.
Etape 4: Ajout de la gestion du Stoploss à notre stratégie personnalisée
Pourquoi ajouter un nouveau paramètre de stoploss ?
Une chose qui n’est pas prise en compte dans cette stratégie est la possibilité de « non-tendance » (notrend). Lorsque le résultat du MACD stagne longtemps entre nos seuils bas et haut, cela ne signifie pas que le marché ou le cours de l’actif sont stables. Cela signifie simplement qu’il n’y a pas suffisamment de mouvement à la hausse ou à la baisse pour que notre stratégie puisse en tirer parti.
Cependant, le marché peut continuer à baisser (ou à monter) suffisamment lentement pour rester en dessous des seuils de détection que l’on a fixé. Le marché peut aussi baisser suffisament brutalement pour que notre stratégie basée sur MACD, une « moving average » dont la méthode de calcul induit un décalage par rapport au marché actif, ne détecte pas encore cette chute. Donc, dans certains cas, après quelques chandelles, il peut être préférable de vendre afin de conserver nos gains en reconvertissant nos actifs en devise. C’est ce que l’on appelle un stoploss. La fonctionnalité de « stoploss » déclenche automatiquement une vente si le prix descend trop en dessous du dernier achat, indépendamment des indicateurs classiques que l’on utilise, ce qui permet de se protéger contre des pertes importantes lors des marchés plats ou qui stagnent.
Résumé du fonctionnement
- On introduit un paramètre stoploss dans la configuration.
- On modifie la gestion de la tendance haussière (uptrend) pour mettre à jour le stoploss quand le marché monte.
- On crée une nouvelle tendance « stagnante » (notrend) dans la stratégie. Dans cette tendance, si le cours actuel tombe sous le stoploss défini, la stratégie vend pour limiter la perte.
Notez qu’il existe de nombreuses façons différentes ou complémentaires d’améliorer le système. Par exemple, on pourrait également ajouter une condition OU dans la section tendance baissière, pour vendre si (la différence MACD est inférieure au seuil bas OU si le prix de la bougie est inférieur au prix du stoploss).
Ajouter un paramètre dans config.js
Modifiez <gekko_installdir>/config.js pour ajouter le paramètre stoploss afin de pouvoir l’ajuster facilement. Il s’agit d’un pourcentage du dernier prix d’ACHAT.
config.MyMACD = { // EMA weight (α) // the higher the weight, the more smooth (and delayed) the line short: 10, long: 21, signal: 9, // the difference between the EMAs (to act as triggers) thresholds: { down: -0.7, up: 0.3, stoploss: 10, // How many candle intervals should a trend persist // before we consider it real? persistence: 0 } };
Modifier MyMACD.js pour gérer le stoploss dans les tendances haussières et baissières
Maintenant éditez <gekko_installdir>/strategies/MyMACD.js
Dans la fonction init, nous ajoutons la lecture du fichier de configuration et la stockons dans stoploss_rate. Une nouvelle variable stoploss_price contiendra le prix stoploss calculé. Notez que si vous définissez une variable ou une constante dans le bloc init(), elle ne sera pas conservée dans le bloc check(). Nous utilisons donc l’objet « this » pour stocker les données, car sa portée est globale.
//get the stoploss rate from conf this.stoploss_rate = this.settings.thresholds.stoploss; //reset the stoploss_price this.stoploss_price = "";
Nous devons modifier la fonction de vérification check() afin qu’elle reçoive la description de la bougie en entrée, car nous devrons l’utiliser pour obtenir le prix de la bougie que nous essayons d’acheter, ou le prix de la bougie pour mettre à jour le stoploss_price si le marché est haussier.
method.check = function(candle) {
Dans la section « tendance haussière » (uptrend), nous ajoutons ceci, afin de mettre à jour le stoploss_price chaque fois que le marché augmente si le nouveau prix de la bougie est supérieur au stoploss-price, ou chaque fois que nous ACHETONS (position longue conseillée) :
... log.debug('In uptrend since', this.trend.duration, 'candle(s)'); if (this.stoploss_price != "" && candle.close > this.stoploss_price) { this.stoploss_price = candle.close-candle.close*this.stoploss_rate/100; log.info('===> New computed stoploss price is:', this.stoploss_price,'<==='); } ... if(this.trend.persisted && !this.trend.adviced) { this.trend.adviced = true; this.advice('long'); this.stoploss_price = candle.close-candle.close*this.stoploss_rate/100; log.info('===> We BOUGHT at ~',candle.close,' and computed stoploss price is:', this.stoploss_price,'<==='); } else this.advice(); ...
Maintenant, dans la section « tendance baissière » (downtrend), si nous VENDONS, nous devons réinitialiser le stoploss_price car nous ne possédons plus aucun actif.
if(this.trend.persisted && !this.trend.adviced) { this.trend.adviced = true; this.advice('short'); this.stoploss_price = ""; log.debug('===> We SOLD at ~',candle.close,' and reseted stoploss price. <==='); } else this.advice(); ...
Nouveau backtesting
Lançons un nouveau backtest, juste pour nous assurer que nous n’avons rien cassé ; et même si nous n’avons en réalité rien changé à ce stade à l’arbre de décision pour vendre ou acheter.
node gekko --config config.js --backtest

Alors, que voyons-nous ?
- Tout d’abord, que j’ai désactivé le mode débogage au début du fichier config.js et que j’ai oublié de le mentionner ici 🙂
- Le premier BUY affiché a initialisé le stoploss_price en le calculant à partir du stoploss_rate que nous avons défini dans conf.
- Ensuite, le stoploss_price continue d’augmenter, car nous avons pris soin de ne pas le mettre à jour si le prix du marché était inférieur à stoploss_price, justement.
- Lorsque nous VENDONS, le stoploss_price est réinitialisé.
- Tout semble bien se passer jusqu’à présent !
Modifier MyMACD.js pour gérer le stoploss dans une nouvelle tendance « stagnante ».
Modifions maintenant le bloc « notrend » et créons une tendance « stall » intégrant une vente si nous détectons une persistance et un prix du marché inférieur à notre stoploss_price. Le champ persistence
agit comme une protection contre les faux signaux, exigeant un certain historique (plusieurs bougies) dans la même tendance avant d’agir.
} else { //log.debug('In no trend'); // new trend detected if(this.trend.direction !== 'stall') // reset the state for the new trend this.trend = { duration: 0, persisted: false, direction: 'stall', adviced: false }; this.trend.duration++; log.debug('In stalled trend since', this.trend.duration, 'candle(s)'); if(this.trend.duration >= this.settings.thresholds.persistence) this.trend.persisted = true; if (this.trend.persisted && !this.trend.adviced) { if (this.stoploss_price != "" && candle.close < this.stoploss_price) { this.trend.adviced = true; this.advice('short'); this.stoploss_price = ""; log.info('===> We 'Stalled' SOLD at ~',candle.close,' and reseted stoploss price. <==='); } log.info('===> Market not low enough to 'stall' sell <==='); } this.advice(); }
Attention, nous devons également modifier la condition du bloc de tendance baissière, car nous n’avons pas besoin de VENDRE une nouvelle fois si le marché est réellement en tendance baissière, après avoir déjà vendu plus tôt grâce à notre nouveau code « tendance stagnante » :
} else if(macddiff < this.settings.thresholds.down && this.stoploss_price != "") {
Tester la nouvelle stratégie
Et nous effectuons un nouveau backtest (notez que j’ai commenté la dernière ligne log.info dans le bloc Stall afin de réduire la verbosité) :

Cela semble fonctionner. N’oubliez pas de copier le fichier MACD.toml dans un nouveau fichier MyMACD.toml et d’ajouter le paramètre stoploss afin de pouvoir également l’utiliser dans l’interface utilisateur du backtest.
Backtest et analyse
Alors, comment ça marche ? Eh bien, pas très bien 🙂 Mais le but de l’article était d’arriver à modifier une stratégie pour implémenter des règles et une logique personnalisée. Je rédigerai un autre article sur le backtesting, en particulier sur la manière d’essayer d’ajuster les paramètres. En effet, comme nous l’avons déjà remarqué, le réglage fin des paramètres nécessite beaucoup d’analyses et de nombreux tests.
Nous avons codé ici un nouveau paramètre, et voici le résultat, sachant que j’ai conservé les paramètres de test précédents.


Donc, telle quelle, notre nouvelle stratégie est moins efficace que le MACD standard. Mais nous avons « pris le contrôle » d’un nouveau type de tendance sur le marché surveillé par la strat.égie Nous devons l’ajuster et trouver de meilleures valeurs pour les paramètres. Le code doit pouvoir être aussi optimisé un peu.
À titre d’information, un backtest avec cette stratégie, sur mon ordinateur portable i7 « moyen », dure environ 41 secondes, après avoir modifié toutes les fonctions log.info() que nous avons utilisées ci-dessus pour utiliser log.debug() à la place, et avec le mode débogage désactivé dans config.js.
Ceci n’était qu’un exemple pour expliquer comment instancier et modifier une stratégie. Je ne garantis en aucun cas que cette modification sera rentable. Encore une fois, vous agissez à vos propres risques, que ce soit en utilisant une stratégie Gekko standard non optimisée ou en utilisant une stratégie personnalisée. Vous pourriez (très probablement) perdre votre investissement, car il n’existe pas de formule magique pour anticiper les marchés sans prendre d’énormes risques ou avoir une très grande confiance en vos connaissances du marché.
Dans un prochain article, j’expliquerai comment j’ai réussi à lancer des tests à grande échelle avec des paramètres aléatoires (ou non), de façon à trouver une combinaison « gagnante » (à nouveau sur des données passées), à l’aide d’outils publics fournis par des contributeurs.
Idées pour d’autres améliorations
D’autres améliorations possibles sur lesquelles vous pourriez travailler sont :
- Ajouter un paramètre dans la conf pour fournir à votre stratégie le dernier type d’ordre (achat ou vente) que vous avez manuellement passé sur votre plateforme d’échange avec son prix afin que votre stratégie puisse l’utiliser pour sa première décision.
- Calculer le stoploss dans la section init si la dernière action dans la conf était un achat et que vous connaissez son prix, afin de ne pas manquer de vendre si la toute première tendance à laquelle votre stratégie devra faire face est un marché long, stagnant mais en baisse.
- Traiter davantage d’indicateurs que le MACD dans une stratégie unifiée.
- Inverser le principe du stoploss pour acheter si nous détectons une hausse lente mais persistante du marché.
- Ce qui n’est actuellement pas autorisé dans Gekko, c’est de gérer plusieurs tailles de bougies en même temps, de sorte que vous puissiez avoir une stratégie fonctionnant à la fois sur les tendances à court terme et sur les tendances à long terme, et prendre des décisions en fonction des deux (ou N tailles de bougies). Il semble qu’il existe certains forks qui le permettent, mais je ne les ai pas encore essayés.
Conclusion : Personnalisation et test des stratégies Gekko – Et ensuite ?
La personnalisation de vos propres stratégies Gekko vous ouvre de puissantes opportunités de trading, mais elle exige un processus de travail minutieux et itératif.
- Testez toujours minutieusement vos stratégies sur des ensembles de données historiques, puis simulez votre approche avec un bot « paper trading » sur le cours réel « live » du marché mais sans donner de « vrais » ordres.
- Ne passez au trading réel que lorsque vous êtes sûr de la robustesse de la stratégie et de votre contrôle des risques.
- Les marchés évoluent, alors revoyez régulièrement vos paramètres et votre logique.
- Méfiez-vous du surajustement : les performances exceptionnelles passées sont rarement prédictives de l’avenir.
- Pour obtenir les meilleurs résultats, envisagez d’automatiser vos backtests afin de comparer et d’affiner systématiquement plusieurs configurations.
Suggestions de lectures suivantes sur ce blog
- Step by Step Guide – How to Use the Gekko Trading Bot, from Backtest to Real Trading — Pour les lecteurs qui souhaitent avoir une vue d’ensemble plus large du flux de travail Gekko, de l’importation des données au trading en direct.
- Automate Gekko’s Strats Parameters Backtesting (with Gekkoga) — Comment automatiser les backtests à grande échelle et optimiser les paramètres stratégiques à l’aide d’algorithmes génétiques pour améliorer les performances et la robustesse.
- Launching Gekkoga on High-End EC2 Spot Machine — Pour les utilisateurs avancés : exécutez des tâches de backtesting et d’optimisation sur des ressources informatiques cloud peu coûteuses.
Liens externes sélectionnés pour approfondir vos connaissances
- MACD – Wikipedia (pour le contexte théorique)
- GoodCrypto: The MACD Indicator and MACD Trading Strategies (Présentation détaillée de la logique MACD, de son utilisation et des idées stratégiques pour le trading crypto)
- Altrady: Top 3 Free Tools to Track Crypto Trading Indicators in Real-Time (pour les lecteurs à la recherche d’outils pratiques pour visualiser et tester leur logique)