
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) và Đường trung bình động đơn giản (SMA). Chiến lược này sử dụng đường trung bình động để xác định hướng của xu hướng thị trường và sử dụng chỉ báo RSI để xác nhận động lực, để giao dịch khi xu hướng và động lực cộng hưởng. Chiến lược này đã thiết kế một cơ chế dừng lỗ và dừng lãi hoàn chỉnh, có thể kiểm soát rủi ro hiệu quả.
Logic cốt lõi của chiến lược này dựa trên việc sử dụng kết hợp hai chỉ số kỹ thuật:
Logic tạo tín hiệu giao dịch:
Kiểm soát rủi ro sử dụng phương pháp dừng lỗ và chốt lời theo phần trăm, được thiết lập theo phần trăm cố định của giá vào lệnh.
Chiến lược này kết hợp các chỉ báo xu hướng và động lượng để xây dựng một hệ thống giao dịch có logic rõ ràng và rủi ro có thể kiểm soát được. Mặc dù có một số rủi ro cố hữu, chiến lược này cho thấy tính thực tiễn tốt thông qua việc thiết lập thông số hợp lý và kiểm soát rủi ro. Các hướng tối ưu hóa tiếp theo chủ yếu tập trung vào việc điều chỉnh tham số động, xác định môi trường thị trường và cải thiện chất lượng tín hiệu, dự kiến sẽ cải thiện hơn nữa tính ổn định và lợi nhuận của chiến lược.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © raiford87
//@version=6
strategy("RSI + MA Trend Strategy (v6)",
shorttitle="RSI_MA_Trend_v6",
overlay=true,
initial_capital=50000,
default_qty_type=strategy.fixed,
default_qty_value=1)
// ─────────────────────────────────────────────────────────────────────────────────────
// 1. USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────────────
maLength = input.int(50, "Moving Average Length")
rsiLength = input.int(14, "RSI Length")
rsiBuyLevel = input.int(55, "RSI > X for Buy", minval=1, maxval=99)
rsiSellLevel = input.int(45, "RSI < X for Sell", minval=1, maxval=99)
stopLossPerc = input.float(1.0, "Stop Loss %", minval=0.1)
takeProfitPerc = input.float(2.0, "Take Profit %", minval=0.1)
// ─────────────────────────────────────────────────────────────────────────────────────
// 2. INDICATOR CALCULATIONS
// ─────────────────────────────────────────────────────────────────────────────────────
maValue = ta.sma(close, maLength)
rsiVal = ta.rsi(close, rsiLength)
// Trend conditions
bullTrend = close > maValue
bearTrend = close < maValue
// RSI conditions
rsiBull = rsiVal > rsiBuyLevel
rsiBear = rsiVal < rsiSellLevel
// ─────────────────────────────────────────────────────────────────────────────────────
// 3. ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────────────
longCondition = bullTrend and rsiBull
shortCondition = bearTrend and rsiBear
if longCondition
strategy.entry("RSI MA Long", strategy.long)
if shortCondition
strategy.entry("RSI MA Short", strategy.short)
// ─────────────────────────────────────────────────────────────────────────────────────
// 4. STOP LOSS & TAKE PROFIT
// ─────────────────────────────────────────────────────────────────────────────────────
stopLossLevel = stopLossPerc * 0.01
takeProfitLevel = takeProfitPerc * 0.01
if strategy.position_size > 0
stopPriceLong = strategy.position_avg_price * (1 - stopLossLevel)
tpPriceLong = strategy.position_avg_price * (1 + takeProfitLevel)
strategy.exit("Exit Long", from_entry="RSI MA Long", stop=stopPriceLong, limit=tpPriceLong)
if strategy.position_size < 0
stopPriceShort = strategy.position_avg_price * (1 + stopLossLevel)
tpPriceShort = strategy.position_avg_price * (1 - takeProfitLevel)
strategy.exit("Exit Short", from_entry="RSI MA Short", stop=stopPriceShort, limit=tpPriceShort)
// ─────────────────────────────────────────────────────────────────────────────────────
// 5. PLOT SIGNALS & LEVELS
// ─────────────────────────────────────────────────────────────────────────────────────
plot(maValue, color=color.yellow, linewidth=2, title="Moving Average")
plotchar(longCondition, title="Long Signal", char='▲', location=location.belowbar, color=color.green, size=size.tiny)
plotchar(shortCondition, title="Short Signal", char='▼', location=location.abovebar, color=color.red, size=size.tiny)
// Plot Stop & TP lines
posIsLong = strategy.position_size > 0
posIsShort = strategy.position_size < 0
plotStopLong = posIsLong ? strategy.position_avg_price * (1 - stopLossLevel) : na
plotTpLong = posIsLong ? strategy.position_avg_price * (1 + takeProfitLevel): na
plotStopShort= posIsShort? strategy.position_avg_price * (1 + stopLossLevel) : na
plotTpShort = posIsShort? strategy.position_avg_price * (1 - takeProfitLevel): na
plot(plotStopLong, color=color.red, linewidth=2, style=plot.style_line, title="Stop Loss Long")
plot(plotTpLong, color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Long")
plot(plotStopShort, color=color.red, linewidth=2, style=plot.style_line, title="Stop Loss Short")
plot(plotTpShort, color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Short")