Sumber daya yang dimuat... Pemuatan...

Strategi kuantitatif rebound over-sold RSI stop-loss ATR dinamis

Penulis:ChaoZhang, Tanggal: 2024-11-29 16:18:55
Tag:RSISMAATRTPSL

img

Gambaran umum

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan sinyal oversold RSI dan stop-loss ATR dinamis. Menggunakan data jangka waktu harian, ini menggabungkan sinyal oversold RSI dengan filter tren rata-rata bergerak 200 hari untuk menangkap peluang rebound dalam kondisi pasar oversold. Strategi ini menggunakan mekanisme stop-loss ATR dinamis dan persentase stop-loss statis, bersama dengan target keuntungan tiga kali lipat yang diimplementasikan melalui pengurangan posisi bertahap.

Prinsip Strategi

Logika inti mencakup elemen kunci berikut:

  1. Sinyal Masuk: Sistem menghasilkan sinyal panjang ketika RSI ((5) jatuh di bawah tingkat oversold 30 dan harga berada di atas rata-rata pergerakan 200 hari.
  2. Mekanisme Stop-Loss: Mengkombinasikan stop-loss dinamis 1,5x ATR ((20) dengan stop-loss tetap 25%.
  3. Target Keuntungan: Menetapkan tiga target sebesar 5%, 10% dan 15%, mengurangi posisi masing-masing sebesar 33%, 66% dan 100%.
  4. Manajemen Posisi: Merekomendasikan menggunakan ukuran posisi 59,13% yang dihitung berdasarkan Kriteria Kelly atau ukuran posisi 75% yang konservatif.

Keuntungan Strategi

  1. Konfirmasi Tren Ganda: Memvalidasi perdagangan melalui RSI oversold dan tren rata-rata bergerak, meningkatkan tingkat kemenangan.
  2. Pengendalian Risiko Fleksibel: Stop loss ATR dinamis beradaptasi dengan volatilitas pasar sementara stop loss tetap memberikan perlindungan tertinggi.
  3. Manajemen Keuntungan Cerdas: Target tiga kali lipat dengan pengurangan posisi bertahap mengamankan keuntungan sambil mempertahankan potensi kenaikan.
  4. Pengelolaan Modal Ilmiah: Mengoptimalkan ukuran posisi menggunakan Kriteria Kelly, menyeimbangkan risiko dan imbalan.

Risiko Strategi

  1. Trend Dependency: Strategi dapat memicu sering berhenti di pasar yang bervariasi. Saran: Tambahkan filter osilator untuk mengurangi sinyal palsu.

  2. Stop-Loss yang luas: Stop-Loss tetap 25% dapat menghasilkan kerugian tunggal yang besar. Saran: Sesuaikan persentase stop loss berdasarkan toleransi risiko pribadi.

  3. Risiko penarikan: Pengambilan keuntungan bertahap dapat mengurangi posisi terlalu awal dalam tren yang kuat. Saran: Pertimbangkan target laba dinamis atau simpan sebagian untuk mengikuti tren.

Arah Optimasi Strategi

  1. Optimasi sinyal:
  • Tambahkan konfirmasi volume
  • Menggabungkan indikator tren seperti MACD
  • Mengimplementasikan filter volatilitas
  1. Optimasi Stop-Loss:
  • Mengimplementasikan persentase stop-loss dinamis
  • Tambahkan pemberhentian berbasis waktu
  • Sertakan filter risiko-manfaat
  1. Optimisasi Penghasilan:
  • Menetapkan target dinamis berdasarkan ATR
  • Menerapkan trailing stop
  • Mengoptimalkan rasio pengurangan posisi

Ringkasan

Strategi ini membangun sistem perdagangan yang lengkap dengan menggabungkan sinyal oversold RSI dengan penyaringan tren rata-rata bergerak, dilengkapi dengan target stop-loss dan keuntungan triple ATR yang dinamis. Kekuatannya terletak pada kontrol risiko yang fleksibel dan manajemen keuntungan yang rasional, meskipun optimasi berdasarkan kondisi pasar dan preferensi risiko pribadi diperlukan. Melalui peningkatan terus-menerus sistem sinyal, mekanisme stop-loss, dan strategi pengambilan keuntungan, sistem menunjukkan potensi untuk kinerja yang lebih baik dalam perdagangan langsung.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel  
rsi_oversold = rsi < oversoldLevel

// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)

// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na

// Strategy entry
long = (rsi_oversold ) and close > sma200 

// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)

if long
    strategy.entry('Long', strategy.long)
    long_stop_level := close - atrMultiplier * atrValue
    tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
    tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
    tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)

// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)

// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
    strategy.close("Long")
    tp1_level := na
    tp2_level := na
    tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")

// TP levels
if (strategy.position_size > 0)
    if (not na(tp1_level) and close >= tp1_level)
        tp1_level := na
    if (not na(tp2_level) and close >= tp2_level)
        tp2_level := na
    if (not na(tp3_level) and close >= tp3_level)
        tp3_level := na

plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")

// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))

// by wielkieef

Berkaitan

Lebih banyak