
Đây là chiến lược theo xu hướng kết hợp đường trung bình động hàm mũ (EMA) và chỉ số sức mạnh tương đối (RSI). Chiến lược này theo dõi sự giao nhau của EMA nhanh và chậm, kết hợp các mức quá mua và quá bán của chỉ báo RSI cũng như sự phân kỳ RSI để xác định tín hiệu giao dịch, do đó nắm bắt hiệu quả xu hướng thị trường. Chiến lược này được thực hiện trong khoảng thời gian 1 giờ và cải thiện độ chính xác của giao dịch thông qua việc xác minh nhiều chỉ báo kỹ thuật.
Logic cốt lõi của chiến lược bao gồm các yếu tố chính sau:
Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh bằng cách kết hợp hệ thống đường trung bình động, chỉ báo động lượng và phân tích phân kỳ. Chiến lược này tập trung vào việc xác minh nhiều tín hiệu, giúp giảm thiểu hiệu quả nguy cơ phán đoán sai lầm. Mặc dù có độ trễ nhất định, chiến lược này có giá trị ứng dụng thực tế tốt thông qua việc tối ưu hóa tham số và cải thiện quản lý rủi ro.
/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA9_RSI_Strategy_LongShort", overlay=true)
// Parameters
fastLength = input.int(9, minval=1, title="Fast EMA Length")
slowLength = input.int(26, minval=1, title="Slow EMA Length")
rsiPeriod = input.int(14, minval=1, title="RSI Period")
rsiLevelLong = input.int(65, minval=1, title="RSI Level (Long)")
rsiLevelShort = input.int(35, minval=1, title="RSI Level (Short)")
// Define 1-hour timeframe
timeframe_1h = "60"
// Fetch 1-hour data
high_1h = request.security(syminfo.tickerid, timeframe_1h, high)
low_1h = request.security(syminfo.tickerid, timeframe_1h, low)
rsi_1h = request.security(syminfo.tickerid, timeframe_1h, ta.rsi(close, rsiPeriod))
// Current RSI
rsi = ta.rsi(close, rsiPeriod)
// Find highest/lowest price and corresponding RSI in the 1-hour timeframe
highestPrice_1h = ta.highest(high_1h, 1) // ราคาสูงสุดใน 1 ช่วงของ timeframe 1 ชั่วโมง
lowestPrice_1h = ta.lowest(low_1h, 1) // ราคาต่ำสุดใน 1 ช่วงของ timeframe 1 ชั่วโมง
highestRsi_1h = ta.valuewhen(high_1h == highestPrice_1h, rsi_1h, 0)
lowestRsi_1h = ta.valuewhen(low_1h == lowestPrice_1h, rsi_1h, 0)
// Detect RSI Divergence for Long
bearishDivLong = high > highestPrice_1h and rsi < highestRsi_1h
bullishDivLong = low < lowestPrice_1h and rsi > lowestRsi_1h
divergenceLong = bearishDivLong or bullishDivLong
// Detect RSI Divergence for Short (switch to low price for divergence check)
bearishDivShort = low > lowestPrice_1h and rsi < lowestRsi_1h
bullishDivShort = high < highestPrice_1h and rsi > highestRsi_1h
divergenceShort = bearishDivShort or bullishDivShort
// Calculate EMA
emaFast = ta.ema(close, fastLength)
emaSlow = ta.ema(close, slowLength)
// Long Conditions
longCondition = emaFast > emaSlow and rsi > rsiLevelLong and not divergenceLong
// Short Conditions
shortCondition = emaFast < emaSlow and rsi < rsiLevelShort and not divergenceShort
// Plot conditions
plotshape(longCondition, title="Buy", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(shortCondition, title="Sell", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")
// Execute the strategy
if (longCondition)
strategy.entry("Long", strategy.long, comment="entry long")
if (shortCondition)
strategy.entry("Short", strategy.short, comment="entry short")
// Alert
alertcondition(longCondition, title="Buy Signal", message="Buy signal triggered!")
alertcondition(shortCondition, title="Sell Signal", message="Sell signal triggered!")