Resumo da estratégia: A estratégia baseia-se na relação entre o indicador RSI e o preço, para otimizar o desempenho das negociações através do ajuste dinâmico do ponto de parada e perda. A principal idéia da estratégia é aproveitar a característica de sobrecompra e sobrevenda do indicador RSI, combinando as mudanças de preço e volume de transação, para parar em tempo hábil quando o RSI se desvia, enquanto controla o risco através de um stop loss dinâmico.
Princípios da estratégia:
Vantagens estratégicas:
Riscos estratégicos:
Otimização:
Resumo: A estratégia de parada de perda dinâmica do RSI usa o desvio do indicador do RSI do preço, combina mudanças de volume de transação e, no início da tendência, impõe uma parada de perda dinâmica para controlar o risco. A vantagem da estratégia é que ela pode bloquear o lucro no início da reversão da tendência, reduzir o recuo da estratégia e ter uma certa adaptabilidade. No entanto, em mercados turbulentos, a estratégia pode apresentar mais sinais falsos, portanto, é necessário introduzir outros indicadores técnicos e otimizar o valor da parada de perda para melhorar o desempenho da estratégia.
/*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")