
Eine dynamische Stop-Loss-Strategie ist eine quantitative Handelsstrategie, die einen Stop-Loss-Mechanismus nutzt. Die Strategie basiert auf der Theorie des Trendverfolgens, setzt eine Stop-Loss-Linie ein, um eine Stop-Loss-Bestätigung zu erreichen und eine Stop-Loss-Anpassung zu verfolgen. Sie dient hauptsächlich dazu, die Stop-Loss von Einzelgeschäften zu kontrollieren, die Gewinne zu maximieren und das Handelsrisiko zu reduzieren.
Der Kern einer dynamischen Stop-Tracking-Strategie besteht darin, drei Schlüsselparameter festzulegen: die anfängliche Stop-Loss-Distanz, die Tracking-Stop-Distanz und die Tracking-Stop-Trigger-Distanz. Wenn ein Kaufsignal ausgelöst wird, wird der anfängliche Stop-Loss-Preis basierend auf dem Kaufpreis und der festgelegten anfänglichen Stop-Loss-Distanz berechnet.
Die Strategie bietet gleichzeitig einen niedrigen Stop-Loss, unabhängig davon, ob ein Tracking-Stop eingeleitet wird, und wenn der Preis den niedrigen Stop-Loss erreicht, wird der Stop-Loss direkt eingestellt. Der niedrige Stop-Loss dient zur Abwehr von Sprungpreisen. Die Dynamic Tracking Stop-Strategie ermöglicht es daher, die Stop-Line automatisch mit einem dynamischen Stop-Mechanismus in Form von Up-Down-Doppellinien zu verfolgen, um gleichzeitig zu verhindern, dass zu große Verluste entstehen.
Vermeiden Sie, dass Sie zu viele Chancen für die Rückzahlung erhalten, indem Sie die Stop-Loss-Verfolgung durchführen und den Gewinn ständig sperren.
Die Verwendung einer doppelten Auf-und-Ab-Linien-Stop-Struktur gewährleistet sowohl eine rechtzeitige Nachfolge der Stop-Lines als auch die Vermeidung von übermäßigen Verlusten.
Der Einsatz einer kontinuierlichen Beurteilungsmechanik für die Stop-Loss-Anpassung ist einfach zu bedienen und leicht umzusetzen.
Die Optimierung der Stop-Loss-Effekte kann je nach Markt- und Aktienmerkmalen angepasst werden.
Es ist nicht nötig, die Marktentwicklung vorherzusagen, sondern den Trends zu folgen.
Eine falsche Einstellung der Parameter kann dazu führen, dass der Stop zu locker oder zu eng ist. Zu locker führt zu unwirksamen Stopps, und zu eng ist von den normalen Preisschwankungen ausgeschlossen.
Ein unerwartetes Ereignis, das zu einem Preissprung führt, kann zu einer Nichtrücknahme führen und sollte mit anderen Schutzmaßnahmen kombiniert werden.
Transaktionsgebühren und Gleitpunkte können Auswirkungen auf den tatsächlichen Verkaufspreis nach dem Auslösen der Stop-Line haben.
Sie sind nicht sehr anpassungsfähig und wirken in bestimmten Phasen, z. B. in der Erschütterungsphase, nicht gut.
Gegenmaßnahmen:
Durch die Anpassung der Stop-Line-Verfolgung an die Prozentsatz-Veränderung kann der Kurs der Aktie unter verschiedenen Preisniveaus besser verfolgt werden.
Hinzufügen von Volatilitätsindikatoren, um bei starken Schwankungen die Verfolgung von Stop-Losses auszusetzen, um zu vermeiden, dass normale Schwankungen einen Stop-Loss auslösen.
Automatische Optimierung der Parameter mithilfe von maschinellen Lernmethoden. Die Trainingsprobe wählt die Rendite der Parameterkombination in der jüngsten Zeit.
Es ist notwendig, die Bedingungen für die Eröffnung von Positionen zu ermitteln, in Kombination mit Indikatoren wie Trends und Unterstützungswiderstände, um Positionen in schwankenden Situationen zu vermeiden.
Die Strategie ist einfach zu bedienen, leicht zu implementieren, kann die Parameter nach den Marktbedingungen optimieren und ist besser in Kombination mit anderen Strategien zu verwenden. Es gibt jedoch einige Einschränkungen, die empfohlen werden, um die Stop-Loss-Distanz automatisch an die Preisänderungen anzupassen, um die Gewinne zu sperren, die Rückkehr zu reduzieren und die Verluste zu kontrollieren.
/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
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/
// © Thumpyr
//@version=5
/////////////////////////////////////////////////////////////////////////////////////////////
// Comment out Strategy Line and remove // from Indicator line to turn into Indicator //////
// Do same for alertConidction at bottom //////
/////////////////////////////////////////////////////////////////////////////////////////////
strategy("PCT Trailing Stoploss-Strategy", shorttitle="PCT Trailing Stoploss- Strategy", overlay=true)
//indicator(title="PCT Trailing Stoploss- Indicator", shorttitle="PCT Trailing Stoploss - Indicator", timeframe="", timeframe_gaps=true, overlay=true)//
sellLow=input.float(.035, minval=0, title="Stop Loss Loss: 1% = .01", group="Sell Settings")
trailStopArm=input.float(.0065, minval=0, title="Trailing Stop Arm: 1%=.01", group="Sell Settings")
trailStopPct=input.float(.003, minval=0, title="Trailing Stop Trigger: 1%=.01 ", group="Sell Settings")
/////////////////////////////////////////////////
// Indicators //
/////////////////////////////////////////////////
ema1Len = input.int(14, minval=1, title=" ema 1 Length", group="Trend Line Settings")
ema1Src = input(close, title="ema 1 Source", group="Trend Line Settings")
ema1 = ta.ema(ema1Src, ema1Len)
plot(ema1, title="EMA", color=color.blue)
ema2Len = input.int(22, minval=1, title=" ema 2 Length", group="Trend Line Settings")
ema2Src = input(close, title="ema 2 Source", group="Trend Line Settings")
ema2 = ta.ema(ema2Src, ema2Len)
plot(ema2, title="EMA", color=color.orange)
ema3Len = input.int(200, minval=1, title=" ema 3 Length", group="Trend Line Settings")
ema3Src = input(close, title="ema 2 Source", group="Trend Line Settings")
ema3 = ta.ema(ema3Src, ema3Len)
plot(ema3, title="EMA", color=color.gray)
/////////////////////////////
//// Buy Conditions ////
/////////////////////////////
alertBuy = ta.crossover(ema1,ema2) and close>ema3
////////////////////////////////////////////////////////////////////
//// Filter redundant Buy Signals if Sell has not happened ////
////////////////////////////////////////////////////////////////////
var lastsignal = 0
showAlertBuy = 0
if(alertBuy and lastsignal !=1)
showAlertBuy := 1
lastsignal := 1
buyAlert= showAlertBuy > 0
//////////////////////////////////////////////////////////////////
//// Track Conditions at buy Signal ////
//////////////////////////////////////////////////////////////////
alertBuyValue = ta.valuewhen(buyAlert, close,0)
alertSellValueLow = alertBuyValue - (alertBuyValue*sellLow)
////////////////////////////////////////////////////////////
///// Trailing Stop /////
////////////////////////////////////////////////////////////
var TSLActive=0 //Check to see if TSL has been activated
var TSLTriggerValue=0.0 //Initial and climbing value of TSL
var TSLStop = 0.0 //Sell Trigger
var TSLRunning =0 //Continuously check each bar to raise TSL or not
// Check if a Buy has been triggered and set initial value for TSL //
if buyAlert
TSLTriggerValue := alertBuyValue+(alertBuyValue*trailStopArm)
TSLActive := 0
TSLRunning :=1
TSLStop := TSLTriggerValue - (TSLTriggerValue*trailStopPct)
// Check that Buy has triggered and if Close has reached initial TSL//
// Keeps from setting Sell Signal before TSL has been armed w/TSLActive//
beginTrail=TSLRunning==1 and TSLActive==0 and close>alertBuyValue+(alertBuyValue*trailStopArm) and ta.crossover(close,TSLTriggerValue)
if beginTrail
TSLTriggerValue :=close
TSLActive :=1
TSLStop :=TSLTriggerValue - (TSLTriggerValue*trailStopPct)
// Continuously check if TSL needs to increase and set new value //
runTrail= TSLActive==1 and (ta.crossover(close,TSLTriggerValue) or close>=TSLTriggerValue)
if runTrail
TSLTriggerValue :=close
TSLStop :=TSLTriggerValue - (TSLTriggerValue*trailStopPct)
// Verify that TSL is active and trigger when close cross below TSL Stop//
TSL=TSLActive==1 and (ta.crossunder(close,TSLStop) or (close[1]>TSLStop and close<TSLStop))
// Plot point of inital arming of TSL//
TSLTrigger=TSLActive==1 and TSLActive[1]==0
plotshape(TSLTrigger, title='TSL Armed', location=location.abovebar, color=color.new(color.blue, 0), size=size.small, style=shape.cross, text='TSL Armed')
////////////////////////////////////////////////////////////
// Plots used for troubleshooting and verification of TSL //
////////////////////////////////////////////////////////////
//plot(TSLActive,"Trailing Stop", color=#f48fb1)
//plot(TSLRunning,"Trailing Stop", color=#f48fb1)
//plot(TSLTriggerValue,"Trailing Stop Trigger", color.new(color=#ec407a, transp = TSLRunning==1 ? 0 : 100))
//plot(TSLStop,"Trailing Stop", color.new(color=#f48fb1, transp = TSLRunning==1 ? 0 : 100))//
////////////////////////////////////////////////////////////
///// Sell Conditions ///////
////////////////////////////////////////////////////////////
Sell1 = TSL
Sell2 = ta.crossunder(close,alertSellValueLow)
alertSell= Sell1 or Sell2
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//// Remove Redundant Signals ////
////////////////////////////////////////////////////////////
showAlertSell = 0
if(alertSell and lastsignal != -1)
showAlertSell := 1
lastsignal := -1
sellAlert= showAlertSell > 0
if sellAlert
TSLActive :=0
TSLRunning :=0
/////////////////////////////////////////
// Plot Buy and Sell Shapes on Chart //
/////////////////////////////////////////
plotshape(buyAlert, title='Buy', location=location.belowbar, color=color.new(color.green, 0), size=size.small, style=shape.triangleup, text='Buy')
plotshape(sellAlert, title='Sell', location=location.abovebar, color=color.new(color.red, 0), size=size.small, style=shape.triangledown, text='Sell')
/////////////////////////////////////////////////////////////////////////////////////////////
// Remove // to setup for Indicator //
/////////////////////////////////////////////////////////////////////////////////////////////
//Alerts
//alertcondition(title='Buy Alert', condition=buyAlert, message='Buy Conditions are Met')
//alertcondition(title='Sell Alert', condition=sellAlert, message='Sell Conditions are Met')
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
//// Comment out this section if setup as Indicator ////
////////////////////////////////////////////////////////////
longCondition = buyAlert
if (longCondition)
strategy.entry("Buy", strategy.long)
alert(message='Buy', freq=alert.freq_once_per_bar_close)
shortCondition = sellAlert
if (shortCondition)
strategy.close_all(sellAlert,"Sell")
alert(message='Sell', freq=alert.freq_once_per_bar_close)
/////////////////////////////////////////////////////////////