La stratégie de négociation adaptative de Turtle Breakout Drawdown

Auteur:ChaoZhang est là., Date: 2023-12-08 11:54:02 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est principalement basée sur le principe de rupture de tendance, combinée à la méthode de rupture de canal, en utilisant des rails doubles rapides et lents pour percer pour déterminer la direction de la tendance. La stratégie a une double protection des entrées de rupture et des sorties de retrait en même temps, ce qui peut gérer efficacement les changements soudains du marché. Le plus grand avantage de la stratégie est qu'elle peut surveiller le retrait du compte en temps réel. Lorsque le retrait dépasse un certain pourcentage, elle réduira activement la taille de la position. Cela permet à la stratégie de contrôler efficacement le risque de marché et la résistance au risque du compte.

La logique de la stratégie

  1. Les lignes rapides et lentes sont utilisées pour construire des canaux. La ligne rapide répond plus rapidement et la ligne lente est plus lisse.

  2. Les entrées de rupture: longues lorsque le prix franchit le canal ascendant et courtes lorsqu'il franchit le canal descendant.

  3. Sorties de tirage: Surveillance en temps réel du tirage maximal. Une fois le point de sortie de tirage atteint, il arrête activement les pertes pour fermer les positions. Le point de sortie de tirage peut être ajusté en fonction des conditions du marché.

  4. Taille de position adaptative: le nombre de positions est ajusté en temps réel en fonction du capital du compte afin d'éviter les risques de marché.

Les avantages

  1. Deux voies ferrées + entrées de rupture, jugement de tendance plus précis.

  2. Le mécanisme de stop-loss et de prise de profit contrôle efficacement les pertes uniques.

  3. Surveillance en temps réel de l'utilisation du compte et ajustement actif de la taille de la position pour réduire le risque de marché.

  4. La taille de la position est liée au capital de compte avec une forte résistance au risque pour faire face aux changements soudains du marché.

Les risques

  1. Le contrôle des retraits peut échouer sur les marchés volatils, ce qui entraîne des pertes plus importantes.

  2. Plusieurs signaux de percée peuvent se produire lorsque la ligne rapide entre dans la zone neutre.

  3. La ligne lente est trop lisse pour capturer les tendances d'inversion rapides dans le temps.

  4. Il existe un risque de blocage avec des positions longues et courtes mixtes.

Optimisation

  1. Définir une tolérance à la baisse plus élevée pour les marchés volatils afin d'éviter un stop-loss excessif.

  2. Ajoutez un filtre de zone neutre pour éviter les signaux non valides.

  3. Optimiser les paramètres du canal lent pour améliorer la vitesse de réponse aux marchés rapides.

  4. Ajouter des règles de tri des ordres d'ouverture pour éviter le verrouillage avec des positions bidirectionnelles.

Conclusion

Dans l'ensemble, il s'agit d'une stratégie efficace adaptée au trading de tendance à moyen et à long terme. Le plus grand avantage de la stratégie est la surveillance du retrait en temps réel et l'ajustement dynamique des positions. Cela permet à la stratégie d'ajuster automatiquement la taille de la position avec une forte adaptabilité au marché. Lorsqu'il y a un changement brusque du marché ou une fluctuation des prix, la stratégie peut automatiquement réduire la taille de la position pour empêcher efficacement la perte de s'étendre. C'est difficile pour de nombreuses stratégies traditionnelles. En général, l'idée de cette stratégie est innovante avec une forte praticité.


//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)


Plus de