
Die Strategie ist eine Trend-Tracking-Stopp-Strategie, die auf der Preisvolatilität basiert. Sie verwendet die durchschnittliche reale Schwankungsbreite (ATR) um eine Stop-Line für die Preisschwankungen zu setzen. Die ATR spiegelt die Volatilität und das Risiko der Preise wider.
Die Strategie berechnet zunächst die durchschnittliche reale Bandbreite der ATR innerhalb eines bestimmten Zeitraums. Dann wird die Stop-Line auf die aktuelle Höchstpreis minus n-fache ATR festgelegt, wenn es sich um einen Aufwärtstrend handelt. Wenn es sich um einen Abwärtstrend handelt, wird die Stop-Line auf die aktuelle niedrigste Preis plus n-fache ATR gesetzt.
Wenn der Preis die Stop-Line des Aufwärtstrends überschreitet oder die Stop-Line des Abwärtstrends durchbricht, wird festgestellt, dass ein Trendwechsel stattfindet. Die Strategie löscht die Stop-Losses und setzt eine neue Stop-Loss-Line entsprechend der neuen Trendrichtung.
Insgesamt hat die Strategie die Fähigkeit, Trendwechsel präzise zu beurteilen, indem sie die Preisschwankungen nutzt, um eine Stop-Loss-Linie einzurichten. Wenn sich der Trend ändert, kann die Strategie die neue Trendrichtung erfassen.
Die Strategie ist insgesamt eine bessere Algorithmierung, die eine Stop-Line auf Basis von Preisschwankungen setzt. Sie beurteilt die Preisentwicklung mit hoher Genauigkeit und kann die wichtigen Trendwendepunkte erfassen. Sie bietet auch einen gewissen Spielraum für Anpassungen und ist anpassungsfähig. Als Stop-Loss-Strategie kann sie das Risiko einer Trendwende effektiv umgehen und ist es wert, in der Realität angewendet zu werden.
/*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)