Chiến lược EMA Multi-DCA với Trailing Stop Loss và mục tiêu lợi nhuận

Tác giả:ChaoZhang, Ngày: 2024-01-19 15:16:53
Tags:

img

Tổng quan

Chiến lược này sử dụng nhiều EMA năng động như là tín hiệu đầu vào kết hợp với các cơ chế dừng lỗ và mục tiêu lợi nhuận để quản lý rủi ro. Nó tận dụng tính chất làm mịn của EMA để xác định xu hướng và kiểm soát chi phí thông qua nhiều mục nhập DCA. Ngoài ra, tích hợp các tính năng dừng lỗ và lợi nhuận thích nghi làm tăng quá trình tự động hóa.

Chiến lược logic

Các chỉ số

  • EMA5, EMA10, EMA20, EMA50, EMA100, EMA200
  • Phạm vi thực trung bình (ATR)

Các tín hiệu nhập cảnh

Khởi động đầu vào dài khi giá vượt qua hoặc di chuyển trong phạm vi các khoảng thời gian EMA được chọn. EMA điển hình bao gồm 5, 10, 20, 50, 100, 200 khoảng thời gian. Chiến lược này sử dụng phạm vi 1% của EMA làm tiêu chí đầu vào.

Quản lý rủi ro

Bao gồm nhiều cơ chế kiểm soát rủi ro:

  1. ATR Stop Loss: Đóng tất cả các vị trí khi ATR vượt quá ngưỡng
  2. Giới hạn tần suất nhập: Kiểm soát số lượng nhập tối đa
  3. Đặt hàng: Đặt hàng theo quy định của quy định của quy định của quy định này.

Lợi nhuận

Đặt mức giá mục tiêu lợi nhuận cho việc thoát khỏi

Ưu điểm

  1. Xác định xu hướng sử dụng EMA với bộ lọc tiếng ồn
  2. Trung bình chi phí thông qua nhiều mục DCA
  3. Các tín hiệu nhập cảnh được tăng cường bằng cách sử dụng các combo EMA
  4. Cơ chế dừng lỗ thích nghi
  5. Kiểm soát lợi nhuận để bảo vệ lợi nhuận

Rủi ro và cải tiến

  1. EMAs điều chỉnh cần tối ưu hóa cho các thị trường khác nhau
  2. Các ghi DCA quá nhiều có thể chiếm quá nhiều vốn
  3. Tỷ lệ dừng lỗ cần backtesting

Chiến lược cải thiện

  1. Sử dụng các hệ thống EMA tiên tiến để xác định xu hướng tốt hơn
  2. Tối ưu hóa đa biến của tần số DCA và tỷ lệ stoploss
  3. Kết hợp các mô hình học máy cho dự báo thay đổi giá
  4. Tích hợp mô-đun kích thước vị trí để quản lý việc sử dụng vốn tổng thể

Kết luận

Chiến lược bao gồm phát hiện xu hướng EMA, trung bình chi phí đa DCA, dừng lỗ, mục tiêu lợi nhuận và nhiều hơn nữa.


/*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)


Thêm nữa