
Es ist eine sehr einfache Strategie. Es besteht nur aus einem Tracking-Stop. Wenn der Stop ausgelöst wird, wird der Kurs umgedreht und ein Tracking-Stop auf die neue Position gesetzt.
Die Strategie basiert auf einem von drei Stop-Typen: Prozentsatzstop, ATR-Stop und Absolute Stop. Wenn ein Stop-Loss ausgelöst wird, werden die Positionen umgedreht und ein Tracking-Stop für die neuen Positionen gesetzt.
Konkret berechnet die Strategie zunächst den Stop-Loss-Wert nach dem gewählten Stop-Typ. Dann beurteilt sie, ob ein Positionssignal vorliegt, d. h. ob ein Höchstwert größer als der vorherige Stop-Preis ist und ein Tiefwert kleiner als der vorherige Stop-Preis ist.
Der größte Vorteil dieser Strategie besteht darin, dass sie sehr einfach ist, nur ein Stop-Loss zu verfolgen und keine Eintritts- und Ausstiegsoptionen zu berücksichtigen. Die flexible Einstellung der Stop-Loss-Werte macht sie auch für eine breite Palette von Anwendungen geeignet.
Im Gegensatz zu festen Stop-Losses, kann es Tracking-Stops verwenden, um größere Gewinne zu erzielen, und reduziert die Wahrscheinlichkeit, dass ein Stop-Loss getroffen wird. Nach jedem Stop-Trigger können Positionen umgedreht werden, um eine Preisumkehr zu erfassen.
Die Hauptrisiken, die mit dieser Strategie verbunden sein können, sind die Risiken, die durch eine unsachgemäße Einstellung des Stop-Loss-Preises entstehen. Eine zu hohe Einstellung des Stop-Loss-Wertes kann zu einer Vergrößerung der Verluste führen. Eine zu kleine Einstellung des Stop-Loss-Wertes kann dazu führen, dass der Stop-Loss häufig ausgelöst wird.
Ein weiteres Risiko besteht darin, dass die Richtung der Umkehrposition nach dem Auslösen des Stop-Losses ungenau beurteilt wird, wodurch die Gelegenheit für eine Preisumkehr verpasst wird oder die Verluste erhöht werden. Dies erfordert eine Kombination von Trend- und Unterstützungsresistenzurteilen, um den optimalen Zeitpunkt für eine Umkehr zu bestimmen.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Die Strategie profitiert durch eine einfache Tracking-Stopp-Strategie, eine für Anfänger geeignete Quantifizierungsstrategie. Verglichen mit herkömmlichen Stop-Loss-Strategien, erhöht sie die Mechanismen, die nach dem Stop-Loss-Trigger die Positionen rückgängig machen, um so zusätzliche Gewinne zu erzielen. Durch ständige Tests und Optimierungen kann die Strategie zu einem sehr praktischen Quantifizierungsprogramm werden.
/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Trailing SL Strategy [QuantNomad]", shorttitle = "TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50)
////////////
// Inputs //
sl_type = input("%", options = ["%", "ATR", "Absolute"])
sl_perc = input(4, title = "% SL", type = input.float)
atr_length = input(10, title = "ATR Length")
atr_mult = input(2, title = "ATR Mult", type = input.float)
sl_absol = input(10, title = "Absolute SL", type = input.float)
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2016, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
//////////////////
// CALCULATIONS //
// SL values
sl_val = sl_type == "ATR" ? atr_mult * atr(atr_length) :
sl_type == "Absolute" ? sl_absol :
close * sl_perc / 100
// Init Variables
pos = 0
trailing_sl = 0.0
// Signals
long_signal = nz(pos[1]) != 1 and high > nz(trailing_sl[1])
short_signal = nz(pos[1]) != -1 and low < nz(trailing_sl[1])
// Calculate SL
trailing_sl := short_signal ? high + sl_val :
long_signal ? low - sl_val :
nz(pos[1]) == 1 ? max(low - sl_val, nz(trailing_sl[1])) :
nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) :
nz(trailing_sl[1])
// Position var
pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1])
//////////////
// PLOTINGS //
plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red)
//////////////
// STRATEGY //
if (time_cond and pos != 1)
strategy.entry("long", true, stop = trailing_sl)
if (time_cond and pos != -1)
strategy.entry("short", false, stop = trailing_sl)