RSI MA Crossover Swing Trading Strategy dengan Sistem Trailing Stop

RSI MA CROSSOVER TRAILING SL Swing Trading risk management
Tarikh penciptaan: 2025-04-24 16:51:14 Akhirnya diubah suai: 2025-04-24 16:51:14
Salin: 4 Bilangan klik: 349
2
fokus pada
319
Pengikut

RSI MA Crossover Swing Trading Strategy dengan Sistem Trailing Stop RSI MA Crossover Swing Trading Strategy dengan Sistem Trailing Stop

Gambaran keseluruhan

Strategi ini adalah strategi dagangan berayun berdasarkan RSI (indices yang agak kuat) yang bersilang dengan rata-rata bergerak (MA) yang direka khas untuk carta 4 jam. Strategi ini menghasilkan isyarat dagangan melalui garpu emas dan garpu mati RSI dan MA, dan menggabungkan pelbagai alat pengurusan risiko, termasuk mekanisme berhenti / hentikan yang tetap, penjejakan hentikan dan mundur. Strategi ini juga menetapkan had kerugian berturut-turut, dengan perdagangan ditangguhkan sehingga hari berikutnya ditetapkan apabila kerugian berturut-turut melebihi dua.

Prinsip Strategi

  1. Pengharaman jangka masaStrategi ini hanya beroperasi pada carta 4 jam untuk memastikan isyarat dagangan selaras dengan kitaran masa yang direka.
  2. Pengiraan penunjuk: menggunakan RSI ((panjang lalai 14) dan purata bergerak ((SMA atau EMA, panjang lalai 14) untuk menghasilkan isyarat.
    • Fork ((MA di atas RSI) mencetuskan isyarat beli ((buat lebih) )
    • Fork mati ((RSI bawah melalui MA) mencetuskan isyarat menjual ((keadaan kosong) }}.
  3. Pengurusan kedudukanUkuran kedudukan berdasarkan peruntukan modal dan harga semasa untuk setiap transaksi.
  4. Mekanisme pengeluaran
    • Penangguhan tetap / Stop StopBerdasarkan peratusan, stop loss (default 1.5%) dan stop loss (default 2.5%) ditetapkan.
    • Tracking Stop Loss: Penarikan diri akan dicetuskan apabila harga berundur dari titik tertinggi dengan jumlah titik yang ditetapkan (default 10 points).
    • Keluar: Berhenti beraksi apabila isyarat berbalik muncul.
  5. Kawalan Risiko
    • Penangguhan perdagangan selepas kerugian berturut-turut dua kali, setiap hari 9.15 reset loss counter.

Analisis kelebihan

  1. Pengesahan isyarat multidimensiIa juga boleh digunakan untuk menjimatkan masa dalam tempoh yang lama.
  2. Pengurusan risiko dinamik: Tracking Stop Loss Lock Profit, Fixed Stop Loss Limit Loss.
  3. Pengurusan kewangan yang ketatBergantung kepada kedudukan modal yang dialokasikan, mengelakkan pengaruh berlebihan.
  4. Kawalan DisiplinIa adalah satu cara untuk mengelakkan perdagangan emosi daripada berlaku.
  5. Tanda visualTag grafik yang jelas membantu mengenal pasti isyarat dan titik keluar dengan cepat.

Analisis risiko

  1. Kepekaan ParameterPanjang RSI dan MA mempunyai kesan yang besar terhadap kualiti isyarat dan perlu dioptimumkan untuk menyesuaikan diri dengan turun naik pasaran.
  2. Pertunjukan pasaran trendDalam trend yang kuat, RSI mungkin berlarutan untuk membeli/menjual, menyebabkan isyarat terlewat.
  3. Pengharaman jangka masa: Hanya berlaku untuk carta 4 jam, kitaran lain perlu disahkan semula.
  4. Risiko kerugian berterusanIa adalah satu peluang yang mungkin terlepas sebelum anda menetapkan semula pengiraan kerugian anda.
    Penyelesaian
  • Parameter pengoptimuman melalui pengesanan semula sejarah.
  • Gabungan penunjuk trend ((seperti ADX) penapis isyarat.
  • Tetapkan nilai terhad untuk pengira kerugian dinamik.

Arah pengoptimuman

  1. Perpaduan pelbagai indikator: Pengenalan MACD atau pengesahan isyarat penguat jalur Brin.
  2. Pengaturan parameter dinamikRSI: RSI panjang dan stop loss mengikut turun naik pasaran.
  3. Peningkatan jangka masaStrategi ujian: prestasi dalam tempoh yang lebih tinggi atau lebih rendah (seperti sinar matahari / 1 jam).
  4. Pengoptimuman Pembelajaran Mesin: Menggunakan model latihan data sejarah untuk mengoptimumkan kemasukan dan keluar.
  5. Pengurusan dana yang lebih baik: Sesuaikan peratusan modal setiap transaksi mengikut dinamika nilai bersih akaun.

ringkaskan

Strategi ini membolehkan perdagangan berayun melalui tanda silang RSI dan MA, digabungkan dengan alat pengurusan risiko bertingkat, mengimbangi potensi keuntungan dan kawalan risiko. Kelebihannya terletak pada logik yang jelas dan disiplin yang ketat, tetapi perlu dioptimumkan lebih lanjut untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

Kod 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")