Dies ist eine tägliche Intervall-Swing-Handelsstrategie, die auf Momentum-Techniken basiert, die ATR Stops verwenden.
Die Strategie ermittelt die Trendrichtung anhand von Dynamikindikatoren und legt auf der Grundlage von ATR Stop-Loss-Linien fest, um einen Low-Buy-High-Sell-Swing-Trading umzusetzen.
Der Code legt zuerst den Zeitrahmen für das Backtesting fest.
Im Abschnitt Indikatoren werden dann folgende Indikatoren berechnet:
Die Hauptlogik für die Beurteilung des Trends ist:
Wenn der Schluß höher als die vorherige nach unten gerichtete Stop-Loss-Linie ist, wird er als Aufwärtstrend beurteilt; wenn der Schluß niedriger als die vorherige nach oben gerichtete Stop-Loss-Linie ist, wird er als Abwärtstrend beurteilt.
Wenn sich der Trend ändert, passen Sie die Stop-Loss-Line-Position an.
Im Falle eines Aufwärtstrends wird die Stop-Loss-Linie auf den höchsten Preis des vorhergehenden Balkens abzüglich des ATR-Wertes festgelegt; im Fall eines Abwärtstrends wird die Stop-Loss-Linie auf den niedrigsten Preis des vorhergehenden Balkens plus den ATR-Wert festgelegt.
Dies zeigt den Trend nach dem Stop-Loss.
Im Abschnitt Handelsregeln eröffnen Sie Long/Short-Positionen, wenn der Preis die Stop-Loss-Linie überschreitet.
Die Vorteile dieser Strategie:
Es gibt auch einige Risiken:
Einige Optimierungen:
Einige Richtungen zur Optimierung dieser Strategie:
Verschiedene ATR-Parameter testen, um das Optimum zu finden, mehrere Parametermengen zurücktesten und das Rendite-Risiko-Verhältnis bewerten.
Optimieren Sie den Stop-Loss, indem Sie Volatilitätsmetriken zusätzlich zum ATR kombinieren.
Fügen Sie Trendfilter hinzu, um Trades während des unruhigen Marktes zu vermeiden. Fügen Sie Trendbeurteilungsindikatoren hinzu, handeln nur, wenn der Trend klar ist.
Adjustieren Sie die Positionsgröße basierend auf der Kontoauslastungsquote, aufeinanderfolgenden Stop-Loss-Zeiten usw.
Verluste vor Marktschließung aktiv zu reduzieren, um das Risiko einer Übernachtung zu vermeiden.
Als grundlegende tägliche Swing-Handelsstrategie ist die allgemeine Logik klar. Es beurteilt den Trend mit Impulstechniken und nutzt ATR für Trailing-Stop-Loss, um das Risiko effektiv zu kontrollieren.
Es gibt immer noch großen Raum für Optimierung, kann von Aspekten wie Trendbeurteilung, Stop-Loss-Methode, Position Größe usw. verbessern, um die Strategie praktischer zu machen.
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100) ///////////////////////////////////////////////////////////// //START - SET DATE RANGE // === BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1) FromDay = input(defval = 1, title = "From Day", minval = 1) FromYear = input(defval = 2010, title = "From Year") ToMonth = input(defval = 12, title = "To Month", minval = 1) ToDay = input(defval = 31, title = "To Day", minval = 1) ToYear = input(defval = 2020, title = "To Year") startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1) endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59) withinTimeRange = true ///////////////////////////////////////////////////////////// //END - SET DATE RANGE ///////////////////////////////////////////////////////////// //START - INDICATORS length = input(3) mult = input(1, minval = 0.01) atr_ = atr(length) max1 = max(nz(max_[1]), close) min1 = min(nz(min_[1]), close) is_uptrend_prev = nz(is_uptrend[1], true) stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_ vstop_prev = nz(vstop[1]) vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop) is_uptrend = close - vstop1 >= 0 is_trend_changed = is_uptrend != is_uptrend_prev max_ = is_trend_changed ? close : max1 min_ = is_trend_changed ? close : min1 vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1 plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2) ///////////////////////////////////////////////////////////// //END - INDICATORS ///////////////////////////////////////////////////////////// //START - TRADING RULES direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1) strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long)) condition1 = close > vstop and withinTimeRange condition2 = close < vstop and withinTimeRange strategy.entry("BUY", strategy.long, when = condition1) strategy.entry("SELL", strategy.short, when = condition2) ///////////////////////////////////////////////////////////// //END - TRADING RULES