Stratégie de négociation en cas de rupture de volatilité

Auteur:ChaoZhang est là., Date: le 19 février 2024
Les étiquettes:

img

Résumé

La Stratégie de négociation d'inversion de rupture de volatilité est une stratégie de négociation d'inversion qui suit les canaux de prix avec des points de stop profit et de stop loss mobiles adaptatifs.

La logique de la stratégie

La stratégie utilise d'abord l'indicateur Average True Range (ATR) de Wilder pour mesurer la volatilité des prix. Elle calcule ensuite la Average Range Constant (ARC) en fonction des valeurs ATR. L'ARC représente la moitié de la largeur du canal de prix. Ensuite, les bandes supérieures et inférieures du canal sont calculées comme les points de stop profit et stop loss, également appelés points SAR. Lorsque les prix dépassent la bande supérieure, une position courte est ouverte. Lorsque les prix dépassent la bande inférieure, une position longue est ouverte.

En particulier, l'ATR sur les dernières N barres est d'abord calculé. L'ATR est ensuite multiplié par un facteur pour obtenir l'ARC, qui contrôle la largeur du canal de prix. Ajouter l'ARC au prix de clôture le plus élevé sur N barres donne la bande supérieure du canal, ou le SAR élevé. Soustraire l'ARC du prix de clôture le plus bas donne la bande inférieure, ou le SAR bas. Si les prix se ferment au-dessus de la bande supérieure, une position courte est prise. Si les prix se ferment en dessous de la bande inférieure, une position longue est prise.

Les avantages

  1. Utilise la volatilité pour calculer les canaux adaptatifs qui suivent les changements du marché
  2. Les marchés de renversement de tendance
  3. Le risque de défaillance de l'établissement est calculé sur la base de l'évaluation de la valeur de l'entreprise.

Les risques

  1. Le trading de renversement est enclin à être piégé, les paramètres doivent être correctement réglés
  2. Les mouvements de volatilité aigus peuvent entraîner une fermeture prématurée des positions
  3. Des paramètres incorrects peuvent entraîner une survente

Les solutions:

  1. Optimiser la période ATR et le facteur ARC pour une largeur de canal raisonnable
  2. Ajouter un filtre de tendance pour les signaux d'entrée
  3. Augmentation de la période ATR pour réduire la fréquence des échanges

Des possibilités d'amélioration

  1. Optimiser la période ATR et le facteur ARC
  2. Ajouter des conditions d'entrée comme MACD
  3. Incorporer une stratégie de stop loss

Conclusion

La stratégie de trading de renversement de rupture de volatilité utilise des canaux pour suivre les changements de prix et inverser les positions lorsque la volatilité augmente. Elle fonctionne bien sur les marchés à plage avec des renversements, générant de bons rendements si les points de renversement sont identifiés avec précision.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@author=LucF

// Volatility System [LucF]
// v1.0, 2019.04.14

// The Volatility System was created by Welles Wilder.
// It first appeared in his seminal masterpiece "New Concepts in Technical Trading Systems" (1978).
// He describes it on pp.23-26, in the chapter discussing the first presentation ever of the "Volatility Index",
// which later became known as ATR.
// Performance of the strategy usually increases with the time frame.
// Tuning of ATR length and, especially, the ARC factor, is key.

// This code runs as a strategy, which cannot generate alerts.
// If you want to use the alerts it must be converted to an indicator.
// To do so:
//      1. Swap the following 2 lines by commenting the first and uncommenting the second.
//      2. Comment out the last 4 lines containing the strategy() calls.
//      3. Save.
strategy(title="Volatility System by Wilder [LucF]", shorttitle="Volatility System [Strat]", overlay=true, precision=8, pyramiding=0, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
// study("Volatility System by Wilder [LucF]", shorttitle="Volatility System", precision=8, overlay=true)

// -------------- Colors
MyGreenRaw = color(#00FF00,0),      MyGreenMedium = color(#00FF00,50),  MyGreenDark = color(#00FF00,75),    MyGreenDarkDark = color(#00FF00,92)
MyRedRaw = color(#FF0000,0),        MyRedMedium = color(#FF0000,30),    MyRedDark = color(#FF0000,75),      MyRedDarkDark = color(#FF0000,90)

// -------------- Inputs
LongsOnly = input(false,"Longs only")
ShortsOnly = input(false,"Shorts only")
AtrLength = input(9, "ATR length", minval=2)
ArcFactor = input(1.8, "ARC factor", minval=0, type=float,step=0.1)
ShowSAR = input(false, "Show all SARs (Stop & Reverse)")
HideSAR = input(false, "Hide all SARs")
ShowTriggers = input(false, "Show Entry/Exit triggers")
ShowTradedBackground = input(false, "Show Traded Background")

FromYear  = input(defval = 2000,    title = "From Year", minval = 1900)
FromMonth = input(defval = 1,      title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1,       title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999,    title = "To Year", minval = 1900)
ToMonth   = input(defval = 1,       title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1,       title = "To Day", minval = 1, maxval = 31)

// -------------- Date range filtering
FromDate = timestamp(FromYear, FromMonth, FromDay, 00, 00)
ToDate = timestamp(ToYear, ToMonth, ToDay, 23, 59)
TradeDateIsAllowed() => true

// -------------- Calculate Stop & Reverse (SAR) points using Average Range Constant (ARC)
Arc   = atr(AtrLength)*ArcFactor
SarLo = highest(close, AtrLength)-Arc
SarHi = lowest(close, AtrLength)+Arc

// -------------- Entries/Exits
InLong = false
InShort = false
EnterLong = TradeDateIsAllowed() and not InLong[1] and crossover(close, SarHi[1])
EnterShort = TradeDateIsAllowed() and not InShort[1] and crossunder(close, SarLo[1])
InLong := (InLong[1] and not EnterShort[1]) or (EnterLong[1] and not ShortsOnly)
InShort := (InShort[1] and not EnterLong[1]) or (EnterShort[1] and not LongsOnly)

// -------------- Plots
// SAR points
plot( not HideSAR and ((InShort or EnterLong) or ShowSAR)? SarHi:na, color=MyRedMedium, style=circles, linewidth=2, title="SAR High")
plot( not HideSAR and ((InLong or EnterShort) or ShowSAR)? SarLo:na, color=MyGreenMedium, style=circles, linewidth=2, title="SAR Low")
// Entry/Exit markers
plotshape( ShowTriggers and not ShortsOnly and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyGreenRaw, size=size.small, text="")
plotshape( ShowTriggers and not LongsOnly and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyRedRaw, size=size.small, text="")
// Exits when printing only longs or shorts
plotshape( ShowTriggers and ShortsOnly and InShort[1] and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyRedMedium, transp=70, size=size.small, text="")
plotshape( ShowTriggers and LongsOnly and InLong[1] and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyGreenMedium, transp=70, size=size.small, text="")
// Background
bgcolor( color=ShowTradedBackground? InLong and not ShortsOnly?MyGreenDarkDark: InShort and not LongsOnly? MyRedDarkDark:na:na)

// ---------- Alerts
alertcondition( EnterLong or EnterShort, title="1. Reverse", message="Reverse")
alertcondition( EnterLong, title="2. Long", message="Long")
alertcondition( EnterShort, title="3. Short", message="Short")

// ---------- Strategy reversals
strategy.entry("Long", strategy.long, when=EnterLong and not ShortsOnly)
strategy.entry("Short", strategy.short, when=EnterShort  and not LongsOnly)
strategy.close("Short", when=EnterLong and ShortsOnly)
strategy.close("Long", when=EnterShort and LongsOnly)


Plus de