Sumber daya yang dimuat... Pemuatan...

Sistem Manajemen Modal Berbasis Kekuatan Tren RSI dan ADX

Penulis:ChaoZhang, Tanggal: 2024-12-20 14:24:34
Tag:RSIADXATREMATP

img

Gambaran umum

Strategi ini adalah sistem hibrida yang menggabungkan mengikuti tren dan perdagangan swing, mencapai perdagangan yang stabil melalui skrining beberapa indikator teknis dan manajemen modal yang ketat. Strategi ini mengadopsi pendekatan mengambil keuntungan bertahap untuk mengunci keuntungan sambil menetapkan kontrol penarikan maksimum untuk mengelola risiko sambil memastikan pengembalian. Sistem ini menggunakan indikator momentum RSI dan indikator kekuatan tren ADX sebagai pemicu sinyal perdagangan utama, dikombinasikan dengan volume, ATR, dan EMA beberapa filter untuk memastikan efektivitas perdagangan.

Prinsip Strategi

Logika inti dari strategi ini mencakup elemen kunci berikut:

  1. Kondisi masuk memerlukan kepuasan bersamaan: volume perdagangan lebih dari 1M, ADX lebih dari 25 menunjukkan tren yang jelas, RSI lebih dari 60 menunjukkan momentum yang kuat, ATR lebih dari 2 memastikan rentang volatilitas yang cukup, harga di atas rata-rata bergerak 200 hari mempertahankan tren naik.
  2. Desain mengambil keuntungan bertahap: pertama mengambil keuntungan pada 15%, menutup posisi 50%; mengambil keuntungan kedua pada 30%, menutup posisi yang tersisa.
  3. Kontrol stop loss: Posisi stop loss 15% melindungi modal, sementara juga keluar ketika RSI turun di bawah 50 atau harga pecah di bawah 200 MA.
  4. Manajemen drawdown: pelacakan real-time dari equity strategi, memicu kontrol risiko sistemik dan kliring semua posisi ketika drawdown melebihi 30%.

Keuntungan Strategi

  1. Validasi silang beberapa indikator teknis meningkatkan keandalan sinyal perdagangan
  2. Desain mengambil keuntungan bertahap menyeimbangkan keuntungan jangka pendek dan menangkap tren utama
  3. Sistem pengendalian risiko lengkap, termasuk stop-loss saham individu dan pengendalian risiko sistemik
  4. Kondisi perdagangan yang ketat secara efektif menyaring sinyal palsu
  5. Logika strategi yang jelas, mudah menyesuaikan parameter berdasarkan kondisi pasar

Risiko Strategi

  1. Penyaringan beberapa indikator dapat kehilangan beberapa peluang perdagangan
  2. Stop-loss yang sering dapat dipicu di pasar osilasi
  3. Pengaturan stop loss dan take profit persentase tetap mungkin tidak cocok untuk semua lingkungan pasar
  4. Strategi bergantung pada indikator teknis, mungkin tidak memiliki respon yang cukup terhadap peristiwa mendadak mendasar
  5. Membutuhkan skala modal yang lebih besar untuk memenuhi persyaratan volume perdagangan

Arah Optimasi Strategi

  1. Memperkenalkan mekanisme stop loss dan take profit yang adaptif, menyesuaikan secara dinamis berdasarkan volatilitas pasar
  2. Tambahkan modul penilaian lingkungan pasar, menggunakan pengaturan parameter yang berbeda dalam kondisi pasar yang berbeda
  3. Mengoptimalkan metode perhitungan ADX, mempertimbangkan penggunaan periode adaptatif
  4. Termasuk pertimbangan biaya transaksi, mengoptimalkan sistem manajemen posisi
  5. Mengembangkan mekanisme penyaringan sinyal berbasis pembelajaran mesin

Ringkasan

Strategi ini adalah sistem perdagangan yang komprehensif yang mencapai perdagangan yang stabil melalui beberapa indikator teknis dan manajemen modal yang ketat. Keuntungan utama strategi terletak pada sistem kontrol risiko lengkap dan mekanisme mengambil keuntungan bertahap, tetapi perlu diperhatikan penyesuaian parameter yang tepat waktu berdasarkan kondisi pasar dalam aplikasi praktis.


/*backtest
start: 2023-12-20 00:00:00
end: 2024-12-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Swing Strategy (<30% DD)", shorttitle="SwingStratDD", overlay=true)

//-----------------------------------------------------
// Example Indicators and Logic
//-----------------------------------------------------
emaLen   = input.int(200, "EMA Length", minval=1)
emaValue = ta.ema(close, emaLen)

plot(emaValue, color=color.yellow, linewidth=2, title="EMA 200")


//-----------------------------------------------------
// User Inputs
//-----------------------------------------------------
adxLen           = input.int(14,  "ADX Length",      minval=1)
rsiLen           = input.int(14,  "RSI Length",      minval=1)
atrLen           = input.int(14,  "ATR Length",      minval=1)

rsiBuyThresh     = input.float(60, "RSI Buy Threshold",     minval=1, maxval=100)
adxThresh        = input.float(25, "ADX Threshold (Trend)", minval=1, maxval=100)
minVolume        = input.float(1e6,"Minimum Volume",         minval=1)
minATR           = input.float(2,  "Minimum ATR(14)",        minval=0.1, step=0.1)

stopLossPerc     = input.float(15, "Stop-Loss %",            minval=0.1, step=0.1)
// We’ll do two partial take-profit levels to aim for consistent cashflow:
takeProfit1Perc  = input.float(15, "Take-Profit1 %",         minval=0.1, step=0.1)
takeProfit2Perc  = input.float(30, "Take-Profit2 %",         minval=0.1, step=0.1)

ddLimit          = input.float(30, "Max Drawdown %",         minval=0.1, step=0.1)

//-----------------------------------------------------
// Indicators
//-----------------------------------------------------

rsiValue = ta.rsi(close, rsiLen)
atrValue = ta.atr(atrLen)

//--- Fully Manual ADX Calculation ---
upMove      = high - high[1]
downMove    = low[1] - low
plusDM      = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM     = (downMove > upMove and downMove > 0) ? downMove : 0.0
smPlusDM    = ta.rma(plusDM, adxLen)
smMinusDM   = ta.rma(minusDM, adxLen)
smTR        = ta.rma(ta.tr, adxLen)
plusDI      = (smPlusDM / smTR) * 100
minusDI     = (smMinusDM / smTR) * 100
dx          = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adxValue    = ta.rma(dx, adxLen)

//-----------------------------------------------------
// Screener-Like Conditions (Technical Only)
//-----------------------------------------------------
volumeCondition   = volume > minVolume
adxCondition      = adxValue > adxThresh
rsiCondition      = rsiValue > rsiBuyThresh
atrCondition      = atrValue > minATR
aboveEmaCondition = close > emaValue

longCondition = volumeCondition and adxCondition and rsiCondition and atrCondition and aboveEmaCondition

//-----------------------------------------------------
// Strategy Entry / Exit Logic
//-----------------------------------------------------
var bool inTrade = false

// Entry
if longCondition and not inTrade
    strategy.entry("Long", strategy.long)

// Basic Exit Condition: RSI < 50 or Price < EMA
exitCondition = (rsiValue < 50) or (close < emaValue)
if inTrade and exitCondition
    strategy.close("Long")

// Update inTrade status
inTrade := strategy.position_size > 0

//-----------------------------------------------------
// Multi-Level Stop-Loss & Partial Profits
//-----------------------------------------------------
if inTrade
    float entryPrice = strategy.position_avg_price

    // Stop-Loss
    float stopPrice     = entryPrice * (1 - stopLossPerc / 100)

    // Two partial take-profit levels
    float tp1Price      = entryPrice * (1 + takeProfit1Perc / 100)
    float tp2Price      = entryPrice * (1 + takeProfit2Perc / 100)

    // Example approach: exit half at TP1, half at TP2
    strategy.exit("TP1/SL",     from_entry="Long", stop=stopPrice,    limit=tp1Price, qty_percent=50)
    strategy.exit("TP2",        from_entry="Long", limit=tp2Price,    qty_percent=50)

//-----------------------------------------------------
// Dynamic Drawdown Handling
//-----------------------------------------------------
var float peakEquity = strategy.equity
peakEquity := math.max(peakEquity, strategy.equity)

currentDrawdownPerc = (peakEquity - strategy.equity) / peakEquity * 100
if currentDrawdownPerc > ddLimit
    strategy.close_all("Max Drawdown Exceeded")

//-----------------------------------------------------
// Plotting
//-----------------------------------------------------
plot(emaValue, title="EMA 200", color=color.yellow, linewidth=2)
plotchar(rsiValue, title="RSI", char='●', location=location.bottom, color=color.new(color.teal, 50))
plot(adxValue, title="Manual ADX", color=color.orange)


Berkaitan

Lebih banyak