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à Trung bình di chuyển đơn giản (SMA). Nó xác định hướng xu hướng thị trường bằng cách sử dụng trung bình di chuyển trong khi xác nhận đà với RSI, thực hiện giao dịch khi xu hướng và đà liên kết. Chiến lược bao gồm các cơ chế dừng lỗ và lấy lợi nhuận toàn diện để kiểm soát rủi ro hiệu quả.
Logic cốt lõi dựa trên sự kết hợp của 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 mức dừng lỗ và lợi nhuận dựa trên tỷ lệ phần trăm, được thiết lập dưới dạng tỷ lệ phần trăm cố định của giá nhập cảnh.
Chiến lược này xây dựng một hệ thống giao dịch hợp lý rõ ràng và kiểm soát rủi ro bằng cách kết hợp các chỉ số xu hướng và động lực. Trong khi rủi ro vốn có tồn tại, chiến lược thể hiện tính thực tế tốt thông qua cài đặt tham số thích hợp và kiểm soát rủi ro. Tối ưu hóa trong tương lai tập trung vào điều chỉnh tham số năng động, nhận thức môi trường thị trường và cải thiện chất lượng tín hiệu, có khả năng nâng cao 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")