Dynamische ATR-Strailing-Stop-Loss-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-11 14:24:18
Tags:

img

Übersicht

Diese Strategie basiert auf dem dynamischen Trailing Stop Loss-Mechanismus, der mit dem ATR-Indikator entwickelt wurde, um den Stop Loss in Echtzeit anzupassen und gleichzeitig einen effektiven Stop Loss zur Maximierung des Gewinns zu gewährleisten.

Strategie Logik

Die Strategie verwendet eine schnelle ATR-Periode 5 und eine langsame ATR-Periode 10, um einen dynamischen Trailing-Stop-Loss zu erstellen. Wenn der Preis in eine günstige Richtung geht, aktiviert die schnelle Schicht zuerst den Trailing-Stop, um den Stop-Loss zu verschärfen; wenn es einen kurzfristigen Pullback gibt, kann die langsame Schicht-Stop-Loss ein vorzeitiges Stop-Out vermeiden.

Insbesondere beträgt die Stop-Loss-Distanz der schnellen Schicht 0,5 Mal den 5-Perioden-ATR und die Stop-Loss-Distanz der langsamen Schicht 3 Mal den 10-Perioden-ATR. Ein Kaufsignal wird erzeugt, wenn die schnelle Schicht über die langsame Schicht bricht, und ein Verkaufssignal wird erzeugt, wenn die schnelle Schicht unter die langsame Schicht bricht. Die Stop-Loss-Linie wird auch in Echtzeit aktualisiert und unterhalb der Kurskurve gezeichnet.

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass sie die Stop-Loss-Position dynamisch anpassen kann, um Gewinne zu maximieren und gleichzeitig einen effektiven Stop-Loss zu gewährleisten.

Darüber hinaus balanciert das Dual-Layer-ATR-Design die Empfindlichkeit des Stop-Loss. Die schnelle Schicht reagiert schnell und die langsame Schicht kann kurzfristiges Rauschen filtern, um einen vorzeitigen Stop-Loss zu vermeiden.

Risikoanalyse

Das Hauptrisiko dieser Strategie liegt darin, ob die Einstellung der Stop-Loss-Distanz vernünftig ist. Wenn der ATR-Multiplikator zu hoch eingestellt ist, wird der Stop-Loss-Bereich nicht mit der Preisbewegung Schritt halten. Wenn der ATR-Multiplikator zu klein ist, ist er anfällig dafür, durch kurzfristige Geräusche gestoppt zu werden. Daher müssen die Parameter entsprechend den Eigenschaften der verschiedenen Sorten angepasst werden.

Darüber hinaus ist der ATR-Wert in einem Bereichsmarkt kleiner und die Stop-Loss-Linie näher, was leicht zu häufigen Stop-Loss führen kann.

Optimierungsrichtlinien

Es können verschiedene Kombinationen von ATR-Zyklusparametern ausprobiert werden, um das optimale Gleichgewicht zu finden. Es kann auch in Betracht gezogen werden, sie mit anderen Indikatoren, wie z. B. Trendindikatoren, zu kombinieren, um die Marktphase zu beurteilen, um die Größe des ATR-Multiplikators dynamisch anzupassen.

Es ist auch möglich, Alternativen zum ATR-Indikator zu untersuchen, wobei ein Ersatz von ATR durch DKVOL, HRANGE oder ATR-Prozentsatz usw. einen besseren Stop-Loss-Effekt erzielen kann.

Zusammenfassung

Diese Strategie entwirft einen zweischichtigen dynamischen Trailing-Mechanismus, der auf dem ATR-Indikator basiert, um Gewinne zu maximieren und gleichzeitig übermäßigen Stop-Loss zu vermeiden.


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

//@version=4
strategy("ATR Trailing Stop Strategy by ceyhun", overlay=true)

/////////notes////////////////////////////////////////
// This is based on the ATR trailing stop indicator //
// width addition of two levels of stops and        //
// different interpretation.                        //
// This is a fast-reacting system and is better     //
// suited for higher volatility markets             //
//////////////////////////////////////////////////////

SC = input(close, "Source", input.source)

// Fast Trail //
AP1 = input(5, "Fast ATR period", input.integer)  // ATR Period
AF1 = input(0.5, "Fast ATR multiplier", input.float)  // ATR Factor
SL1 = AF1 * atr(AP1)  // Stop Loss
Trail1 = 0.0
Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1)))

// Slow Trail //
AP2 = input(10, "Slow ATR period", input.integer)  // ATR Period
AF2 = input(3, "Slow ATR multiplier", input.float)  // ATR Factor
SL2 = AF2 * atr(AP2)  // Stop Loss
Trail2 = 0.0
Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0) and SC[1] < nz(Trail2[1], 0), min(nz(Trail2[1], 0), SC + SL2), iff(SC > nz(Trail2[1], 0), SC - SL2, SC + SL2)))

// Bar color for trade signal //
Green = Trail1 > Trail2 and close > Trail2 and low > Trail2
Blue = Trail1 > Trail2 and close > Trail2 and low < Trail2
Red = Trail2 > Trail1 and close < Trail2 and high < Trail2
Yellow = Trail2 > Trail1 and close < Trail2 and high > Trail2

// Signals //
Bull = barssince(Green) < barssince(Red)

Buy = crossover(Trail1, Trail2)
Sell = crossunder(Trail1, Trail2)

TS1 = plot(Trail1, "Fast Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.blue : color.yellow, linewidth=2, display=display.none)
TS2 = plot(Trail2, "Slow Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.green : color.red, linewidth=2)
fill(TS1, TS2, Bull ? color.new(color.green, 90) : color.new(color.red, 90))

plotcolor = input(true, "Paint color on chart", input.bool)

bcl = iff(plotcolor == 1, Blue ? color.blue : Green ? color.lime : Yellow ? color.yellow : Red ? color.red : color.white, na)
barcolor(bcl)

if Buy
    strategy.entry("Buy", strategy.long, comment="Buy")

if Sell
    strategy.close("Buy")


Mehr