
Đây là chiến lược theo xu hướng dựa trên sự giao nhau của đường trung bình động hàm mũ (EMA) và xác nhận của chỉ số sức mạnh tương đối (RSI). Chiến lược này kết hợp các tín hiệu giao nhau của EMA ngắn hạn và dài hạn với xác nhận động lượng RSI, đồng thời tích hợp cơ chế dừng lỗ theo phần trăm, nhằm nắm bắt các điểm ngoặt quan trọng trong xu hướng thị trường và kiểm soát rủi ro. Cốt lõi của chiến lược là cải thiện độ chính xác và độ tin cậy của giao dịch đồng thời đảm bảo an toàn giao dịch thông qua sự phối hợp của các chỉ số kỹ thuật.
Chiến lược này sử dụng cơ chế lọc chỉ báo kỹ thuật kép: đầu tiên, các điểm đảo ngược xu hướng tiềm năng được xác định thông qua sự giao nhau của EMA ngắn hạn (9 kỳ) và EMA dài hạn (21 kỳ). Khi EMA ngắn hạn cắt EMA dài hạn theo hướng lên và giá trị RSI cao hơn mức đã đặt, hệ thống sẽ tạo ra tín hiệu dài hạn; khi EMA ngắn hạn cắt EMA dài hạn theo hướng xuống và giá trị RSI thấp hơn hơn mức cài đặt, hệ thống sẽ tạo ra tín hiệu ngắn. Đồng thời, chiến lược này giới thiệu cơ chế dừng lỗ theo phần trăm, thiết lập mức giá dừng lỗ động cho mỗi giao dịch để kiểm soát hiệu quả rủi ro giảm giá.
Chiến lược này xây dựng một hệ thống giao dịch theo dõi xu hướng hoàn chỉnh bằng cách kết hợp hệ thống đường trung bình động và các chỉ báo động lượng. Ưu điểm chính của chiến lược này nằm ở cơ chế xác nhận tín hiệu đáng tin cậy và hệ thống kiểm soát rủi ro hoàn hảo. Mặc dù có một số hạn chế cố hữu, hiệu suất chung của chiến lược dự kiến sẽ được cải thiện hơn nữa thông qua hướng tối ưu hóa được đề xuất. Đây là một khuôn khổ chiến lược mạnh mẽ phù hợp với các nhà giao dịch theo xu hướng trung và dài hạn.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Simple Trend Following Strategy", overlay=true)
// Inputs
shortEMA = input.int(9, title="Short EMA Length", minval=1)
longEMA = input.int(21, title="Long EMA Length", minval=1)
confirmationRSI = input.int(50, title="RSI Confirmation Level", minval=1, maxval=100)
stopLossPercent = input.float(2, title="Stop Loss Percentage", minval=0.1) // Stop Loss percentage
// Calculations
emaShort = ta.ema(close, shortEMA)
emaLong = ta.ema(close, longEMA)
rsiValue = ta.rsi(close, 14)
// Buy and Sell Conditions
buySignal = ta.crossover(emaShort, emaLong) and rsiValue > confirmationRSI
sellSignal = ta.crossunder(emaShort, emaLong) and rsiValue < confirmationRSI
// Plotting Signals
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Plotting EMAs
plot(emaShort, title="Short EMA", color=color.yellow)
plot(emaLong, title="Long EMA", color=color.purple)
// Strategy logic
strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)
// Calculate stop loss price based on stopLossPercent
longStopLossPrice = strategy.position_avg_price * (1 - stopLossPercent / 100)
shortStopLossPrice = strategy.position_avg_price * (1 + stopLossPercent / 100)
// Draw stop loss line for long positions
if (strategy.position_size > 0) // For long positions
line.new(x1=bar_index, y1=longStopLossPrice, x2=bar_index + 1, y2=longStopLossPrice, color=color.red, width=2, style=line.style_dashed)
// Draw stop loss line for short positions
if (strategy.position_size < 0) // For short positions
line.new(x1=bar_index, y1=shortStopLossPrice, x2=bar_index + 1, y2=shortStopLossPrice, color=color.green, width=2, style=line.style_dashed)