Dies ist eine Trend-Tracking-Stop-Loss-Strategie, die auf der Preisvolatilität basiert. Sie verwendet den Durchschnittlichen Wahren Bereich (ATR) zur Festlegung von Stop-Loss-Linien für Preisschwankungen. ATR spiegelt die Volatilität und das Risikoniveau der Preise wider. Wenn der Preis die Stop-Loss-Linie überschreitet, beurteilt die Strategie die Trendumkehr und ergreift entsprechende Maßnahmen zur Eröffnung von Positionen oder Stop-Loss.
Die Strategie berechnet zunächst den durchschnittlichen wahren Bereich (ATR) über einen bestimmten Zeitraum. Dann basierend auf der aktuellen Kurstrendrichtung, wenn es sich um einen Aufwärtstrend handelt, wird die Stop-Loss-Linie auf den aktuellen höchsten Preis minus n mal den ATR gesetzt; wenn es sich um einen Abwärtstrend handelt, wird die Stop-Loss-Linie auf den aktuellen niedrigsten Preis plus n mal den ATR gesetzt. Der n-Wert kann durch Parameter angepasst werden, um den Abstand zwischen der Stop-Loss-Linie und dem Preis zu steuern.
Wenn der Preis die Stop-Loss-Linie des Aufwärtstrends oder des Abwärtstrends durchbricht, wird der Trend als geändert angesehen. Zu diesem Zeitpunkt löscht die Strategie Positionen für Stop-Loss und setzt eine neue Stop-Loss-Linie basierend auf der Richtung des neuen Trends.
Zusammenfassend lässt sich sagen, dass die Strategie die Preisvolatilität nutzt, um Stop-Loss-Linien festzulegen, um eine genaue Beurteilung von Trendänderungen zu erzielen.
Im Allgemeinen ist dies eine gute Algorithmenimplementierung für die Festlegung von Stop-Loss-Linien basierend auf der Preisvolatilität. Seine Genauigkeit bei der Beurteilung von Preistrends ist hoch und kann wichtige Wendepunkte von Trends erfassen. Es bietet auch einen gewissen Raum für Parameter-Tuning für eine bessere Anpassungsfähigkeit. Als Stop-Loss-Strategie kann es Risiken von Marktumkehrungen effektiv vermeiden und ist im Live-Handel anzuwenden.
/*backtest start: 2022-11-30 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h 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/ // © laptevmaxim92 //@version=4 strategy("Volatility stop strategy", overlay=true) length = input(20) mult = input(2, step = 0.1) utp = input(false, "Use take profit?") pr = input(100, "Take profit pips") usl = input(false, "Use stop loss?") sl = input(100, "Stop loss pips") fromday = input(01, defval=01, minval=01, maxval=31, title="From Day") frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month") fromyear = input(2000, minval=1900, maxval=2100, title="From Year") today = input(31, defval=01, minval=01, maxval=31, title="To Day") tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month") toyear = input(2039, minval=1900, maxval=2100, title="To Year") use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)) atr_ = atr(length) max_ = 0.0 min_ = 0.0 max1 = 0.0 max1 := max(nz(max_[1]), close) min1 = 0.0 min1 := min(nz(min_[1]), close) vstop = 0.0 is_uptrend = false is_uptrend_prev = false 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 ? color.green : color.red, linewidth=2) longCondition = is_uptrend if (longCondition and use_date) strategy.entry("BUY", strategy.long) shortCondition = not is_uptrend if (shortCondition and use_date) strategy.entry("SELL", strategy.short) if (utp and not usl) strategy.exit("TP", "BUY", profit = pr) strategy.exit("TP", "SELL", profit = pr) if (usl and not utp) strategy.exit("SL", "BUY", loss = sl) strategy.exit("SL", "SELL", loss = sl) if (usl and utp) strategy.exit("TP/SL", "BUY", loss = sl, profit = pr) strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)