Strategy Overview: The strategy is based on the relationship between the RSI indicator and price, optimizing trading performance by dynamically adjusting take profit and stop loss levels. The main idea of the strategy is to utilize the overbought and oversold characteristics of the RSI indicator, combined with changes in price and trading volume, to take profit in a timely manner when the RSI diverges, while controlling risk through dynamic stop loss.
Strategy Principle:
Strategy Advantages:
Strategy Risks:
Optimization Direction:
Summary: The RSI Dynamic Stop Loss and Take Profit Strategy takes profit in a timely manner at the beginning of a trend by utilizing the divergence relationship between the RSI indicator and price, combined with changes in trading volume, while setting dynamic stop losses to control risk. The advantages of this strategy are that it can lock in profits at the beginning of a trend reversal, reduce strategy drawdowns, and has a certain adaptability. However, in a sideways market, the strategy may generate more false signals, so it is necessary to introduce other technical indicators and optimize the take profit and stop loss thresholds to improve strategy performance. In addition, adding position management and parameter optimization are also important directions for further improving the stability and returns of the strategy.
/*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")