
Chiến lược này là một hệ thống giao dịch theo xu hướng kết hợp Chỉ số sức mạnh tương đối (RSI), Đường trung bình động có trọng số (WMA) và Đường trung bình động theo hàm mũ (EMA). Chiến lược này sử dụng nhiều chỉ báo kỹ thuật phối hợp để nắm bắt những thay đổi trong động lực thị trường tại các điểm chuyển hướng xu hướng, từ đó tạo ra các tín hiệu giao dịch. Hệ thống sử dụng đường chéo WMA và EMA để xác nhận hướng xu hướng và kết hợp chỉ báo RSI để lọc trạng thái thị trường nhằm nâng cao độ chính xác của giao dịch.
Logic cốt lõi của chiến lược này dựa trên các yếu tố chính sau:
Đây là chiến lược theo dõi xu hướng dựa trên nhiều chỉ báo kỹ thuật. Thông qua việc sử dụng phối hợp RSI, WMA và EMA, chiến lược này cố gắng nắm bắt các điểm đảo chiều xu hướng thị trường đồng thời đảm bảo tính ổn định của giao dịch. Mặc dù có một số rủi ro về độ trễ và tín hiệu sai, nhưng thông qua các biện pháp quản lý rủi ro và tối ưu hóa hợp lý, chiến lược này có giá trị thực tiễn tốt và có không gian mở rộng.
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-16 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy(title="RSI + WMA + EMA Strategy", shorttitle="RSI Strategy", overlay=true)
// RSI Settings
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
// WMA and EMA Settings
wmaLengthInput = input.int(45, minval=1, title="WMA Length", group="WMA Settings")
wmaColorInput = input.color(color.blue, title="WMA Color", group="WMA Settings")
emaLengthInput = input.int(89, minval=1, title="EMA Length", group="EMA Settings")
emaColorInput = input.color(color.purple, title="EMA Color", group="EMA Settings")
// RSI Calculation
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// WMA and EMA Calculation
wma = ta.wma(rsi, wmaLengthInput)
ema = ta.ema(rsi, emaLengthInput)
// RSI Color Logic
rsiColor = rsi > 70 ? color.new(color.green, 100 - math.round(rsi)) : rsi < 30 ? color.new(color.red, math.round(rsi)) : color.new(color.blue, 50)
// Plot RSI, WMA, and EMA
plot(rsi, "RSI", color=rsiColor)
plot(wma, title="WMA", color=wmaColorInput, linewidth=2)
plot(ema, title="EMA", color=emaColorInput, linewidth=2)
// Highlight RSI Area between 30 and 70
bgcolor(rsi >= 30 and rsi <= 70 ? color.new(color.blue, 90) : na)
// Entry and Exit Conditions
longCondition = ta.crossover(wma, ema) and rsi < 50
shortCondition = ta.crossunder(wma, ema) and rsi > 50
if (longCondition)
strategy.entry("Long", strategy.long)
alert("Buy Signal: WMA crossed above EMA, RSI < 50", alert.freq_once_per_bar)
if (shortCondition)
strategy.entry("Short", strategy.short)
alert("Sell Signal: WMA crossed below EMA, RSI > 50", alert.freq_once_per_bar)
// Optional: Plot Buy/Sell Signals on Chart
plotshape(series=longCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal")
plotshape(series=shortCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal")