Handelsstrategie zur Umkehrung von Volatilitätsbreakouts

Schriftsteller:ChaoZhang, Datum: 2024-02-19 15:12:44
Tags:

img

Übersicht

Die Volatility Breakout Reversal Trading Strategie ist eine Reversal Trading Strategie, die Preiskanäle mit adaptivem beweglichen Stop-Profit- und Stop-Loss-Punkten verfolgt.

Strategie Logik

Die Strategie verwendet zuerst den Wilders Average True Range (ATR) Indikator, um die Preisvolatilität zu messen. Es berechnet dann die Average Range Constant (ARC) basierend auf den ATR-Werten. Die ARC repräsentiert die Hälfte der Breite des Preiskanals. Als nächstes werden die oberen und unteren Bands des Kanals als Stop-Profit- und Stop-Loss-Punkte, auch SAR-Punkte genannt, berechnet. Wenn die Preise über das obere Band brechen, wird eine Short-Position eröffnet.

Speziell wird der ATR über die letzten N-Bars zuerst berechnet. Der ATR wird dann mit einem Faktor multipliziert, um den ARC zu erhalten, der die Breite des Preiskanals kontrolliert. Das Hinzufügen des ARC zum höchsten Schlusskurs über N-Bars ergibt das obere Band des Kanals oder den hohen SAR. Das Subtrahieren des ARC vom niedrigsten Schlusskurs ergibt das untere Band oder den niedrigen SAR. Wenn die Preise über das obere Band schließen, wird eine Short-Position eingenommen.

Vorteile

  1. Nutzt die Volatilität zur Berechnung von adaptiven Kanälen, die Marktveränderungen verfolgen
  2. Umkehrhandelsmarkt für Trendumkehr
  3. Verlagerung von Stop-Profit- und Stop-Loss-Sperren in Gewinne und Kontrolle des Risikos

Risiken

  1. Der Umkehrhandel ist anfällig für eine Gefangenschaft, die Parameter müssen richtig eingestellt werden.
  2. Scharfe Volatilitätsbewegungen können Positionen vorzeitig schließen
  3. Falsche Parameter können zu einem Überhandel führen

Lösungen:

  1. Optimierung der ATR-Periode und des ARC-Faktors für eine angemessene Kanalbreite
  2. Hinzufügen eines Trendfilters für Eingangssignale
  3. Verlängerung der ATR-Periode auf eine geringere Handelshäufigkeit

Möglichkeiten zur Verbesserung

  1. Optimierung der ATR-Periode und des ARC-Faktors
  2. Hinzufügen von Einstiegsbedingungen wie MACD
  3. Einbeziehung einer Stop-Loss-Strategie

Schlussfolgerung

Die Volatility Breakout Reversal Trading Strategy verwendet Kanäle, um Preisänderungen zu verfolgen und Positionen bei Volatilitätsspitzen umzukehren.


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


Mehr