Sumber dimuat naik... memuat...

Sistem Pengurusan Modal Berasaskan Momentum RSI dan ADX Trend Strength

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

img

Ringkasan

Strategi ini adalah sistem hibrid yang menggabungkan trend berikut dan perdagangan ayunan, mencapai perdagangan yang stabil melalui skrining pelbagai penunjuk teknikal dan pengurusan modal yang ketat. Strategi ini mengamalkan pendekatan mengambil keuntungan bertahap untuk mengunci keuntungan sambil menetapkan kawalan pengeluaran maksimum untuk menguruskan risiko sambil memastikan pulangan. Sistem ini menggunakan penunjuk momentum RSI dan penunjuk kekuatan trend ADX sebagai pencetus isyarat perdagangan utama, digabungkan dengan jumlah, ATR, dan pelbagai penapis EMA untuk memastikan keberkesanan perdagangan.

Prinsip Strategi

Logik teras strategi merangkumi elemen utama berikut:

  1. Syarat kemasukan memerlukan kepuasan serentak: jumlah dagangan lebih daripada 1M, ADX lebih daripada 25 menunjukkan trend yang jelas, RSI lebih daripada 60 menunjukkan momentum yang kuat, ATR lebih daripada 2 memastikan julat turun naik yang mencukupi, harga di atas purata bergerak 200 hari mengekalkan trend menaik.
  2. Reka bentuk mengambil keuntungan bertahap: mengambil keuntungan pertama pada 15%, menutup kedudukan 50%; mengambil keuntungan kedua pada 30%, menutup kedudukan yang tersisa. Reka bentuk ini kedua-dua mengunci keuntungan separa lebih awal dan tidak terlepas tren besar.
  3. Kawalan Stop-Loss: 15% kedudukan stop-loss melindungi modal, sementara juga keluar apabila RSI jatuh di bawah 50 atau harga pecah di bawah 200 MA.
  4. Pengurusan pengambilan: mengesan ekuiti strategi secara real-time, mencetuskan kawalan risiko sistemik dan membersihkan semua kedudukan apabila pengambilan melebihi 30%.

Kelebihan Strategi

  1. Penanda teknikal berbilang penanda silang meningkatkan kebolehpercayaan isyarat dagangan
  2. Reka bentuk mengambil keuntungan yang bertahap menyeimbangkan keuntungan jangka pendek dan menangkap trend utama
  3. Sistem kawalan risiko lengkap, termasuk stok individu stop-loss dan kawalan risiko sistemik
  4. Syarat perdagangan yang ketat berkesan menapis isyarat palsu
  5. Logik strategi yang jelas, mudah menyesuaikan parameter berdasarkan keadaan pasaran

Risiko Strategi

  1. Penapisan pelbagai penunjuk mungkin kehilangan beberapa peluang perdagangan
  2. Stop-loss yang kerap boleh dicetuskan di pasaran berayun
  3. Tetapan stop loss dan mengambil keuntungan peratusan tetap mungkin tidak sesuai untuk semua persekitaran pasaran
  4. Strategi bergantung kepada penunjuk teknikal, mungkin tidak cukup bertindak balas terhadap peristiwa mendadak asas
  5. Memerlukan skala modal yang lebih besar untuk memenuhi keperluan jumlah dagangan

Arahan Pengoptimuman Strategi

  1. Memperkenalkan mekanisme stop-loss dan mengambil keuntungan yang disesuaikan, menyesuaikan secara dinamik berdasarkan turun naik pasaran
  2. Tambah modul penilaian persekitaran pasaran, menggunakan tetapan parameter yang berbeza di bawah keadaan pasaran yang berbeza
  3. Mengoptimumkan kaedah pengiraan ADX, pertimbangkan untuk menggunakan tempoh penyesuaian
  4. Termasuk pertimbangan kos urus niaga, mengoptimumkan sistem pengurusan kedudukan
  5. Membangunkan mekanisme penapisan isyarat berasaskan pembelajaran mesin

Ringkasan

Strategi ini adalah sistem perdagangan komprehensif yang mencapai perdagangan yang stabil melalui pelbagai penunjuk teknikal dan pengurusan modal yang ketat. Kelebihan utama strategi terletak pada sistem kawalan risiko lengkap dan mekanisme mengambil keuntungan yang ditingkatkan, tetapi perhatian perlu diberikan kepada penyesuaian parameter tepat pada masanya berdasarkan keadaan pasaran dalam aplikasi praktikal. ruang pengoptimuman strategi lebih lanjut terutamanya terletak pada penyesuaian dinamik parameter dan peningkatan mekanisme penapisan isyarat.


/*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 lanjut