Adaptive Trailing-Stop-Trendfolgestrategie basierend auf ATR und RSI


Erstellungsdatum: 2024-01-23 11:31:14 zuletzt geändert: 2024-01-23 11:31:14
Kopie: 0 Klicks: 713
1
konzentrieren Sie sich auf
1617
Anhänger

Adaptive Trailing-Stop-Trendfolgestrategie basierend auf ATR und RSI

Überblick

Die Strategie kombiniert die Verwendung von mittleren realen Schwankungsbereichen (ATR), relativ starken Indikatoren (RSI) und beweglichen Stopps, um einen anpassungsfähigen Trend zu verfolgen. Durch die ATR werden dynamische Stopps berechnet, die RSI wird verwendet, um die Richtung der Marktentwicklung zu bestimmen, und der bewegliche Stopp verfolgt die Preisschwankungen, um die Gewinne zu maximieren.

Strategieprinzip

  1. Die Strategie berechnet den dynamischen Stop-Loss-Level durch die Berechnung des ATR. Der ATR spiegelt die Volatilität und das Risiko des Marktes wider.

  2. Die RSI wird berechnet. Der RSI kann überkauft oder überverkauft werden. Der RSI ist ein Beifall, wenn der RSI größer als 50 ist, und ein Beifall, wenn er kleiner als 50 ist.

  3. Diese Strategie basiert auf den Stop-Loss-Levels der ATR-Berechnung und der Trendrichtung, die vom RSI beurteilt wird. Die mobile Stop-Loss-Strategie verfolgt ständig die Preisschwankungen und maximiert die Gewinne, indem die Stop-Loss-Position schrittweise erweitert wird, während die Stop-Loss-Position garantiert wird.

  4. Konkret geht es darum, wenn der RSI größer als 50 ist, über und weniger als 50 leer zu sein. Der Stop-Loss-Preis, der mit der ATR berechnet wird, wird verwendet, um den Stop-Loss zu bewegen und die Preisschwankungen zu verfolgen.

Analyse der Stärken

  1. Mit ATR kann die Stop-Loss-Grenze an die dynamischen Marktschwankungen angepasst werden, um zu große und zu kleine Stop-Loss-Mängel zu vermeiden.

  2. Der RSI kann die Richtung des Trends exakt und zuverlässig bestimmen, um zu vermeiden, dass der Handel in einem wackligen Markt festsitzt.

  3. Der mobile Stop-Loss verfolgt die Preisschwankungen und kann die Stop-Position erweitern, um die Trends zu profitieren.

Risikoanalyse

  1. ATR und RSI-Parameter müssen optimiert und nachgeprüft werden, da dies die Effektivität der Strategie beeinträchtigen kann.

  2. Obwohl die Stop-Loss-Schutz, ist es schwer zu vermeiden, dass das Risiko, dass die Stop-Loss durchbrochen wird. Es ist möglich, die Position entsprechend zu reduzieren, um das Risiko zu kontrollieren.

  3. Die Strategie ist auf die Optimierung der Parameter der Handelsarten angewiesen und muss die Parameter für verschiedene Arten anpassen.

Optimierungsrichtung

  1. Die Optimierung der Parameter anhand von Adaptionsmechanismen kann mit Hilfe von Algorithmen des maschinellen Lernens berücksichtigt werden.

  2. Die Erweiterung des Positionskontrollmoduls ermöglicht die dynamische Anpassung der Positionsgröße an die Marktbedingungen und verringert die Wahrscheinlichkeit eines Durchbruchs des Stop-Losses.

  3. Es ist wichtig, die Trendmessung zu erhöhen, um zu vermeiden, dass ein unerwarteter Wendepunkt einen Verlust verursacht.

Zusammenfassen

Die Strategie integriert die Verwendung von Modulen wie ATR, RSI und mobile Stop Loss, um eine typische Adaptive Trend-Tracking-Strategie zu bilden. Durch die Optimierung von Parametern kann sehr flexibel auf verschiedene Handelsarten angepasst werden, eine empfehlenswerte allgemeine Trend-Tracking-Strategie. Die Wirksamkeit der Strategie kann durch die Hinzufügung von mehr Indikatoren und die Optimierung von Machine Learning-Algorithmen weiter verbessert werden.

Strategiequellcode
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-19 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="UTBot Strategy", overlay = true )
   
// CREDITS to @HPotter for the orginal code. 
// CREDITS to @Yo_adriiiiaan for recently publishing the UT Bot study based on the original code -
// CREDITS to @TradersAITradingPlans for making this Strategy. 
// Strategy fixed with Time period by Kirk65.
// I am using this UT bot with 2 hours time frame with god resultss. Alert with "Once per bar" and stoploss 1.5%. If Alerts triggered and price goes against Alert. Stoploss will catch it. Wait until next Alert.
// While @Yo_adriiiiaan mentions it works best on a 4-hour timeframe or above, witch is a lot less risky, but less profitable. 

testStartYear = input(2019, "BACKTEST START YEAR", minval = 1980, maxval = 2222) 
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222)
testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12)
testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod = true

SOURCE = input(hlc3)
RSILENGTH = input(14, title = "RSI LENGTH")
RSICENTERLINE = input(52, title = "RSI CENTER LINE")
MACDFASTLENGTH = input(7, title = "MACD FAST LENGTH")
MACDSLOWLENGTH = input(12, title = "MACD SLOW LENGTH")
MACDSIGNALSMOOTHING = input(12, title = "MACD SIGNAL SMOOTHING")
a = input(10, title = "Key Vaule. 'This changes the sensitivity'") 
SmoothK = input(3)
SmoothD = input(3)
LengthRSI = input(14)
LengthStoch = input(14)
RSISource = input(close) 
c = input(10, title="ATR Period")
xATR = atr(c)
nLoss = a * xATR
xATRTrailingStop = iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
     iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
     iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos =	iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
     iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == -1 ? red: pos == 1 ? green : blue 
ema= ema(close,1)
above = crossover(ema,xATRTrailingStop )
below = crossover(xATRTrailingStop,ema)
buy = close > xATRTrailingStop and above 
sell = close < xATRTrailingStop and below
barbuy = close > xATRTrailingStop 
barsell = close < xATRTrailingStop 
plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= green,textcolor = white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= red,textcolor = white, transp = 0, size = size.tiny)
barcolor(barbuy? green:na)
barcolor(barsell? red:na)
//alertcondition(buy, title='Buy', message='Buy')
//alertcondition(sell, title='Sell', message='Sell')

if (buy)
    strategy.entry("UTBotBuy",strategy.long, when=testPeriod)
if (sell)
    strategy.entry("UTBotSell",strategy.short, when=testPeriod)