
Chiến lược này sử dụng các chỉ số di chuyển đa chỉ số động như tín hiệu ra thị trường, kết hợp với các cơ chế theo dõi dừng lỗ và lợi nhuận mục tiêu để quản lý rủi ro và lợi nhuận. Chiến lược này tận dụng tối đa tính chất mượt mà của EMA để xác định xu hướng, kiểm soát chi phí thông qua nhiều lần đầu tư DCA. Ngoài ra, tích hợp các thiết lập dừng động và lợi nhuận mục tiêu làm cho toàn bộ chiến lược trở nên thông minh hơn và tự động hơn.
Khi giá gần hoặc vượt qua chu kỳ EMA được thiết lập, tín hiệu ra thị trường được tạo ra. Chu kỳ EMA có thể được tùy chỉnh, điển hình là 5, 10, 20, 50, 100 và 200 chu kỳ. Chiến lược này sử dụng giá trong phạm vi 1% trên hoặc dưới EMA như điều kiện ra thị trường.
Tích hợp nhiều cơ chế quản lý rủi ro:
Đặt mục tiêu mức lợi nhuận và thoát ra khi giá vượt mức mục tiêu
Chiến lược này tích hợp nhiều cơ chế như xác định xu hướng EMA, kiểm soát chi phí DCA, theo dõi động các điểm dừng lỗ và rút ra mục tiêu lợi nhuận. Có rất nhiều không gian tối ưu hóa về điều chỉnh tham số và kiểm soát rủi ro. Nhìn chung, chiến lược có khả năng thích ứng và mở rộng mạnh mẽ, có thể mang lại lợi nhuận vượt trội ổn định cho nhà đầu tư.
/*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)