
Đây là một chiến lược theo dõi xu hướng kết hợp các đường giao thoa và các chỉ số tương đối mạnh (RSI). Chiến lược này xác định định hướng xu hướng thị trường thông qua các đường giao thoa của đường trung bình di chuyển ngắn hạn và dài hạn, đồng thời sử dụng RSI làm bộ lọc động lượng để xác nhận cường độ của xu hướng, do đó cải thiện độ tin cậy của tín hiệu giao dịch. Chiến lược này cũng bao gồm phần trăm dừng lỗ và dừng để quản lý rủi ro.
Chiến lược sử dụng đường trung bình di chuyển đơn giản (SMA) 9 chu kỳ và 21 chu kỳ làm chỉ số xu hướng chính. Hệ thống tạo ra nhiều tín hiệu khi đường trung bình ngắn hạn đi lên vượt qua đường trung bình dài hạn và RSI lớn hơn 50. Hệ thống tạo ra tín hiệu dừng chân khi đường trung bình ngắn hạn đi xuống vượt qua đường trung bình dài hạn và RSI nhỏ hơn 50.
Đây là một chiến lược theo dõi xu hướng có cấu trúc, logic rõ ràng. cung cấp hướng xu hướng cơ bản thông qua giao thoa đồng bằng, RSI cung cấp xác nhận động lực, sau đó kết hợp với cơ chế quản lý rủi ro để tạo thành một hệ thống giao dịch hoàn chỉnh. Mặc dù có một số hạn chế vốn có, chiến lược này có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau thông qua việc tối ưu hóa và điều chỉnh liên tục.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Moving Average Crossover + RSI Strategy", overlay=true, shorttitle="MA RSI Strategy")
// --- Input Parameters ---
shortMA = input.int(9, title="Short MA Period", minval=1)
longMA = input.int(21, title="Long MA Period", minval=1)
rsiLength = input.int(14, title="RSI Length", minval=1)
rsiOverbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=100)
rsiOversold = input.int(30, title="RSI Oversold Level", minval=0, maxval=50)
stopLossPercent = input.float(1, title="Stop Loss Percentage", minval=0.1, maxval=10.0) / 100
takeProfitPercent = input.float(2, title="Take Profit Percentage", minval=0.1, maxval=10.0) / 100
// --- Calculate Moving Averages ---
shortMA_value = ta.sma(close, shortMA)
longMA_value = ta.sma(close, longMA)
// --- Calculate RSI ---
rsi_value = ta.rsi(close, rsiLength)
// --- Buy and Sell Conditions ---
longCondition = ta.crossover(shortMA_value, longMA_value) and rsi_value > 50
shortCondition = ta.crossunder(shortMA_value, longMA_value) and rsi_value < 50
// --- Plot Moving Averages ---
plot(shortMA_value, color=color.blue, linewidth=2, title="Short MA")
plot(longMA_value, color=color.red, linewidth=2, title="Long MA")
// --- Plot RSI (Optional) ---
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsi_value, color=color.purple, title="RSI")
// --- Strategy Execution ---
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// --- Risk Management (Stop Loss and Take Profit) ---
longStopLoss = close * (1 - stopLossPercent)
longTakeProfit = close * (1 + takeProfitPercent)
shortStopLoss = close * (1 + stopLossPercent)
shortTakeProfit = close * (1 - takeProfitPercent)
// Set the stop loss and take profit for long and short positions
strategy.exit("Long Exit", from_entry="Long", stop=longStopLoss, limit=longTakeProfit)
strategy.exit("Short Exit", from_entry="Short", stop=shortStopLoss, limit=shortTakeProfit)