RSI Dynamische Stop Loss und Take Profit-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-03-19 15:54:01
Tags:

img

Strategieübersicht: Die Strategie basiert auf der Beziehung zwischen dem RSI-Indikator und dem Preis und optimiert die Handelsleistung durch dynamische Anpassung der Take-Profit- und Stop-Loss-Level.

Strategieprinzip:

  1. Berechnen Sie den Wert des RSI-Indikators und bestimmen Sie die überkauften und überverkauften Schwellenwerte anhand der Eingabeparameter.
  2. Beurteilen Sie, ob eine Spitzenbildung (isPeak) oder eine Bodenbildung (isBottom) erscheint, indem Sie den aktuellen RSI-Wert mit den RSI-Werten der vorherigen Kerzen vergleichen.
  3. Wenn eine Spitzenbildung auftritt, wenn der aktuelle Preis höher ist als das Hoch des vorherigen Spitzenwertes und das Handelsvolumen kleiner als das Handelsvolumen des vorherigen Spitzenwertes ist, wird ein Verkaufssignal generiert.
  4. Wenn eine Tiefbildung auftritt, wenn der aktuelle Preis unter dem Tief des vorherigen Tiefes liegt und das Handelsvolumen kleiner als das Handelsvolumen des vorherigen Tiefes ist, wird ein Kaufsignal generiert.
  5. Nach Auslösung eines Kaufsignals werden Gewinne erzielt, wenn der Preis auf das Tief des vorherigen Bodens zurückfällt oder das Handelsvolumen kleiner ist als das Handelsvolumen des vorherigen Bodens.
  6. Nach Auslösung eines Verkaufssignals werden Gewinne erzielt, wenn der Preis auf das Hoch des vorherigen Höchststandes zurückfällt oder das Handelsvolumen kleiner ist als das Handelsvolumen des vorherigen Höchststandes.
  7. Nach Eröffnung einer Position wird der Stop-Loss-Preis auf einen bestimmten Prozentsatz (2%) des Eröffnungspreises festgelegt, um das Risiko zu kontrollieren.

Strategische Vorteile:

  1. Durch die dynamische Gewinnentnahme können die Gewinne zu Beginn einer Trendumkehr rechtzeitig gesichert werden, wodurch die Strategierenditen verbessert werden.
  2. Die Verwendung von Veränderungen des Handelsvolumens als Hilfsbedingung kann falsche Signale effektiv herausfiltern und die Signalgenauigkeit verbessern.
  3. Durch die Festlegung von Stop-Losses kann das Risikopositionsniveau eines einzelnen Geschäfts wirksam kontrolliert und die Strategie-Drawdowns reduziert werden.
  4. Die Parameter sind anpassbar und für verschiedene Marktumgebungen und Handelsvarianten anwendbar.

Strategische Risiken:

  1. In einem seitlichen Markt kann der RSI-Indikator häufige Überkauf- und Überverkaufssignale erzeugen, wodurch die Strategie mehr falsche Signale erzeugt.
  2. Die Einstellung von Stop-Losses kann dazu führen, dass die Strategie kurzfristig große Rückzüge erlebt.
  3. Die Ergebnisse der Strategie in Trendmärkten sind möglicherweise nicht so gut wie bei Trendstrategie.

Optimierungsrichtung:

  1. Es sollte in Betracht gezogen werden, andere technische Indikatoren wie MACD, Bollinger-Bänder usw. einzuführen, um die Zuverlässigkeit der Signale zu verbessern.
  2. Optimierung der Schwellenwerte für Take Profit und Stop Loss und dynamische Anpassung an die Merkmale der verschiedenen Sorten und Marktumgebungen.
  3. Hinzufügen eines Positionsmanagement-Moduls zur Anpassung der Positionsgröße an die Marktvolatilität und den Kontorisikostand.
  4. Durchführung von Parameteroptimierungen der Strategie, um die optimale Parameterkombination zu finden.

Zusammenfassung: Die RSI Dynamic Stop Loss and Take Profit Strategie profitiert rechtzeitig zu Beginn eines Trends, indem sie die Divergenzbeziehung zwischen dem RSI-Indikator und dem Preis in Kombination mit Veränderungen des Handelsvolumens nutzt und gleichzeitig dynamische Stop-Losses setzt, um das Risiko zu kontrollieren. Die Vorteile dieser Strategie bestehen darin, dass sie zu Beginn einer Trendumkehr Gewinne erzielen kann, Strategieabzüge reduziert und eine gewisse Anpassungsfähigkeit aufweist. Allerdings kann die Strategie in einem seitlichen Markt mehr falsche Signale generieren, so dass es notwendig ist, andere technische Indikatoren einzuführen und die Take-Profit- und Stop-Loss-Schwellen zu optimieren, um die Strategieleistung zu verbessern. Darüber hinaus sind das Hinzufügen von Positionsmanagement und Parameteroptimierung auch wichtige Richtungen zur weiteren Verbesserung der Stabilität und Rendite der Strategie.


/*backtest
start: 2024-03-11 00:00:00
end: 2024-03-15 09:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("RMM_byMR", overlay=true)

// RSI uzunluğu girişi
rsiLength = input(14, title="RSI Uzunluğu")

// Tepe ve dip seviyeleri için girişler
overboughtLevel = input(70, title="Aşırı Alım Seviyesi")
oversoldLevel = input(30, title="Aşırı Satım Seviyesi")

// RSI hesaplama
rsiValue = rsi(close, rsiLength)

// Son tepe noktalarını tespit etme // Son dip noktalarını tespit etme
isPeak = rsiValue[2] > overboughtLevel and rsiValue[2] > rsiValue[1] and rsiValue[2] > rsiValue[3] and (rsiValue[1] > rsiValue or rsiValue[3] > rsiValue[4])
isBottom = rsiValue[2] < oversoldLevel and rsiValue[2] < rsiValue[1] and rsiValue[2] < rsiValue[3] and (rsiValue[1] < rsiValue or rsiValue[3] < rsiValue[4])

// Önceki tepe noktalarını tespit etme
prevPeak = valuewhen(isPeak, rsiValue[2], 1)
prevPeakHighPrice = valuewhen(isPeak, high[2], 1)
volumePeak = valuewhen(isPeak, volume[1]+volume[2]+volume[3], 1)
prevPeakBarIndex = valuewhen(isPeak, bar_index, 1)

// Önceki dip noktalarını tespit etme
prevBottom = valuewhen(isBottom, rsiValue[2], 1)
prevBottomLowPrice = valuewhen(isBottom, low[2], 1)
volumeBottom = valuewhen(isBottom, volume[1]+volume[2]+volume[3], 1)
prevBottomBarIndex = valuewhen(isBottom, bar_index, 1)

// Tepe noktasında satış sinyali
isSellSignal = prevPeakBarIndex > prevBottomBarIndex and isPeak and rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice and (volume[1]+volume[2]+volume[3]) < volumePeak
isBuyTakeProfit = isPeak and ((rsiValue[2] < prevPeak and high[2] > prevPeakHighPrice) or (rsiValue[2] < prevPeak and (volume[1]+volume[2]+volume[3]) < volumePeak))

// Dip noktasında alış sinyali
isBuySignal = prevBottomBarIndex > prevPeakBarIndex and isBottom and rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice and (volume[1]+volume[2]+volume[3]) < volumeBottom
isSellTakeProfit = isBottom and ((rsiValue[2] > prevBottom and low[2] < prevBottomLowPrice) or (rsiValue[2] > prevBottom and (volume[1]+volume[2]+volume[3]) < volumeBottom))

sellTakeProfit = valuewhen(isSellTakeProfit, low, 1)
buyTakeProfit = valuewhen(isBuyTakeProfit, high, 1)

// isSellTakeProfit koşulu için işaretlemeyi yap
plotshape(isSellTakeProfit, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.small, title="Sell Take Profit", offset=-2) 

// isBuyTakeProfit koşulu için işaretlemeyi yap
plotshape(isBuyTakeProfit, style=shape.triangledown, location=location.belowbar, color=color.red, size=size.small, title="Buy Take Profit", offset=-2)

buyComment = "Buy \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n Low:" + tostring(round(low[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2))
sellComment = "Sell \n Rsi:" + tostring(round(rsiValue[2], 2)) + " \n High:" + tostring(round(high[2],2)) + " \n Hacim:" + tostring(round(volume[1]+volume[2]+volume[3],2)) 

// Alış sinyali durumunda uzun pozisyon aç
if (isBuySignal)
    strategy.entry("Buy", strategy.long, comment = buyComment )
    strategy.exit("SL", "Buy", stop=close * 0.98)

// Satış sinyali durumunda kısa pozisyon aç
if (isSellSignal)
    strategy.entry("Sell", strategy.short, comment = sellComment )
    strategy.exit("SL","Sell", stop=close * 1.02)
// Limit değerini sonradan belirleme


// Alış sinyali durumunda uzun pozisyon kapat
if (isBuyTakeProfit)
    strategy.close("Buy", comment="TP")

// Satış sinyali durumunda kısa pozisyon kapat
if (isSellTakeProfit)
    strategy.close("Sell", comment="TP")

Mehr