Adaptive ATR-Trend-Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-31 15:58:46
Tags:

img

Übersicht

Diese Strategie ist eine Trend-Breakout-Strategie, die auf dem ATR-Indikator basiert. Seine Hauptidee ist es, Trend-Breakout-Trades zu machen, wenn der Preis ein bestimmtes Vielfaches von ATR übersteigt. Die Strategie umfasst auch Trendbestätigung und Begrenzung von Trades innerhalb von Datumsbereichen.

Grundsätze

Die Strategie verwendet den ATR-Indikator, um die Preisvolatilität zu messen. ATR steht für Average True Range und misst die durchschnittliche Volatilität über einen Zeitraum. Der Längeparameter in der Strategie berechnet die ATR-Periode und numATRs stellt den ATR-Multiplikator für den Ausbruch dar.

Wenn der Preis über das obere Multiple von ATR bricht, wird eine Long-Position eingenommen.

Darüber hinaus umfasst die Strategie Needlong- und Needshort-Bool-Variablen, um nur lange oder nur kurze Trades zu steuern.

Die Strategie verwendet eine Größenvariable zur Bestimmung der Positionsgröße und berechnet die Auftragsgröße anhand eines Prozentsatzes des Eigenkapitals des Kontos.

Vorteile

  • Verwendet ATR zur automatischen Anpassung an die Marktvolatilität ohne manuelle Gewinn-/Verlust-Einstellungen.

  • Flexible Auswahl von lang, kurz oder nur lang/kurz.

  • Kann Datumsbereiche festlegen, um bei wichtigen Ereignissen nicht zu handeln.

  • Flexible Positionsgröße basierend auf dem Eigenkapitalanteil.

Risiken und Lösungen

  • Der ATR berücksichtigt nur die Preisvolatilität. Es kann während großer Marktschwankungen nicht genügend Stop-Loss haben. Andere Indikatoren können kombiniert werden.

  • Die Datumsbereichsgrenzen können Chancen verpassen, wenn keine guten Einstellungen vor/nach vorgenommen werden.

  • Die Verteilung der Anteile in Prozent führt zu großen Verlusten bei Einzelgeschäften.

Optimierungsideen

  • Hinzufügen von gleitenden Durchschnitten für den Trendfilter zur Verringerung von falschen Breakout-Rauschen.

  • Test ATR-Perioden, um optimale Parameter zu finden.

  • Kombination mit anderen Strategien zur Nutzung der Stärken und Verbesserung der Stabilität.

Schlussfolgerung

Dies ist ein verständlicher Trend nach der Strategie mit ATR, um sich an die Volatilität anzupassen. Parameteroptimierung und Kombination mit anderen Strategien können die Leistung und Stabilität weiter verbessern.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Volty Strategy v1.0", shorttitle = "Volty 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
length = input(5)
numATRs = input(0.75)
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")

//Indicator
atrs = sma(tr, length) * numATRs

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if (not na(close[length])) and needlong
    strategy.entry("L", strategy.long, lot, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needlong == false
    strategy.entry("L", strategy.long, 0, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort
    strategy.entry("S", strategy.short, lot, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort == false
    strategy.entry("S", strategy.short, 0, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

Mehr