EMA Multi-DCA Strategy dengan Trailing Stop Loss dan sasaran keuntungan

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

img

Ringkasan

Strategi ini menggunakan EMA berbilang dinamik sebagai isyarat kemasukan digabungkan dengan mekanisme sasaran stop loss dan keuntungan untuk pengurusan risiko. Ia memanfaatkan sifat kelancaran EMA untuk mengenal pasti trend dan mengawal kos melalui entri multi-DCA. Di samping itu, integrasi ciri stop loss dan mengambil keuntungan adaptif meningkatkan proses automasi.

Logika Strategi

Penunjuk

  • EMA5, EMA10, EMA20, EMA50, EMA100, EMA200
  • Julat sebenar purata (ATR)

Isyarat kemasukan

Memicu entri panjang apabila harga melintasi atau bergerak dalam julat tempoh EMA yang dipilih. EMA biasa termasuk 5, 10, 20, 50, 100, 200 tempoh. Strategi ini menggunakan julat 1% EMA sebagai kriteria kemasukan.

Pengurusan Risiko

Merangkumi pelbagai mekanisme kawalan risiko:

  1. ATR Stop Loss: Tutup semua kedudukan apabila ATR melebihi ambang
  2. Had kekerapan kemasukan: Kawalan bilangan maksimum kemasukan
  3. Pendapatan yang disalurkan kepada pelabur

Mengambil Keuntungan

Tetapkan paras harga sasaran keuntungan untuk keluar

Kelebihan

  1. Mengenali trend menggunakan EMA dengan penapisan bunyi bising
  2. Purata kos melalui entri multi-DCA
  3. Isyarat kemasukan yang dipertingkatkan menggunakan kombinasi EMA
  4. Mekanisme Stop Loss Bersesuaian
  5. Mengendalikan keuntungan untuk perlindungan keuntungan

Risiko & Penambahbaikan

  1. EMA penyesuaian keperluan pengoptimuman untuk pasaran yang berbeza
  2. Pendaftaran DCA yang berlebihan mungkin mengambil terlalu banyak modal
  3. Peratusan Stop Loss perlu backtesting

Strategi Peningkatan

  1. Menggunakan sistem EMA canggih untuk pengenalan trend yang lebih baik
  2. Pengoptimuman frekuensi DCA dan peratusan stop loss dengan pelbagai pembolehubah
  3. Menggabungkan model pembelajaran mesin untuk ramalan perubahan harga
  4. Mengintegrasikan modul saiz kedudukan untuk menguruskan penggunaan modal keseluruhan

Kesimpulan

Strategi ini merangkumi pengesanan trend EMA, purata kos multi-DCA, penangguhan stop loss, pengambilan keuntungan sasaran dan banyak lagi. Masih ada potensi yang banyak dalam menyesuaikan parameter dan meningkatkan kawalan risiko. Secara keseluruhan, strategi yang sangat adaptif dan serba boleh ini menawarkan pelabur keupayaan penjanaan alpha 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 lanjut