Strategi kos purata berwajaran berbilang EMA berdasarkan stop loss dinamik dan keuntungan sasaran


Tarikh penciptaan: 2024-01-19 15:16:53 Akhirnya diubah suai: 2024-01-19 15:16:53
Salin: 2 Bilangan klik: 778
1
fokus pada
1617
Pengikut

Strategi kos purata berwajaran berbilang EMA berdasarkan stop loss dinamik dan keuntungan sasaran

Gambaran keseluruhan

Strategi ini menggunakan purata bergerak berganda indeks yang dinamik sebagai isyarat masuk ke pasaran, digabungkan dengan mekanisme pengesanan berhenti dan keuntungan sasaran untuk menguruskan risiko dan keuntungan. Strategi ini memanfaatkan sepenuhnya sifat halus EMA untuk mengenal pasti trend, mengawal kos dengan beberapa kali DCA. Di samping itu, ia menggabungkan pengaturan berhenti dinamik dan keuntungan sasaran untuk menjadikan keseluruhan strategi lebih pintar dan automatik.

Prinsip Strategi

Pengiraan penunjuk

  • EMA5, EMA10, EMA20, EMA50, EMA100, EMA200 purata bergerak
  • Rata-rata ATR yang sebenar

Isyarat kemasukan

Isyarat masuk ke pasaran dihasilkan apabila harga mendekati atau melintasi kitaran EMA yang ditetapkan, kitaran EMA boleh disesuaikan, biasanya dipilih kitaran 5, 10, 20, 50, 100 dan 200. Strategi ini menggunakan harga dalam 1% dari EMA ke bawah sebagai syarat masuk ke pasaran.

Pengurusan Risiko

Mengintegrasikan pelbagai mekanisme pengurusan risiko:

  1. Penutupan ATR: penutupan pelupusan apabila ATR melebihi nilai set
  2. Pengendalian jumlah maksimum pemasangan: mengelakkan pemasangan berlebihan
  3. Trailing Stop: Trailing Stop berdasarkan turun naik harga dalam masa nyata

Mekanisme keuntungan

Tetapkan tahap keuntungan sasaran dan keluar apabila harga melebihi sasaran

Analisis kelebihan strategi

  1. Menggunakan EMA untuk mengenal pasti trend dan menapis turun naik jangka pendek
  2. Kos DCA disebarkan untuk mengelakkan pembelian dan penjualan yang tinggi
  3. Portfolio EMA Berbilang, Meningkatkan Kejayaan Pendaftaran
  4. Dinamika Hentikan Kerugian REAL-TIME Kawalan Kerugian
  5. Matlamat jelas untuk menjana keuntungan dan tidak membuang banyak wang

Risiko dan penambahbaikan

  1. Pemilihan faktor EMA memerlukan pengoptimuman, kesan gabungan kitaran yang berbeza-beza di pasaran yang berbeza
  2. Terlalu banyak DCA boleh menyebabkan penggunaan dana yang berlebihan
  3. Tetapan kemerosotan yang memerlukan pengoptimuman pengukuran semula

Strategi untuk mengoptimumkan idea

  1. Menggunakan sistem EMA canggih untuk mengenal pasti trend
  2. Pengoptimuman pelbagai pembolehubah untuk jumlah DCA yang optimum dan markah henti
  3. Menambah model pembelajaran mesin untuk meramalkan perubahan harga
  4. Modul pengurusan dana bersepadu untuk mengawal jumlah keseluruhan

ringkaskan

Strategi ini mengintegrasikan pelbagai mekanisme seperti pengenalan trend EMA, kawalan kos DCA, penghentian kerugian yang dijejaki secara dinamik, dan penarikan keuntungan yang disasarkan. Terdapat banyak ruang untuk pengoptimuman dalam penyesuaian parameter dan kawalan risiko. Secara keseluruhannya, strategi ini mempunyai kemampuan beradaptasi dan berskala yang kuat untuk menghasilkan pulangan tambahan yang stabil untuk pelabur.

Kod sumber strategi
/*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)