Adaptive Stop-Trailing-Strategie


Erstellungsdatum: 2023-10-08 15:06:28 zuletzt geändert: 2023-10-08 15:06:28
Kopie: 0 Klicks: 771
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie realisiert hauptsächlich einen anpassungsfähigen Stop-Mechanismus, der die Stop-Position automatisch an die Preisschwankungen anpasst, um bessere Stop-Effekte zu erzielen. Die Strategie berechnet einen angemessenen Stop-Range mit dem ATR-Indikator und erzeugt in Kombination mit der EMA-Gleichgewichtung ein Handelssignal, das bei einem Durchbruch der EMA-Gleichgewichtung eine zusätzliche Leerstellung erzeugt und gleichzeitig die Stop-Position mit einem anpassungsfähigen Stop-Algorithmus verfolgt.

Strategieprinzip

  1. Berechnen Sie den ATR-Indikator und setzen Sie den ATR-Wert mit dem Parameter a als Stop-Loss-Bereich nLoss.
  2. Berechnen Sie die EMA.
  3. Wenn der Preis über der EMA-Gleichung liegt, machen Sie mehr, wenn er unter der EMA-Gleichung liegt, machen Sie weniger.
  4. Der TrailingStop passt die Stop-Position xATRTrailingStop automatisch an, indem er einen Adaptive Stop-Algorithmus verwendet, der wie folgt funktioniert:
    • Wenn der Preis die Stop-Loss-Grenze nach oben überschreitet, wird der Stop-Loss-Grenze auf den Preis minus die Stop-Loss-Grenze nLoss geändert.
    • Wenn der Preis die Stop-Loss-Grenze nach unten überschreitet, wird der Stop-Loss auf den Preis plus die Stop-Loss-Grenze nLoss angelegt.
    • In anderen Fällen bleibt der Stop-Loss unverändert.
  5. Der Kurs wird aufgelöst, wenn der Stop-Loss ausgelöst wird.

Analyse der Stärken

  1. Es wurde ein selbst adaptierbarer Stop-Loss-Mechanismus implementiert, der die Stop-Loss-Grenze automatisch an die Marktschwankungen anpasst, um das Risiko effektiv zu kontrollieren.
  2. Vermeiden Sie zu große oder zu kleine Stop-Losses, indem Sie einen angemessenen Stop-Loss-Bereich in Verbindung mit dem ATR-Indikator berechnen.
  3. Die Verwendung von EMAs zur Erzeugung von Handelssignalen kann dazu beitragen, unnötige Geschäfte zu reduzieren und Marktlärm zu filtern.
  4. Die Strategie ist einfach und klar, der Code ist leicht zu verstehen, zu überprüfen und zu optimieren.
  5. Die Eingabeparameter können an unterschiedliche Marktbedingungen angepasst werden.

Risiken und Verbesserung

  1. Die EMA-Gleichlinie erzeugt möglicherweise verspätete Handelssignale, die zu einem späten Eintritt führen. Es kann in Erwägung gezogen werden, andere Indikatoren zu verwenden, um eine frühe Eintritt zu beurteilen.
  2. Die Dauer der Haltung ist unsicher und die Größe des Einzelschutzes kann nicht kontrolliert werden. Es kann ein Zielgewinn oder eine maximale Haltedauer festgelegt werden, um zu große Verluste zu vermeiden.
  3. In stark trendigen Märkten können Stop-Losses zu häufig ausgelöst werden. Es kann in Betracht gezogen werden, die Parameter an die Trendsituation anzupassen oder Filterbedingungen hinzuzufügen.
  4. Die Parameter, wie ATR-Zyklus, Stop-Loss-Multiplikator usw., sollten je nach Sorte angepasst werden.

Optimierungsrichtung

  1. Es kann in Erwägung gezogen werden, Trend-Anzeige-Indikatoren zu verwenden, um in Richtung der Tendenz zu handeln und um Gegenwärtiges zu vermeiden.
  2. Die Stop-Loss-Multiplier können an die Größe der Schwankungen angepasst werden, um den Stop-Loss-Bereich bei starken Schwankungen angemessen zu lockern.
  3. Es ist möglich, eine maximale Haltedauer einzustellen und nach einer bestimmten Zeit aktiv zu stoppen.
  4. Es kann eine mobile Stop-Strategie hinzugefügt werden, die den Stop-Loss nach und nach erhöht, wenn der Preis läuft.
  5. Die ATR-Zyklusparameter können je nach Aktiencharakteristik angepasst werden.

Zusammenfassen

Die Strategie ist klar und verständlich. Die Strategie selbst ist eher passiv und bietet viel Spielraum für Optimierungen. Sie kann auch Trendbeurteilungen hinzufügen und die Strategie nach den Marktbedingungen anpassen, um sie aktiver zu gestalten.

Strategiequellcode
/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 

// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

////////////////////////////////////////////////////////////////////////////////
// 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 = 2019, 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 = true
 
////////////////////////////////////////////////////////////////////////////////


xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

strategy.entry("long",   true, when = buy  and time_cond)
strategy.entry("short", false, when = sell and time_cond)