La stratégie de trading de la tortue est une stratégie de suivi des tendances qui suit les ruptures de momentum. Elle a été développée par le célèbre trader Richard Dennis dans les années 1980 pour prouver que les traders pourraient être nourris par des règles plutôt que nés.
La stratégie de trading de la tortue utilise deux paramètres N et N/2 pour construire des canaux. Plus précisément, elle calcule les prix les plus élevés et les plus bas au cours des N jours et N/2 jours les plus récents. Lorsque le prix dépasse le canal N-day, une position longue est établie. Lorsque le prix tombe en dessous du canal N/2-day, la position est fermée. De même, lorsque le prix dépasse le canal N-day vers le bas, une position courte est établie et fermée lorsque le prix dépasse le canal N/2-day.
Dans le code, N correspond àenter_slow
et N/2 correspond àenter_fast
Les prix les plus élevés (slowL
etfastL
) et les prix les plus bas (slowS
etfastS
Les positions longues sont ouvertes lorsque le prix dépasse le canal des 55 jours (enterL2
) et se ferme lorsque le prix tombe en dessous du canal des 20 jours (exitL1
Les positions courtes sont ouvertes lorsque le prix franchit le canal à la baisse des 55 jours (enterS2
) et se ferme lorsque le prix dépasse le canal des 20 jours (exitS1
).
Le plus grand avantage de la stratégie de trading de la tortue est le contrôle des risques. En établissant des positions sur les écarts de prix et en s'arrêtant rapidement sur les retraits, il contrôle efficacement les pertes sur les transactions individuelles.
Un autre avantage est la sélection de paramètres simple. L'ensemble de la stratégie ne comporte que 4 paramètres qui sont faciles à comprendre et à régler. Les paramètres eux-mêmes sont également assez stables, sans nécessiter d'optimisation fréquente.
Le plus grand risque de la stratégie de trading de tortue est l'incapacité de suivre les tendances à long terme. Il peut manquer des opportunités d'entrée lorsque les tendances commencent à se former. En outre, dans des environnements d'oscillation des prix agités, la stratégie déclenchera des entrées et des sorties fréquentes, augmentant les coûts de transaction et les risques de glissement.
En outre, les paramètres fixes pourraient fonctionner de manière très différente selon les produits et les régimes du marché, ce qui nécessite un réglage manuel basé sur l'expérience.
La stratégie de négociation des tortues peut être améliorée de plusieurs façons:
Ajouter des capacités d'adaptation aux paramètres N et N/2 en fonction de la volatilité du marché et de la fréquence du signal pour rendre le système plus robuste dans tous les scénarios.
Incorporer des règles de détection des tendances avant l'entrée afin d'éviter les entrées erronées sur des marchés instables.
Adopter une approche multi-temporelle pour confirmer les tendances sur les périodes plus longues et effectuer des transactions sur les périodes plus courtes.
Optimiser les règles de stop loss avec des stops de trailing ou des stops basés sur le temps pour réduire les retraits.
La stratégie de trading de la tortue suit efficacement les tendances par un système de rupture simple. Le contrôle des risques est sa plus grande force, grâce à des arrêts rapides et à la dimensionnement des positions fractionnaires fixes. Dans le même temps, nous voyons plusieurs dimensions le long desquelles la stratégie peut être étendue et optimisée pour s'adapter à plus d'instruments et de conditions de marché. Dans l'ensemble, elle fournit un moyen contrôlé par le risque de capturer les tendances des prix qui est une référence importante pour le trading quantitatif.
/*backtest start: 2022-12-24 00:00:00 end: 2023-12-24 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //oringinally coded by tmr0, modified by timchep //original idea from «Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders» (2007) CURTIS FAITH strategy("Turtles", shorttitle = "Turtles", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100) ////////////////////////////////////////////////////////////////////// // Component Code Start testStartYear = input(2011, "Backtest Start Year") testStartMonth = input(12, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=bool, defval=false) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) testPeriod() => true // Component Code Stop ////////////////////////////////////////////////////////////////////// shortingEnabled = input(title="Enable Shorting?", type=bool, defval=true) enter_fast = input(20, minval=1) exit_fast = input(10, minval=1) enter_slow = input(55, minval=1) exit_slow = input(20, minval=1) fastL = highest(enter_fast) fastLC = lowest(exit_fast) fastS = lowest(enter_fast) fastSC = highest(exit_fast) slowL = highest(enter_slow) slowLC = lowest(exit_slow) slowS = lowest(enter_slow) slowSC = highest(exit_slow) enterL1 = high > fastL[1] exitL1 = low <= fastLC[1] enterS1 = low < fastS[1] exitS1 = high >= fastSC[1] enterL2 = high > slowL[1] exitL2 = low <= slowLC[1] enterS2 = low < slowS[1] exitS2 = high >= slowSC[1] if testPeriod() strategy.entry("fast L", strategy.long, when = enterL1) if not enterL1 strategy.entry("slow L", strategy.long, when = enterL2) strategy.close("fast L", when = exitL1) strategy.close("slow L", when = exitL2) if shortingEnabled and testPeriod() strategy.entry("fast S", strategy.short, when = enterS1) if not enterS2 strategy.entry("slow S", strategy.short, when = enterS2) strategy.close("fast S", when = exitS1) strategy.close("slow S", when = exitS2)