Stratégie de trading adaptative de retracement de cassure de tortue


Date de création: 2023-12-08 11:54:02 Dernière modification: 2023-12-08 11:54:02
Copier: 0 Nombre de clics: 732
1
Suivre
1621
Abonnés

Stratégie de trading adaptative de retracement de cassure de tortue

Aperçu

La stratégie est basée sur le principe de la rupture de tendance, combinée à la méthode de la rupture de la voie, en utilisant la rupture de la voie rapide et la rupture de la voie lente pour juger de la direction de la tendance. La stratégie possède à la fois des entrées de rupture et des sorties de rétractation.

Principe de stratégie

  1. Les lignes rapides et lentes sont utilisées pour construire des canaux. Les lignes rapides répondent plus rapidement et les lignes lentes sont plus lisses.

  2. Les entrées de rupture: les entrées de rupture sont les entrées de rupture qui sont plus importantes que les entrées de rupture.

  3. Retraite exits: surveillance en temps réel des retraites maximales. Une fois atteint le point de sortie de la retraite, il arrête activement la perte d’équilibre. Le point de sortie de la retraite peut être ajusté en fonction des conditions du marché.

  4. Adaptation de la taille des positions: le nombre de positions est ajusté en temps réel en fonction des intérêts du compte, pour éviter les risques du marché. Plus le retrait du compte est important, moins il y a de positions.

Avantages stratégiques

  1. Les deux voies + les entrées de rupture permettent d’évaluer plus précisément les tendances.

  2. Le mécanisme d’arrêt des pertes, qui permet de contrôler efficacement les pertes individuelles.

  3. Il est possible de surveiller en temps réel les retraits de comptes, d’ajuster activement la taille des positions et de réduire les risques de marché.

  4. La taille de la position est liée aux intérêts du compte, la résistance au risque est forte et peut faire face aux changements de marché.

Risque stratégique

  1. En cas de secousse majeure, les contrôles de retrait peuvent être inefficaces, entraînant une augmentation des pertes.

  2. Il peut y avoir plusieurs signaux de rupture inefficaces lorsque la ligne rapide pénètre dans la zone neutre.

  3. La ligne de vitesse est trop lisse pour capter rapidement les retournements.

  4. Il existe un risque d’enfermement dans les deux sens lors d’une utilisation mixte à plusieurs emplacements.

Orientation de l’optimisation de la stratégie

  1. Il est possible de définir une tolérance de rétractation plus élevée pour les secousses majeures, afin d’éviter les pertes excessives.

  2. Augmentation du filtrage de la zone neutre afin d’éviter que le signal de la zone neutre ne soit invalide.

  3. Optimisation des paramètres des voies lentes pour une plus grande réactivité aux événements rapides.

  4. Ajout d’une règle de tri des entrepôts, pour éviter la double détention.

Résumer

Cette stratégie est une stratégie efficace pour le trading de tendances à long et moyen terme. Son plus grand avantage réside dans la surveillance des retraits en temps réel et l’ajustement dynamique des positions. Cela permet à la stratégie de régler automatiquement la taille de la position et d’avoir une forte capacité d’adaptation au marché.

Code source de la stratégie
//Noro
//2020

//Original idea from «Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders» (2007, CURTIS FAITH, ISBN: 9780071486644) 

//@version=4
strategy("Noro's Turtles Strategy", shorttitle = "Turtles str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong = input(true, title = "Long")
needshort = input(false, title = "Short")
sizelong = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot long, %")
sizeshort = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot short, %")
needfast = input(true, title = "Fast")
needslow = input(true, title = "Slow")
enter_fast = input(20, minval=1)
exit_fast = input(10, minval=1)
enter_slow = input(55, minval=1)
exit_slow = input(20, minval=1)
showof = input(true, title = "Show offset")
showll = input(false, title = "Show lines")
showlabel = input(true, defval = true, title = "Show label")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast
fastL = highest(enter_fast)
fastLC = lowest(exit_fast)
fastS = lowest(enter_fast)
fastSC = highest(exit_fast)

//Slow
slowL = highest(enter_slow)
slowLC = lowest(exit_slow)
slowS = lowest(enter_slow)
slowSC = highest(exit_slow)

//Lines
offset = showof ? 1 : 0
col1 = showll and needlong and needfast ? color.blue : na
col2 = showll and needshort and needfast ? color.red : na
col3 = showll and needlong and needslow ? color.blue : na
col4 = showll and needshort and needslow ? color.red : na
plot(fastL, color = col1, offset = offset)
plot(fastLC, color = col1, offset = offset)
plot(fastS, color = col2, offset = offset)
plot(fastSC, color = col2, offset = offset)
plot(slowL, color = col3, offset = offset)
plot(slowLC, color = col3, offset = offset)
plot(slowS, color = col4, offset = offset)
plot(slowSC, color = col4, offset = offset)

//Orders
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
size = strategy.position_size
lotlong = 0.0
lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1]
lotshort = 0.0
lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1]

//Fast
strategy.entry("fast L", strategy.long, lotlong, stop = fastL, when = needfast and needlong and strategy.position_size == 0 and truetime)
strategy.entry("fast S", strategy.short, lotshort, stop = fastS, when = needfast and needshort and strategy.position_size == 0 and truetime)
strategy.exit("fast L", stop = fastLC, when = needfast and needlong and strategy.position_size > 0)
strategy.exit("fast S", stop = fastSC, when = needfast and needshort and strategy.position_size < 0)

//Slow
strategy.entry("slow L", strategy.long, lotlong, stop = slowL, when = needslow and needlong and strategy.position_size == 0 and truetime)
strategy.entry("slow S", strategy.short, lotshort, stop = slowS, when = needslow and needshort and strategy.position_size == 0 and truetime)
strategy.exit("slow L", stop = slowLC, when = needslow and needlong and strategy.position_size > 0)
strategy.exit("slow S", stop = slowSC, when = needslow and needshort and strategy.position_size < 0)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("fast L")
    strategy.cancel("fast S")
    strategy.cancel("slow L")
    strategy.cancel("slow S")
    
if showlabel

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)