
戦略概要: この戦略は,RSI指標と価格の関係に基づいて,動的にストップ・ストラストープポイントを調整することで取引パフォーマンスを最適化する.戦略の主な考えは,RSI指標の超買い超売り特性を利用し,価格と取引量の変化を組み合わせて,RSIが逸脱した場合にタイムストップし,動的にストップ・ストラストープを使用してリスクを制御することである.
戦略の原則:
戦略的な利点:
戦略的リスク:
改善する方向:
結論から言うと RSIダイナミックストップストップ戦略は,RSI指標と価格の偏離関係を介して,取引量の変化を合成し,トレンドの初期にタイムリーにストップを設定し,同時にリスクを制御するためにダイナミックストップを設定する.この戦略の優点は,トレンドの逆転の初期に利益をロックすることができ,戦略の撤退を軽減し,一定の適応性があることである.しかし,振動的な市場で,この戦略は,偽信号が多く現れる可能性があるため,他の技術指標の導入とストップストップストップの値の最適化は,戦略のパフォーマンスを向上させる必要がある.さらに,ポジション管理とパラメータの最適化は,戦略の安定性と収益をさらに向上させる重要な方向である.
/*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")