
Chiến lược này là một hệ thống giao dịch phức hợp kết hợp các chỉ số động lực RSI và chỉ số xu hướng EMA. Nó hoạt động trong hai chu kỳ thời gian 1 phút và 5 phút, và các quyết định giao dịch được đưa ra thông qua tín hiệu mua bán quá mức của RSI và phán đoán xu hướng của EMA ba. Chiến lược bao gồm cả theo dõi xu hướng và bao gồm các tính năng quay trở lại bình quân, có thể nắm bắt cơ hội giao dịch trong các môi trường thị trường khác nhau.
Chiến lược sử dụng EMA ba ngày 21/50/200 làm chuẩn định hướng, kết hợp với chỉ số RSI được cải tiến (được tính toán theo phương pháp Chebyshev) để xác định tình trạng quá mua quá bán của thị trường. Trong chu kỳ 1 phút, khi RSI phá vỡ 94, mở lệnh giảm giá, giảm giá bằng 4 giờ và thiết lập lệnh dừng bảo đảm khi RSI quay trở lại 50. Trong chu kỳ 5 phút, khi giá phá vỡ EMA 200 ngày và mở lỗ, giảm giá khi RSI vượt quá hoặc giảm giá.
Chiến lược này cải thiện sự ổn định và độ tin cậy của giao dịch bằng cách kết hợp nhiều chỉ số kỹ thuật và phân tích nhiều chu kỳ thời gian. Mặc dù có một số rủi ro, nhưng có thể kiểm soát rủi ro hiệu quả thông qua quản lý vị trí hợp lý và cơ chế dừng lỗ.
/*backtest
start: 2023-11-12 00:00:00
end: 2024-07-10 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Combined RSI Primed and 3 EMA Strategy", overlay=true)
// Input for EMA lengths
emaLength1 = input(21, title="EMA Length 1")
emaLength2 = input(50, title="EMA Length 2")
emaLength3 = input(200, title="EMA Length 3")
// Input for RSI settings
rsiLength = input(14, title="RSI Length")
rsiOverbought = input(94, title="RSI Overbought Level")
rsiNeutral = input(50, title="RSI Neutral Level")
rsiOversold = input(4, title="RSI Oversold Level")
// Calculate EMAs
ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)
ema3 = ta.ema(close, emaLength3)
// Calculate RSI using Chebyshev method from RSI Primed
rsi(source) =>
up = math.max(ta.change(source), 0)
down = -math.min(ta.change(source), 0)
rs = up / down
rsiValue = down == 0 ? 100 : 100 - (100 / (1 + rs))
rsiValue
rsiValue = rsi(close)
// Plot EMAs
plot(ema1, color=color.red, title="EMA 21")
plot(ema2, color=color.white, title="EMA 50")
plot(ema3, color=color.blue, title="EMA 200")
// Plot RSI for visual reference
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiNeutral, "Neutral", color=color.gray)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsiValue, color=color.blue, title="RSI")
// Trading logic with position management
var bool inPositionShort = false
var bool inPositionLong = false
// Trading logic for 1-minute timeframe
if (rsiValue > rsiOverbought and not inPositionShort)
strategy.entry("Sell", strategy.short)
inPositionShort := true
if (rsiValue < rsiOversold and inPositionShort)
strategy.close("Sell")
inPositionShort := false
if (ta.crossover(rsiValue, rsiNeutral) and inPositionShort)
strategy.exit("Break Even", "Sell", stop=close)
// Trading logic for 5-minute timeframe
var float lastBearishClose = na
if (close < ema3 and close[1] >= ema3) // Check if the current close is below EMA200
lastBearishClose := close
if (not na(lastBearishClose) and close > lastBearishClose and not inPositionLong)
strategy.entry("Buy", strategy.long)
inPositionLong := true
if (rsiValue > rsiOverbought and inPositionLong)
strategy.close("Buy")
inPositionLong := false
if (ta.crossunder(rsiValue, rsiNeutral) and inPositionLong)
strategy.exit("Break Even", "Buy", stop=close)
lastBearishClose := na // Reset after trade execution