Sistem pengurusan wang berdasarkan momentum RSI dan kekuatan aliran ADX

RSI ADX ATR EMA TP
Tarikh penciptaan: 2024-12-20 14:24:34 Akhirnya diubah suai: 2024-12-20 14:24:34
Salin: 0 Bilangan klik: 397
1
fokus pada
1617
Pengikut

Sistem pengurusan wang berdasarkan momentum RSI dan kekuatan aliran ADX

Gambaran keseluruhan

Strategi ini adalah sistem strategi campuran yang menggabungkan trend-tracking dan perdagangan goyah, untuk mencapai perdagangan yang stabil melalui pemilihan pelbagai petunjuk teknikal dan pengurusan wang yang ketat. Strategi ini menggunakan kaedah berhenti beransur-ansur untuk mengunci keuntungan, sambil menetapkan kawalan penarikan maksimum, dan mengawal risiko sambil menjamin keuntungan. Sistem ini menggunakan indikator momentum RSI dan indikator kekuatan trend ADX sebagai pemicu isyarat perdagangan utama, dan menggabungkan jumlah perdagangan, penapis pelbagai seperti ATR dan EMA untuk memastikan kesahihan perdagangan.

Prinsip Strategi

Logik teras strategi merangkumi elemen utama berikut:

  1. Keperluan kemasukan juga dipenuhi: jumlah dagangan melebihi 1 juta, ADX melebihi 25 menunjukkan trend yang jelas, RSI melebihi 60 menunjukkan pergerakan yang kuat, ATR melebihi 2 memastikan ruang yang mencukupi untuk turun naik, dan harga terus meningkat di atas garis purata 200 hari.
  2. Reka bentuk penutupan langkah: penutupan pertama terletak pada 15%, kedudukan kosong 50%; penutupan kedua terletak pada 30%, meratakan kedudukan yang tersisa. Reka bentuk ini dapat mengunci sebahagian keuntungan lebih awal, tetapi tidak akan ketinggalan trend besar.
  3. Kawalan Hentian Kerosakan: Tetapkan perlindungan Hentian Kerosakan 15% dan keluar dari kedudukan kosong apabila RSI berada di bawah 50 atau harga di bawah garis purata 200.
  4. Pengurusan penarikan balik: Menjejaki nilai bersih strategi dalam masa nyata, mencetuskan kawalan angin sistematik apabila penarikan balik melebihi 30%, mengosongkan semua pegangan.

Kelebihan Strategik

  1. Penunjuk teknikal berbilang mengesahkan silang untuk meningkatkan kebolehpercayaan isyarat dagangan
  2. Reka bentuk penghadang langkah yang bersesuaian dengan keperluan untuk mendapatkan keuntungan dalam jangka pendek dan untuk menangkap trend besar
  3. Sistem kawalan risiko yang baik, termasuk penangguhan saham individu dan kawalan risiko sistematik
  4. Syarat perdagangan ketat, berkesan menapis isyarat palsu
  5. Logik strategi yang jelas untuk menyesuaikan parameter mengikut keadaan pasaran

Risiko Strategik

  1. Penapisan pelbagai indikator boleh menyebabkan peluang perdagangan terlewat
  2. Henti kerugian boleh dicetuskan dengan kerap dalam pasaran yang tidak menentu
  3. Tetapan Stop Loss dan Stop Loss Persentase Tetap mungkin tidak sesuai untuk semua keadaan pasaran
  4. Strategi bergantung kepada penunjuk teknikal yang mungkin kurang responsif terhadap kejadian mendasar yang tidak dijangka
  5. Memerlukan modal yang lebih besar untuk memenuhi keperluan jumlah transaksi

Arah pengoptimuman strategi

  1. Memperkenalkan mekanisme penangguhan kerugian yang menyesuaikan diri, menyesuaikan diri dengan pergerakan turun naik pasaran
  2. Menambah modul penilaian keadaan pasaran, menggunakan parameter yang berbeza dalam keadaan pasaran yang berbeza
  3. Mengoptimumkan kaedah pengiraan ADX, mempertimbangkan penggunaan kitaran penyesuaian
  4. Menambah kos urus niaga dan mengoptimumkan sistem pengurusan kedudukan
  5. Pembangunan mekanisme penapisan isyarat berasaskan pembelajaran mesin

ringkaskan

Strategi ini adalah sistem perdagangan yang komprehensif, yang membolehkan perdagangan yang mantap melalui pelbagai petunjuk teknikal dan pengurusan dana yang ketat. Kelebihan utama strategi ini adalah sistem kawalan risiko yang sempurna dan mekanisme penangguhan beransur-ansur, tetapi juga perlu berhati-hati dalam penggunaan sebenar untuk menyesuaikan parameter sesuai dengan keadaan pasaran.

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