Stratégie de rupture avec le drapeau taureau

Auteur:ChaoZhang est là., Date: 2024-02-22 16:41:04 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de rupture du drapeau taureau est une stratégie d'analyse technique qui identifie les modèles du graphique du drapeau taureau et entre au point de rupture, dans le but de capturer le début d'une tendance.

La logique de la stratégie

Les principales étapes de cette stratégie sont les suivantes:

  1. Déterminez le mât de drapeau: nécessite un nouveau prix élevé et une rupture du canal ATR.
  2. Déterminer la hauteur du poteau: mesurer la distance entre le sommet du poteau et la SMA précédente.
  3. Déterminer la portée du drapeau: le fond du drapeau est de 33% de la hauteur du mât comme portée minimale.
  4. Identifier le schéma du drapeau: juger si les trois dernières barres sont toutes à portée du drapeau.
  5. Entrée: aller long lorsque le motif de drapeau apparaît.
  6. Sortie: position fermée après fixation de 6 barres.

Lors du jugement du mât et du drapeau, la stratégie utilise intelligemment l'indicateur ATR pour déterminer les ruptures significatives et limite strictement la hauteur du drapeau à 33% de la hauteur du mât pour éviter des faux signaux excessifs.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. L'utilisation de modèles de drapeau pour déterminer les débuts de tendance est une méthode d'analyse technique classique avec un taux de réussite élevé.
  2. L'ATR et les limites de portée strictes évitent de nombreux faux signaux et améliorent la précision d'entrée.
  3. Fixé des verrous de sortie de 6 bar dans certains bénéfices et évite les risques d'inversion.
  4. Des règles claires, faciles à mettre en œuvre, à comprendre et à suivre.
  5. Peut trouver des opportunités dans différentes conditions de marché, flexible.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. Les drapeaux ne peuvent pas déterminer pleinement les tendances, les défaillances existent toujours.
  2. La sortie de 6 bar peut être prématurée et la sortie trop tôt.
  3. Les marchés agités peuvent facilement produire des faux drapeaux.
  4. Impossible de contrôler efficacement le montant de la perte unique.

Pour faire face aux risques ci-dessus, nous pouvons définir des stop-loss, optimiser les mécanismes de sortie pour verrouiller les bénéfices en atteignant un certain ratio de profit.

Directions d'optimisation

Quelques orientations pour optimiser la stratégie:

  1. Combinez des indicateurs comme MACD, KD pour éviter de faux signaux dans les marchés instables.
  2. Paramétrer le multiplicateur ATR, la période de sortie basée sur le régime du marché pour améliorer l'adaptabilité.
  3. Pour les sorties dynamiques, définir un stop-loss ou considérer le taux de récupération des bénéfices.
  4. Essayez des approches d'apprentissage automatique pour trouver de meilleures caractéristiques pour déterminer la hauteur du drapeau.
  5. Évaluez le taux de gain réel et le taux de profit, ajustez dynamiquement la taille des positions.

Conclusion

En conclusion, la stratégie de rupture de drapeau taureau utilise un modèle technique pour déterminer les débuts de tendance, une méthode plutôt classique, et les règles d'entrée sont en effet rigoureusement conçues pour filtrer de nombreux faux signaux.


/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © smith26
//This strategy enters on a bull flag and closes position 6 bars later.  Average true range is used instead of a moving average.
//The reason for ATR instead of MA is because with volatile securities, the flagpole must stand up a noticable "distance" above the trading range---which you can't determine with a MA alone.
//This is broken up into multiple parts: Defining a flagpole, defining the pole height, and defining the flag, which will be constrained to the top third (33%) of the pole height to be considered a flag.
//@version=4
strategy("Bull Flag v1.00", overlay=true)

ATR = atr(10) //Average True Range over last 10 bars.

upperATR = ohlc4[1] + ATR[1]  //Open + High + Low + Close divided by 4, + prior ATR.  Just used here for visually plotting the ATR upper channel.
lowerATR = ohlc4[1] - ATR[1] //Open + High + Low + Close divided by 4, - prior ATR.  Just used here for visually plotting the ATR lower channel.

//uncomment these two lines to see ATR channels
plot(upperATR, color=color.orange)
plot (lowerATR, color=color.orange)

//Current close higher than previous close, and current close minus current open is greater than 3 times the previous ATR.  "3x ATR" is chosen because any less was not a noticeable distance above the trading range.
flagpole1 = close>close[1] and (close-open) > (ATR[1] * 3)
plotshape(flagpole1, text="flagpole1", style=shape.arrowdown, size=size.huge) //Plots an arrow for flagpole1 for QA testing

//Two consecutive close higer than their previous close, and current close minus PREVIOUS open is greater than 3 times the previous ATR.
flagpole2 = close>close[1] and close[1]>close[2] and (close-open[1]) > (ATR[1] * 3)
plotshape(flagpole2, text="flagpole2", style=shape.arrowdown, size=size.huge, color=color.yellow) //Plots an arrow for flagpole2 for QA testing

//Three consecutive close higer than their previous close, and current close minus open from 2 bars ago is greater than 3 times the previous ATR.
flagpole3 = close>close[1] and close[1]>close[2] and close[2]>close[3] and (close-open[2]) > (ATR[1] * 3)
plotshape(flagpole3, text="flagpole3", style=shape.arrowdown, size=size.huge, color=color.white) //Plots an arrow for flagpole3 for QA testing

//A flagpole can be any of the three definitions of flagpole.
flagpole = flagpole1 or flagpole2 or flagpole3

//This will return the number of bars since "flagpole" was true.  Not being used, but could be useful.
//since_flagpole = barssince(flagpole)

after_pole_1 = flagpole[1] //This marks the bar directly after a flagpole.  
//plotshape(after_pole_1, text="after_pole_1", style=shape.cross, size=size.large, color=color.white) //Plots a cross for after_pole_1 for QA testing
after_pole_2 = flagpole[2] //This marks the bar two bars after a flagpole.  
after_pole_3 = flagpole[3] //This marks the bar three bars after a flagpole.  

//This returns the price at the "top" of the flagpole (using close price) at the most recent occurence, 0.
pole_top = valuewhen(flagpole, close, 0)
//plot(pole_top, trackprice=true)  //plots a horizontal line at the most recent pole_top

//Measures the distance between last pole top and the previous SMA.
pole_height = pole_top - sma(close, 10)[1] 
//plot(pole_height)

//This marks 33% below the pole_top, which will be the lowest point a flag can be.
flag_bottom = pole_top - (.33 * pole_height)
//plot(flag_bottom)

//The first, second, and third bars after the pole are considered part of a flag when open and close are between the pole_top and flag_bottom
flag1 = after_pole_1 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag1, text="flag1", style=shape.flag, size=size.large, color=color.teal)
flag2 = after_pole_2 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag2, text="flag2", style=shape.flag, size=size.large, color=color.teal)
flag3 = after_pole_3 and (open >= flag_bottom) and (open <= pole_top) and (close >= flag_bottom) and (close <= pole_top)
//plotshape(flag3, text="flag3", style=shape.flag, size=size.large, color=color.teal)

//When all three bars after a flagpole are a flag, the criteria are met and we have a "bull_flag"
//Specifically, when current bar is flag3, previous bar is flag2, and 2 bars ago is flag1, we have a bull_flag.
bull_flag = flag3 and flag2[1] and flag1[2]
plotshape(bull_flag, text="bull_flag", style=shape.flag, size=size.large, color=color.white) //Plots a flag for bull_flag for QA testing


if (bull_flag)
    strategy.entry("Long", strategy.long)

if barssince(bull_flag) == 6 //close 6 bars after entry.
    strategy.close("Long")

Plus de