Strategi Perdagangan Ayunan Crossover RSI MA dengan Sistem Trailing Stop

RSI MA CROSSOVER TRAILING SL Swing Trading risk management
Tanggal Pembuatan: 2025-04-24 16:51:14 Akhirnya memodifikasi: 2025-04-24 16:51:14
menyalin: 4 Jumlah klik: 349
2
fokus pada
319
Pengikut

Strategi Perdagangan Ayunan Crossover RSI MA dengan Sistem Trailing Stop Strategi Perdagangan Ayunan Crossover RSI MA dengan Sistem Trailing Stop

Ringkasan

Strategi ini adalah strategi perdagangan berayun yang didasarkan pada RSI (Indeks Relatif Lemah) yang bersilang dengan Moving Average (MA) yang dirancang untuk grafik 4 jam. Strategi ini menghasilkan sinyal perdagangan melalui RSI dan MA dengan Gold Forks dan Dead Forks, dan menggabungkan berbagai alat manajemen risiko, termasuk Stop/Stop Fixed, Tracking Stop Losses, dan Reverse Exit Mechanism. Strategi ini juga menetapkan batas kerugian berturut-turut, yang menangguhkan perdagangan sampai reset hari berikutnya ketika kerugian berturut-turut melebihi dua kali.

Prinsip Strategi

  1. Pembatasan waktuStrategi ini hanya berjalan pada grafik 4 jam, memastikan sinyal perdagangan konsisten dengan siklus waktu yang dirancang.
  2. Perhitungan indikator: Menggunakan RSI (default length 14) dan moving average (SMA atau EMA, default length 14) untuk menghasilkan sinyal.
    • Fork ((MA di atas RSI) memicu sinyal beli ((membuat lebih banyak) )
    • Fork mati ((RSI di bawah MA) memicu sinyal jual ((Kekurangan) )
  3. Manajemen Posisi: Ukuran posisi berdasarkan alokasi modal dan harga saat ini untuk setiap transaksi.
  4. Mekanisme Keluar
    • Hentikan / HentikanStop loss (default 1.5%) dan stop loss (default 2.5%) berdasarkan persentase setting.
    • Pelacakan Stop LossTrigger exit: Ketika harga mundur dari titik tertinggi dengan nilai yang ditentukan (default 10 points).
    • Kembali keluar“Saya tidak tahu apa yang terjadi, tapi saya tidak tahu apa yang terjadi”, katanya.
  5. Pengendalian Risiko
    • Setelah mengalami kerugian dua kali berturut-turut, trading harus dihentikan, dan loss counter harus di-reset setiap hari pada pukul 9:15.

Analisis Keunggulan

  1. Verifikasi sinyal multi-dimensiFilter ganda RSI dan MA, mengurangi sinyal palsu.
  2. Manajemen risiko dinamis: Pelacakan Stop Loss untuk mengunci keuntungan, Fixed Stop Loss untuk membatasi kerugian.
  3. Manajemen dana yang ketatHal ini dilakukan untuk menghindari keterlaluan leverage.
  4. Pengendalian Disiplin“Saya tidak tahu apa-apa, saya tidak tahu apa-apa, saya tidak tahu apa-apa, saya tidak tahu apa-apa, saya tidak tahu apa-apa, saya tidak tahu apa-apa”.
  5. Tanda visualisasiTag grafik yang jelas membantu dengan cepat mengidentifikasi sinyal dan titik keluar.

Analisis risiko

  1. Parameter SensitivitasRSI dan MA memiliki pengaruh besar pada kualitas sinyal dan perlu dioptimalkan untuk menyesuaikan dengan fluktuasi pasar.
  2. Performa pasar trenDalam tren yang kuat, RSI dapat mengalami overbought/oversold dalam jangka panjang, yang menyebabkan sinyal tertinggal.
  3. Pembatasan waktu: Hanya berlaku untuk grafik 4 jam, siklus lainnya perlu diverifikasi ulang.
  4. Risiko kerugian berkelanjutan“Saya tidak tahu apa yang harus saya lakukan, tapi saya tidak akan pernah berhenti”.
    Solusi
  • Parameter optimasi melalui retrospeksi sejarah.
  • Kombinasi indikator tren ((seperti ADX) untuk memfilter sinyal.
  • Setel Dynamic Loss Counter dengan nilai terendah.

Arah optimasi

  1. Integrasi multi-indikator: Masukkan MACD atau Brin Band untuk konfirmasi sinyal yang diperkuat.
  2. Pengaturan parameter dinamisRSI: RSI panjang dan stop loss rasio disesuaikan dengan fluktuasi pasar.
  3. Peningkatan kerangka waktu: Strategi pengujian kinerja pada periode yang lebih tinggi atau lebih rendah (seperti sinar matahari / 1 jam).
  4. Optimalisasi Pembelajaran Mesin: Mengoptimalkan kondisi masuk dan keluar dengan menggunakan model pelatihan data historis.
  5. Upgrade manajemen dana: Mengubah rasio modal per transaksi sesuai dengan dinamika nilai bersih akun.

Meringkaskan

Strategi ini memungkinkan perdagangan berayun melalui sinyal silang RSI dan MA, digabungkan dengan alat manajemen risiko bertingkat, menyeimbangkan potensi keuntungan dan pengendalian risiko. Kelebihannya terletak pada logika yang jelas dan disiplin yang ketat, tetapi perlu dioptimalkan lebih lanjut untuk beradaptasi dengan lingkungan pasar yang berbeda.

Kode Sumber Strategi
/*backtest
start: 2024-04-23 00:00:00
end: 2024-09-06 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=5
strategy("📈 RX Swing ", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)


// === INPUTS ===
rsiLength     = input.int(14, title="RSI Length")
maLength      = input.int(14, title="RSI MA Length")
maType        = input.string("SMA", options=["SMA", "EMA"], title="MA Type for RSI")
sl_pct        = input.float(1.5, title="Stop Loss %", minval=0.0)
tp_pct        = input.float(2.5, title="Take Profit %", minval=0.0)
capitalPerTrade = input.float(15000, title="Capital Per Trade (INR)", minval=1)
lotSize       = input.int(50, title="Lot Size (Nifty Options Lot)", minval=1)
trail_points  = input.float(10, title="Trailing SL Points", minval=0.1)

// === CALCULATIONS ===
rsi    = ta.rsi(close, rsiLength)
rsiMA  = maType == "SMA" ? ta.sma(rsi, maLength) : ta.ema(rsi, maLength)

longSignal  = ta.crossover(rsi, rsiMA)
shortSignal = ta.crossunder(rsi, rsiMA)

// === TRADING WINDOW ===
canTrade = true
exitTime = false

// === STATE VARIABLES ===
var float entryPrice = na
var bool inTrade = false
var string tradeDir = ""
var int lossCount = 0
var float trailHigh = na
var float trailLow = na

// === EXIT TRIGGER ===
exitNow = false
exitReason = ""

// === POSITION SIZE BASED ON CAPITAL ===
positionSize = (capitalPerTrade / close) * lotSize

// === ENTRY LOGIC (AFTER CLOSE OF CANDLE) ===
if (canTrade and lossCount < 2)
    if (longSignal and not inTrade and barstate.isconfirmed)  // Ensure the signal happens after candle close
        strategy.entry("Buy Call", strategy.long, qty=positionSize)
        entryPrice := close
        trailHigh := close
        inTrade := true
        tradeDir := "CALL"

    else if (shortSignal and not inTrade and barstate.isconfirmed)  // Ensure the signal happens after candle close
        strategy.entry("Buy Put", strategy.short, qty=positionSize)
        entryPrice := close
        trailLow := close
        inTrade := true
        tradeDir := "PUT"

// === TRAILING STOP-LOSS LOGIC ===
if (inTrade)
    if (tradeDir == "CALL")
        trailHigh := math.max(trailHigh, close)
        if (close <= trailHigh - trail_points)
            strategy.close("Buy Call", comment="CALL Trailing SL Hit")
            exitNow := true
            exitReason := "Trail SL"
            inTrade := false
            lossCount := lossCount + 1

    if (tradeDir == "PUT")
        trailLow := math.min(trailLow, close)
        if (close >= trailLow + trail_points)
            strategy.close("Buy Put", comment="PUT Trailing SL Hit")
            exitNow := true
            exitReason := "Trail SL"
            inTrade := false
            lossCount := lossCount + 1

// === REVERSAL EXIT LOGIC ===
if (inTrade)
    if (tradeDir == "CALL" and shortSignal)
        strategy.close("Buy Call", comment="CALL Exit on Reversal")
        exitNow := true
        exitReason := "Reversal"
        inTrade := false
        if (strategy.position_size < 0)
            lossCount := lossCount + 1

    if (tradeDir == "PUT" and longSignal)
        strategy.close("Buy Put", comment="PUT Exit on Reversal")
        exitNow := true
        exitReason := "Reversal"
        inTrade := false
        if (strategy.position_size > 0)
            lossCount := lossCount + 1

// === TP/SL EXIT LOGIC ===
if (inTrade)
    tpLevel = entryPrice * (1 + tp_pct / 100)
    slLevel = entryPrice * (1 - sl_pct / 100)

    if (strategy.position_size > 0)
        if (close >= tpLevel)
            strategy.close("Buy Call", comment="CALL TP Hit")
            exitNow := true
            exitReason := "TP"
            inTrade := false
        else if (close <= slLevel)
            strategy.close("Buy Call", comment="CALL SL Hit")
            exitNow := true
            exitReason := "SL"
            inTrade := false
            lossCount := lossCount + 1

    if (strategy.position_size < 0)
        tpLevel = entryPrice * (1 - tp_pct / 100)
        slLevel = entryPrice * (1 + sl_pct / 100)

        if (close <= tpLevel)
            strategy.close("Buy Put", comment="PUT TP Hit")
            exitNow := true
            exitReason := "TP"
            inTrade := false
        else if (close >= slLevel)
            strategy.close("Buy Put", comment="PUT SL Hit")
            exitNow := true
            exitReason := "SL"
            inTrade := false
            lossCount := lossCount + 1

// === RESET LOSS COUNT ON NEW DAY ===
if (hour == 9 and minute == 15)
    lossCount := 0

// === MARKUPS ===
plotshape(longSignal and canTrade and lossCount < 2 and barstate.isconfirmed, title="📗 CALL Entry", location=location.belowbar, style=shape.triangleup, color=color.green, size=size.small, text="CALL")
plotshape(shortSignal and canTrade and lossCount < 2 and barstate.isconfirmed, title="📕 PUT Entry", location=location.abovebar, style=shape.triangledown, color=color.red, size=size.small, text="PUT")
plotshape(exitNow and exitReason == "TP", location=location.belowbar, style=shape.xcross, color=color.green, size=size.tiny, title="✅ TP Exit", text="TP")
plotshape(exitNow and exitReason == "SL", location=location.abovebar, style=shape.xcross, color=color.red, size=size.tiny, title="❌ SL Exit", text="SL")
plotshape(exitNow and exitReason == "Reversal", location=location.abovebar, style=shape.circle, color=color.fuchsia, size=size.tiny, title="🔁 Reversal Exit", text="REV")
plotshape(exitNow and exitReason == "Trail SL", location=location.abovebar, style=shape.square, color=color.yellow, size=size.tiny, title="🔂 Trailing SL Exit", text="Trail")