Strategi mengikuti tren yang digerakkan oleh indikator dinamis dikombinasikan dengan sistem manajemen risiko

EMA RSI DMI ATR MOM VOL
Tanggal Pembuatan: 2025-02-10 14:20:44 Akhirnya memodifikasi: 2025-02-10 14:20:44
menyalin: 0 Jumlah klik: 407
1
fokus pada
1617
Pengikut

Strategi mengikuti tren yang digerakkan oleh indikator dinamis dikombinasikan dengan sistem manajemen risiko

Ringkasan

Ini adalah strategi pelacakan tren yang didasarkan pada beberapa indikator teknis dan manajemen risiko. Strategi ini secara komprehensif menggunakan beberapa indikator teknis seperti moving average, indikator relatif kuat (RSI), indikator bergerak (DMI) untuk mengidentifikasi tren pasar, dan melindungi keamanan dana melalui pengendalian risiko seperti stop loss dinamis, manajemen posisi, dan pembatasan penarikan maksimum bulanan.

Prinsip Strategi

Strategi ini menggunakan mekanisme pengakuan tren bertingkat-tingkat:

  1. Arah tren diukur dengan mengamati pergerakan rata-rata (EMA) melalui indeks siklus 8/21/50
  2. Menggunakan garis tengah saluran harga sebagai filter tren
  3. Kombinasi RSI rata-rata ((5 siklus) untuk memfilter pergerakan dalam kisaran 35-65 untuk melakukan false breakout
  4. Kekuatan tren dikonfirmasi melalui indikator DMI (siklus 14)
  5. Menggunakan indikator momentum ((8 siklus) dan amplifikasi volume transaksi untuk memverifikasi kontinuitas tren
  6. Menggunakan Stop Loss Dinamis Berbasis ATR untuk Mengontrol Risiko
  7. Mengimplementasikan manajemen posisi dengan mode risiko tetap dengan margin risiko 5% dari modal awal untuk setiap transaksi
  8. Tetapkan batas maksimum penarikan bulanan 10% untuk menghindari kerugian yang berlebihan

Keunggulan Strategis

  1. Verifikasi silang dari beberapa indikator teknis meningkatkan akurasi penilaian tren
  2. Mekanisme Stop Loss Dinamis Mengontrol Risiko Perdagangan Tunggal
  3. Manajemen posisi dengan risiko tetap membuat penggunaan dana lebih masuk akal
  4. Batas penarikan maksimum bulanan memberikan perlindungan terhadap risiko sistematis
  5. Kombinasi indikator volume pertukaran meningkatkan keandalan pengakuan tren
  6. Pengaturan Rasio Laba-Rugi 2:1 Meningkatkan Profitabilitas Jangka Panjang

Risiko Strategis

  1. Penggunaan beberapa indikator dapat menyebabkan keterlambatan sinyal
  2. Dalam pasar yang bergejolak, sinyal palsu dapat sering muncul.
  3. Model risiko tetap mungkin tidak cukup fleksibel untuk perubahan besar dalam volatilitas
  4. Pembatasan penarikan bulanan dapat menyebabkan kehilangan peluang perdagangan penting
  5. Pada saat itu, ada kemungkinan bahwa tren akan berbalik dan akan mengalami penurunan lebih besar.

Arah optimasi strategi

  1. Memperkenalkan parameter indikator yang dapat disesuaikan untuk menyesuaikan dengan kondisi pasar yang berbeda
  2. Mengembangkan strategi manajemen posisi yang lebih fleksibel untuk mempertimbangkan perubahan volatilitas pasar
  3. Meningkatkan penilaian kuantitatif terhadap intensitas tren, dan mengoptimalkan waktu masuk
  4. Desain mekanisme pembatasan risiko bulanan yang lebih cerdas
  5. Menambahkan modul identifikasi lingkungan pasar untuk menyesuaikan parameter strategi dalam kondisi pasar yang berbeda

Meringkaskan

Strategi ini membangun sistem perdagangan pelacakan tren yang relatif lengkap melalui penggunaan komprehensif indikator teknis multi-dimensi. Keunggulan strategi adalah kerangka manajemen risiko yang komprehensif, termasuk stop loss dinamis, manajemen posisi, dan kontrol penarikan. Meskipun ada risiko keterlambatan tertentu, strategi ini diharapkan untuk mempertahankan kinerja yang stabil di berbagai lingkungan pasar melalui optimalisasi dan perbaikan.

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