EMA Multi-DCA Strategy dengan Trailing Stop Loss dan Target Keuntungan

Penulis:ChaoZhang, Tanggal: 2024-01-19 15:16:53
Tag:

img

Gambaran umum

Strategi ini memanfaatkan EMA ganda dinamis sebagai sinyal masuk dikombinasikan dengan mekanisme target stop loss dan profit trailing untuk manajemen risiko. Ini memanfaatkan sifat smoothing EMA untuk mengidentifikasi tren dan mengendalikan biaya melalui entri multi-DCA. Selain itu, integrasi fitur stop loss dan profit taking adaptif meningkatkan proses otomatisasi.

Logika Strategi

Indikator

  • EMA5, EMA10, EMA20, EMA50, EMA100, EMA200
  • Rata-rata rentang nyata (ATR)

Sinyal Masuk

Memicu entri panjang ketika harga melintasi atau bergerak dalam rentang periode EMA yang dipilih. EMA khas termasuk 5, 10, 20, 50, 100, 200 periode. Strategi ini menggunakan rentang 1% dari EMA sebagai kriteria masuk.

Manajemen Risiko

Menggabungkan beberapa mekanisme pengendalian risiko:

  1. ATR Stop Loss: Tutup semua posisi ketika ATR melebihi ambang
  2. Batas frekuensi entri: Kontrol jumlah maksimum entri
  3. Pengecualian untuk nilai tukar rupiah

Mengambil Keuntungan

Tetapkan target harga keuntungan untuk keluar

Keuntungan

  1. Mengidentifikasi tren menggunakan EMA dengan penyaringan kebisingan
  2. Rata-rata biaya melalui entri multi-DCA
  3. Sinyal masuk yang ditingkatkan menggunakan kombinasi EMA
  4. Mekanisme stop loss adaptif
  5. Mengambil kontrol keuntungan untuk perlindungan keuntungan

Risiko & Peningkatan

  1. EMA tuning perlu optimasi untuk pasar yang berbeda
  2. Pendaftaran DCA yang berlebihan dapat menempati modal yang terlalu banyak
  3. Persentase stop loss perlu backtesting

Strategi Peningkatan

  1. Menggunakan sistem EMA canggih untuk identifikasi tren yang lebih baik
  2. Optimasi frekuensi DCA dan persentase stop loss multi-variabel
  3. Mengintegrasikan model pembelajaran mesin untuk perkiraan perubahan harga
  4. Mengintegrasikan modul ukuran posisi untuk mengelola penggunaan modal keseluruhan

Kesimpulan

Strategi ini mencakup deteksi tren EMA, rata-rata biaya multi-DCA, stop loss, target profit taking dan banyak lagi. Masih ada potensi yang luas dalam menyesuaikan parameter dan meningkatkan kontrol risiko. Secara keseluruhan, strategi yang sangat adaptif dan serbaguna ini menawarkan investor kemampuan generasi alfa yang stabil.


/*backtest
start: 2023-01-12 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("EMA DCA Strategy with Trailing Stop and Profit Target", overlay=true )

// Define the investment amount for when the condition is met
investment_per_condition = 6

// Define the EMAs
ema5 = ema(close, 5)
ema10 = ema(close, 10)
ema20 = ema(close, 20)
ema50 = ema(close, 50)
ema100 = ema(close, 100)
ema200 = ema(close, 200)

// Define ATR sell threshold
atr_sell_threshold = input(title="ATR Sell Threshold", type=input.integer, defval=10, minval=1)

// Helper function to find if the price is within 1% of the EMA
isWithin1Percent(price, ema) =>
    ema_min = ema * 0.99
    ema_max = ema * 1.01
    price >= ema_min and price <= ema_max

// Control the number of buys
var int buy_count = 0
buy_limit = input(title="Buy Limit", type=input.integer, defval=3000)

// Calculate trailing stop and profit target levels
trail_percent = input(title="Trailing Stop Percentage", type=input.integer, defval=1, minval=0, maxval=10)
profit_target_percent = input(title="Profit Target Percentage", type=input.integer, defval=3, minval=1, maxval=10)

// Determine if the conditions are met and execute the strategy
checkConditionAndBuy(emaValue, emaName) =>
    var int local_buy_count = 0 // Create a local mutable variable
    if isWithin1Percent(close, emaValue) and local_buy_count < buy_limit
        strategy.entry("Buy at " + emaName, strategy.long, qty=investment_per_condition / close, alert_message ="Buy condition met for " + emaName)
        local_buy_count := local_buy_count + 1
        // alert("Buy Condition", "Buy condition met for ", freq_once_per_bar_close)
        
    local_buy_count // Return the updated local_buy_count

// Add ATR sell condition
atr_condition = atr(20) > atr_sell_threshold
if atr_condition
    strategy.close_all()
    buy_count := 0 // Reset the global buy_count when selling

// Strategy execution
buy_count := checkConditionAndBuy(ema5, "EMA5")
buy_count := checkConditionAndBuy(ema10, "EMA10")
buy_count := checkConditionAndBuy(ema20, "EMA20")
buy_count := checkConditionAndBuy(ema50, "EMA50")
buy_count := checkConditionAndBuy(ema100, "EMA100")
buy_count := checkConditionAndBuy(ema200, "EMA200")

// Calculate trailing stop level
trail_offset = close * trail_percent / 100
trail_level = close - trail_offset

// Set profit target level
profit_target_level = close * (1 + profit_target_percent / 100)

// Exit strategy: Trailing Stop and Profit Target
strategy.exit("TrailingStop", from_entry="Buy at EMA", trail_offset=trail_offset, trail_price=trail_level)
strategy.exit("ProfitTarget", from_entry="Buy at EMA",  when=close >= profit_target_level)

// Plot EMAs
plot(ema5, title="EMA 5", color=color.red)
plot(ema10, title="EMA 10", color=color.orange)
plot(ema20, title="EMA 20", color=color.yellow)
plot(ema50, title="EMA 50", color=color.green)
plot(ema100, title="EMA 100", color=color.blue)
plot(ema200, title="EMA 200", color=color.purple)


Lebih banyak