Trend didorong penunjuk dinamik mengikut strategi digabungkan dengan sistem pengurusan risiko

EMA RSI DMI ATR MOM VOL
Tarikh penciptaan: 2025-02-10 14:20:44 Akhirnya diubah suai: 2025-02-10 14:20:44
Salin: 0 Bilangan klik: 407
1
fokus pada
1617
Pengikut

Trend didorong penunjuk dinamik mengikut strategi digabungkan dengan sistem pengurusan risiko

Gambaran keseluruhan

Ini adalah strategi pengesanan trend berdasarkan pelbagai petunjuk teknikal dan pengurusan risiko. Strategi ini menggunakan pelbagai petunjuk teknikal seperti purata bergerak, indikator kuat relatif (RSI), indikator pergerakan (DMI) untuk mengenal pasti trend pasaran, dan melindungi keselamatan dana melalui kaedah kawalan risiko seperti stop loss dinamik, pengurusan kedudukan dan had pengeluaran maksimum bulanan.

Prinsip Strategi

Strategi ini menggunakan mekanisme pengesahan trend bertingkat:

  1. Arah trend berdasarkan purata bergerak (EMA) dengan indeks kitaran 8/21/50
  2. Menggunakan garis tengah saluran harga sebagai penapis trend
  3. Gabungan RSI rata-rata ((5 kitaran) pergerakan dalam julat 35-65 untuk menyaring pecah palsu
  4. Kekuatan trend disahkan melalui penunjuk DMI ((14 kitaran)
  5. Menggunakan penunjuk momentum ((8 kitaran) dan peningkatan jumlah pertukaran untuk mengesahkan kesinambungan trend
  6. Menggunakan Hentian Dinamis Berasaskan ATR untuk Mengendalikan Risiko
  7. Pengurusan kedudukan dengan model risiko tetap, dengan risiko 5% dari modal awal setiap dagangan
  8. Tetapkan had pengeluaran bulanan maksimum 10% untuk mengelakkan kerugian yang berlebihan

Kelebihan Strategik

  1. Memperiksa pelbagai petunjuk teknikal untuk meningkatkan ketepatan penilaian trend
  2. Mekanisme Hentikan Kerosakan Dinamik Mengendalikan Risiko Perdagangan Tunggal
  3. Pengurusan kedudukan dengan risiko tetap menjadikan penggunaan dana lebih munasabah
  4. Batasan pengeluaran maksimum bulanan menyediakan perlindungan sistematik terhadap risiko
  5. Menambah kebolehpercayaan pengesahan trend dengan penggabungan penunjuk kuantiti
  6. Rasio keuntungan dan kerugian 2:1 meningkatkan keuntungan jangka panjang

Risiko Strategik

  1. Penggunaan pelbagai indikator boleh menyebabkan kelewatan isyarat
  2. Isyarat palsu yang sering berlaku dalam pasaran yang bergolak
  3. Model risiko tetap mungkin tidak cukup fleksibel apabila kadar turun naik berubah secara mendadak
  4. Batasan pengeluaran bulanan boleh menyebabkan peluang perdagangan yang penting terlepas
  5. Kembali ke arah yang lebih buruk apabila trend berbalik

Arah pengoptimuman strategi

  1. Memperkenalkan parameter penunjuk yang disesuaikan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza
  2. Membangunkan program pengurusan kedudukan yang lebih fleksibel untuk mengambil kira perubahan kadar turun naik pasaran
  3. Penilaian kuantitatif untuk meningkatkan intensiti trend, optimumkan masa kemasukan
  4. Mencipta mekanisme penghadaman risiko bulanan yang lebih bijak
  5. Menambah modul pengenalan keadaan pasaran untuk menyesuaikan parameter strategi dalam keadaan pasaran yang berbeza

ringkaskan

Strategi ini membangunkan sistem perdagangan trend-tracking yang agak lengkap melalui penggunaan komprehensif indikator teknikal berbilang dimensi. Kelebihan strategi ini adalah kerangka pengurusan risiko yang komprehensif, termasuk hentian dinamik, pengurusan kedudukan dan kawalan penarikan balik. Walaupun terdapat risiko ketinggalan tertentu, strategi ini dijangka dapat mengekalkan prestasi yang stabil dalam pelbagai keadaan pasaran melalui pengoptimuman dan penambahbaikan.

Kod sumber strategi
/*backtest
start: 2024-02-10 00:00:00
end: 2025-02-08 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("High Win-Rate Crypto Strategy with Drawdown Limit", overlay=true, initial_capital=10000, default_qty_type=strategy.fixed, process_orders_on_close=true)

// Moving Averages
ema8 = ta.ema(close, 8)
ema21 = ta.ema(close, 21)
ema50 = ta.ema(close, 50)

// RSI settings
rsi = ta.rsi(close, 14)
rsi_ma = ta.sma(rsi, 5)

// Momentum and Volume
mom = ta.mom(close, 8)
vol_ma = ta.sma(volume, 15)
high_vol = volume > vol_ma * 1

// Trend Strength
[diplus, diminus, _] = ta.dmi(14, 14)
strong_trend = diplus > 20 or diminus > 20

// Price channels
highest_15 = ta.highest(high, 15)
lowest_15 = ta.lowest(low, 15)
mid_channel = (highest_15 + lowest_15) / 2

// Trend Conditions
uptrend = ema8 > ema21 and close > mid_channel
downtrend = ema8 < ema21 and close < mid_channel

// Entry Conditions
longCondition = uptrend and ta.crossover(ema8, ema21) and rsi_ma > 35 and rsi_ma < 65 and mom > 0 and high_vol and diplus > diminus
shortCondition = downtrend and ta.crossunder(ema8, ema21) and rsi_ma > 35 and rsi_ma < 65 and mom < 0 and high_vol and diminus > diplus

// Dynamic Stop Loss based on ATR
atr = ta.atr(14)
stopSize = atr * 1.3

// Calculate position size based on fixed risk
riskAmount = strategy.initial_capital * 0.05

getLongPosSize(riskAmount, stopSize) => riskAmount / stopSize    
getShortPosSize(riskAmount, stopSize) => riskAmount / stopSize

// Monthly drawdown tracking
var float peakEquity = na
var int currentMonth = na
var float monthlyDrawdown = na
maxDrawdownPercent = 10

// Variables for SL and TP
var float stopLoss = na
var float takeProfit = na
var bool inTrade = false
var string tradeType = na

// Reset monthly metrics
monthNow = month(time)
if na(currentMonth) or currentMonth != monthNow
    currentMonth := monthNow
    peakEquity := strategy.equity
    monthlyDrawdown := 0.0

// Update drawdown metrics
peakEquity := math.max(peakEquity, strategy.equity)
monthlyDrawdown := math.max(monthlyDrawdown, (peakEquity - strategy.equity) / peakEquity * 100)

// Trading condition
canTrade = monthlyDrawdown < maxDrawdownPercent

// Entry and Exit Logic
if strategy.position_size == 0
    inTrade := false
    if longCondition and canTrade
        stopLoss := low - stopSize
        takeProfit := close + (stopSize * 2)
        posSize = getLongPosSize(riskAmount, stopSize)
        strategy.entry("Long", strategy.long, qty=posSize)
        strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)
        inTrade := true
        tradeType := "long"
    if shortCondition and canTrade
        stopLoss := high + stopSize
        takeProfit := close - (stopSize * 2)
        posSize = getShortPosSize(riskAmount, stopSize)
        strategy.entry("Short", strategy.short, qty=posSize)
        strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)
        inTrade := true
        tradeType := "short"

// Plot variables
plotSL = inTrade ? stopLoss : na
plotTP = inTrade ? takeProfit : na

// EMA Plots
plot(ema8, "EMA 8", color=color.blue, linewidth=1)
plot(ema21, "EMA 21", color=color.yellow, linewidth=1)
plot(ema50, "EMA 50", color=color.white, linewidth=1)

// SL and TP Plots
plot(plotSL, "Stop Loss", color=color.red, style=plot.style_linebr, linewidth=1)
plot(plotTP, "Take Profit", color=color.green, style=plot.style_linebr, linewidth=1)

// Signal Plots
plotshape(longCondition and canTrade, "Buy Signal", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition and canTrade, "Sell Signal", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// SL/TP Markers with correct y parameter syntax
plot(inTrade ? stopLoss : na, "Stop Loss Level", style=plot.style_circles, color=color.red, linewidth=2)
plot(inTrade ? takeProfit : na, "Take Profit Level", style=plot.style_circles, color=color.green, linewidth=2)

// Background Color
noTradingMonth = monthlyDrawdown >= maxDrawdownPercent
bgcolor(noTradingMonth ? color.new(color.gray, 80) : uptrend ? color.new(color.green, 95) : downtrend ? color.new(color.red, 95) : na)

// Drawdown Label
var label drawdownLabel = na
label.delete(drawdownLabel)
drawdownLabel := label.new(bar_index, high, "Monthly Drawdown: " + str.tostring(monthlyDrawdown, "#.##") + "%\n" + (noTradingMonth ? "NO TRADING" : "TRADING ALLOWED"), style=label.style_label_down, color=noTradingMonth ? color.red : color.green, textcolor=color.white, size=size.small)