Sistem manajemen uang berdasarkan momentum RSI dan kekuatan tren ADX

RSI ADX ATR EMA TP
Tanggal Pembuatan: 2024-12-20 14:24:34 Akhirnya memodifikasi: 2024-12-20 14:24:34
menyalin: 0 Jumlah klik: 397
1
fokus pada
1617
Pengikut

Sistem manajemen uang berdasarkan momentum RSI dan kekuatan tren ADX

Ringkasan

Strategi ini adalah sistem strategi campuran yang menggabungkan pelacakan tren dan perdagangan getaran, untuk mencapai perdagangan yang stabil melalui pemfilteran indikator teknis dan manajemen dana yang ketat. Strategi ini menggunakan metode stop-loss bertahap untuk mengunci keuntungan, sambil mengatur kontrol penarikan maksimum, dan mengendalikan risiko sambil menjamin keuntungan. Sistem ini menggunakan indikator momentum RSI dan indikator kekuatan tren ADX sebagai pemicu sinyal perdagangan utama, dan menggabungkan volume perdagangan, ATR dan beberapa filter seperti EMA untuk memastikan efektivitas perdagangan.

Prinsip Strategi

Logika inti dari strategi ini mencakup elemen-elemen kunci berikut:

  1. Syarat masuknya adalah: volume transaksi lebih dari 1 juta, ADX lebih dari 25 menunjukkan tren yang jelas, RSI lebih dari 60 menunjukkan momentum yang kuat, ATR lebih dari 2 memastikan ruang fluktuasi yang cukup, dan harga terus naik di atas garis rata-rata 200 hari.
  2. Desain stop-loss bertahap: stop-loss pertama adalah 15%, posisi kosong 50%; stop-loss kedua adalah 30%, posisi kosong yang tersisa. Desain ini dapat mengunci sebagian keuntungan lebih awal, tetapi tidak akan melewatkan tren besar.
  3. Kontrol Stop Loss: Siapkan 15% dari Stop Loss Protection, dan keluar dari posisi ketika RSI di bawah 50 atau harga di bawah 200
  4. Manajemen penarikan: real-time pelacakan strategi nilai bersih, memicu kontrol angin sistematis ketika penarikan melebihi 30%, mengosongkan semua kepemilikan.

Keunggulan Strategis

  1. Beberapa indikator teknis saling melakukan validasi silang untuk meningkatkan keandalan sinyal perdagangan
  2. Desain stepper stop yang mempertimbangkan keuntungan jangka pendek dan kebutuhan untuk menangkap tren besar
  3. Sistem pengendalian risiko yang baik, termasuk stop loss per saham dan pengendalian risiko yang sistematis
  4. Kondisi transaksi yang ketat, efektif memfilter sinyal palsu
  5. Logika strategi yang jelas, memungkinkan penyesuaian parameter sesuai dengan kondisi pasar

Risiko Strategis

  1. Filter multi-indikator dapat menyebabkan beberapa peluang perdagangan yang terlewatkan
  2. Stop loss dapat dipicu secara berkala di pasar yang bergejolak
  3. Stop loss dan stop loss setup dengan persentase tetap mungkin tidak cocok untuk semua kondisi pasar
  4. Strategi bergantung pada indikator teknis, dan mungkin kurang responsif terhadap insiden mendasar.
  5. Dibutuhkan modal yang lebih besar untuk memenuhi persyaratan volume transaksi

Arah optimasi strategi

  1. Memperkenalkan Stop Loss Adaptive, yang menyesuaikan dengan dinamika volatilitas pasar
  2. Tambahkan modul penilaian kondisi pasar, menggunakan parameter yang berbeda dalam kondisi pasar yang berbeda
  3. Optimalkan metode perhitungan ADX, pertimbangkan untuk menggunakan siklus adaptasi
  4. Menambahkan pertimbangan biaya transaksi, mengoptimalkan sistem manajemen posisi
  5. Mengembangkan mekanisme pemfilteran sinyal berbasis pembelajaran mesin

Meringkaskan

Strategi ini adalah sistem perdagangan yang komprehensif, yang memungkinkan perdagangan yang stabil melalui banyak indikator teknis dan manajemen dana yang ketat. Keunggulan inti dari strategi ini adalah sistem kontrol risiko dan mekanisme penghentian bertahap yang lengkap, tetapi juga perlu memperhatikan pengaturan parameter yang disesuaikan sesuai dengan situasi pasar dalam aplikasi nyata. Ruang untuk pengoptimalan lebih lanjut dari strategi ini terutama terletak pada penyesuaian dinamis parameter dan perbaikan mekanisme penyaringan sinyal.

Kode Sumber Strategi
/*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)