RSI Strategi Stop Loss dan Ambil Keuntungan Dinamik

Penulis:ChaoZhang, Tarikh: 2024-03-19 15:54:01
Tag:

img

Ringkasan Strategi: Strategi ini adalah berdasarkan hubungan antara penunjuk RSI dan harga, mengoptimumkan prestasi perdagangan dengan menyesuaikan secara dinamik mengambil keuntungan dan menghentikan kerugian tahap.

Prinsip Strategi:

  1. Mengira nilai penunjuk RSI dan menentukan ambang overbought dan oversold berdasarkan parameter input.
  2. Menghakimi sama ada pembentukan puncak (isPeak) atau pembentukan bawah (isBottom) muncul dengan membandingkan nilai RSI semasa dengan nilai RSI beberapa lilin sebelumnya.
  3. Apabila pembentukan puncak muncul, jika harga semasa lebih tinggi daripada tinggi puncak sebelumnya dan jumlah dagangan lebih kecil daripada jumlah dagangan puncak sebelumnya, isyarat jual dihasilkan.
  4. Apabila pembentukan bahagian bawah muncul, jika harga semasa lebih rendah daripada bahagian bawah sebelumnya dan jumlah dagangan lebih kecil daripada jumlah dagangan bahagian bawah sebelumnya, isyarat beli dihasilkan.
  5. Selepas isyarat beli diaktifkan, ambil keuntungan apabila harga kembali ke paras terendah bawah sebelumnya atau jumlah dagangan lebih kecil daripada jumlah dagangan bawah sebelumnya.
  6. Selepas isyarat jual diaktifkan, ambil keuntungan apabila harga melonjak kembali ke paras tertinggi puncak sebelumnya atau jumlah dagangan lebih kecil daripada jumlah dagangan puncak sebelumnya.
  7. Selepas membuka kedudukan, tetapkan harga stop loss kepada peratusan tertentu (2%) daripada harga pembukaan untuk mengawal risiko.

Kelebihan Strategi:

  1. Dengan mengambil keuntungan secara dinamik, keuntungan boleh dikunci dengan tepat pada masanya pada permulaan pembalikan trend, meningkatkan pulangan strategi.
  2. Menggunakan perubahan dalam jumlah dagangan sebagai keadaan penilaian tambahan dapat menapis isyarat palsu dengan berkesan dan meningkatkan ketepatan isyarat.
  3. Menetapkan stop loss dapat mengawal secara berkesan pendedahan risiko satu transaksi dan mengurangkan pengeluaran strategi.
  4. Parameter boleh diselaraskan dan boleh digunakan untuk persekitaran pasaran dan jenis perdagangan yang berbeza.

Risiko Strategi:

  1. Dalam pasaran sampingan, penunjuk RSI boleh menghasilkan isyarat overbought dan oversold yang kerap, menyebabkan strategi menghasilkan lebih banyak isyarat palsu.
  2. Menetapkan stop loss boleh menyebabkan strategi mengalami pengeluaran besar dalam jangka pendek.
  3. Prestasi strategi di pasaran yang sedang berkembang mungkin tidak sebaik strategi yang mengikuti trend.

Arah pengoptimuman:

  1. Pertimbangkan untuk memperkenalkan penunjuk teknikal lain, seperti MACD, Bollinger Bands, dll., Untuk meningkatkan kebolehpercayaan isyarat.
  2. Mengoptimumkan ambang untuk mengambil keuntungan dan menghentikan kerugian, dan menyesuaikan secara dinamik mengikut ciri-ciri pelbagai jenis dan persekitaran pasaran.
  3. Tambah modul pengurusan kedudukan untuk menyesuaikan saiz kedudukan mengikut turun naik pasaran dan status risiko akaun.
  4. Melakukan pengoptimuman parameter pada strategi untuk mencari kombinasi parameter optimum.

Ringkasan: Strategi Stop Loss dan Take Profit Dinamik RSI mengambil keuntungan dengan tepat pada masanya pada awal trend dengan memanfaatkan hubungan perbezaan antara penunjuk RSI dan harga, digabungkan dengan perubahan dalam jumlah dagangan, sambil menetapkan kerugian berhenti dinamik untuk mengawal risiko. Kelebihan strategi ini adalah bahawa ia dapat mengunci keuntungan pada awal pembalikan trend, mengurangkan pengeluaran strategi, dan mempunyai fleksibiliti tertentu. Walau bagaimanapun, dalam pasaran sampingan, strategi mungkin menghasilkan lebih banyak isyarat palsu, jadi perlu memperkenalkan penunjuk teknikal lain dan mengoptimumkan ambang keuntungan dan kehilangan berhenti untuk meningkatkan prestasi strategi. Di samping itu, menambah pengurusan kedudukan dan pengoptimuman parameter juga merupakan arah penting untuk meningkatkan kestabilan dan pulangan strategi.


/*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")

Lebih lanjut