Momentum-Breakout-Strategie mit Volatilitätsstop

Schriftsteller:ChaoZhang, Datum: 2023-11-13 17:20:51
Tags:

img

Übersicht

Es handelt sich um eine Trend-Following-Strategie, die auf einem Ausbruch und einem Volatilitätsstop basiert. Die Strategie identifiziert die Trendrichtung durch Preisbruch der dynamischen Stop-Loss-Linie. Sie tritt in den Handel, wenn der Preis die Stop-Loss-Linie durchdringt und die Stop-Loss-Linie verwendet, um Trends zu verfolgen und Gewinne zu erzielen. Die Strategie zielt darauf ab, mittelfristige Trends zu erfassen und gleichzeitig das Risiko mit dynamischen Stops zu kontrollieren.

Strategie Logik

Die Strategie verwendet den Volatility Stop Indikator, um die Trendrichtung und den Stop Loss zu bestimmen.

  1. Berechnung des ATR (Average True Range) des Preises
  2. Erhalten Sie die Stop-Loss-Linie, indem Sie ATR mit einem Stop-Loss-Koeffizienten multiplizieren
  3. Wenn der Preis steigt, Rekordhöchster Preis, Stop-Loss-Linie ist der höchste Preis minus ATR * Koeffizienten
  4. Wenn der Preis sinkt, registrieren Sie den niedrigsten Preis, Stop-Loss-Linie ist der niedrigste Preis plus ATR * Koeffizienten

Die Stop-Loss-Linie schwankt mit dem Preis nach oben und unten und bildet einen dynamischen Kanal.

Wenn der Preis die Stop-Loss-Linie durchdringt, signalisiert er eine Trendumkehr.

  • Wenn der Preis über die Stop-Loss-Linie bricht, gehen Sie lang
  • Wenn der Preis unter die Stop-Loss-Linie bricht, gehen Sie kurz

Nach der Eröffnung der Position verfolgt die Strategie den Stop-Loss mit der Linie:

  • Für lange, Stop-Loss ist der höchste Preis abzüglich ATR * Koeffizienten
  • Kurz gesagt, Stop-Loss ist der niedrigste Preis plus ATR * Koeffizient

Wenn der Preis die Stop-Loss-Linie wieder erreicht, wird die Position geschlossen.

Auf diese Weise kann die Strategie Trends rechtzeitig verfolgen und gleichzeitig das Risiko durch Stopps kontrollieren.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Kann Trendumkehrungen rechtzeitig erfassen und dem Trend folgen
  2. Verwendet dynamischen Stop-Loss, um die Stop-Position anhand der Marktvolatilität anzupassen
  3. Stopp-Loss-Aktualisierungen mit dem Trend, maximale Gewinne zu erzielen
  4. Reitet den Trend, um erhebliche Gewinne zu erzielen
  5. Wirksam kontrolliert das Risiko und vermeidet große Verluste

Risikoanalyse

Es gibt auch einige Risiken, die zu berücksichtigen sind:

  1. Der Stopp-Loss kann häufig während von Rangiermärkten ausgelöst werden.
  2. Notwendigkeit, den richtigen Stop-Loss-Koeffizienten zu setzen, zu klein kann zu empfindlich sein
  3. Handelsgebühren können bei häufigem Handel die Gewinne verbrauchen
  4. Einige Gewinne können in einem frühen Stadium der Trends verpasst werden
  5. Risiko, wenn der Stop-Loss zu weit vom Preis entfernt ist

Lösungen:

  1. Optimieren Sie den Stop-Loss-Koeffizienten durch Backtest, um den besten Parameter zu finden
  2. Verwenden Sie längere Zeitrahmen, um die Handelsfrequenz zu senken
  3. Filter hinzufügen, um Überhandelungen zu vermeiden
  4. Einige Flexibilität bei der Stoppdistanz, aber nicht zu groß

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Optimieren Sie den Stop-Loss-Koeffizienten, um die beste Parameterkombination zu finden
  2. Fügen Sie Filter hinzu, um Whipsaws im Markt zu vermeiden
  3. Kombination mehrerer Zeitrahmen für die Signalüberprüfung
  4. Optimierung der Positionsgröße, allmähliche Erhöhung der Größe
  5. Überlegen Sie eine dynamische Anpassung des Zeitrahmens
  6. Kombination mit den Aktienfundamentalen, um die wichtigsten Trends zu erfassen

Zusammenfassung

Insgesamt ist diese Momentum-Breakout-Strategie mit Volatilitäts-Stop ein sehr praktisches Trendfolgensystem. Sie kann Trendumkehrmöglichkeiten erfassen und dem Trend folgen, während sie das Risiko effektiv mit dynamischen Stops kontrolliert. Mit angemessener Parameter-Ausrichtung kann sie eine gute Rendite während der Trendmärkte erzielen. Aber einige Probleme müssen angegangen werden, wie überempfindliche Stops, hohe Handelsfrequenz usw. Weitere Optimierungen können es zu einer effizienten und robusten Quant-Trading-Strategie machen.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=4
strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h
// Best time frame 2H

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


//Entry 


strategy.entry(id="long", long = true, when = crossover(close, vStop) and window())

//Exit
strategy.close("long", when = crossunder(close, vStop))

plot(vStop,"Vstop", color.black, linewidth=2)


Mehr