Đây là một chiến lược theo xu hướng dựa trên sự chéo chéo của Chỉ số Sức mạnh Tương đối (RSI). Chiến lược này kết hợp các tín hiệu từ các dấu chéo EMA ngắn hạn và dài hạn với sự xác nhận đà RSI, trong khi kết hợp một cơ chế dừng lỗ dựa trên tỷ lệ phần trăm. Nó nhằm mục đích nắm bắt sự đảo ngược xu hướng thị trường đáng kể trong khi duy trì kiểm soát rủi ro thông qua hiệu ứng phối hợp của các chỉ số kỹ thuật.
Chiến lược sử dụng một cơ chế lọc chỉ số kỹ thuật kép: Đầu tiên, nó xác định các điểm đảo ngược xu hướng tiềm năng thông qua sự chéo chéo giữa EMA ngắn hạn (9 giai đoạn) và EMA dài hạn (21 giai đoạn). Các tín hiệu mua được tạo ra khi EMA ngắn hạn vượt qua EMA dài hạn và giá trị RSI trên mức chỉ định. Các tín hiệu bán xảy ra khi EMA ngắn hạn vượt qua EMA dài hạn và giá trị RSI dưới mức chỉ định. Ngoài ra, chiến lược kết hợp một cơ chế dừng lỗ dựa trên tỷ lệ phần trăm, thiết lập các mức dừng lỗ năng động cho mỗi giao dịch để kiểm soát hiệu quả rủi ro giảm.
Chiến lược này xây dựng một hệ thống giao dịch theo xu hướng hoàn chỉnh thông qua sự kết hợp giữa các đường trung bình động và các chỉ số động lực. Những lợi thế chính của nó nằm trong cơ chế xác nhận tín hiệu đáng tin cậy và hệ thống kiểm soát rủi ro toàn diện. Mặc dù có một số hạn chế vốn có, hiệu suất tổng thể của chiến lược có thể được nâng cao hơn nữa thông qua các hướng tối ưu hóa được đề xuất. Đây là một khuôn khổ chiến lược mạnh mẽ phù hợp với các nhà giao dịch xu hướng trung và dài hạn.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Simple Trend Following Strategy", overlay=true) // Inputs shortEMA = input.int(9, title="Short EMA Length", minval=1) longEMA = input.int(21, title="Long EMA Length", minval=1) confirmationRSI = input.int(50, title="RSI Confirmation Level", minval=1, maxval=100) stopLossPercent = input.float(2, title="Stop Loss Percentage", minval=0.1) // Stop Loss percentage // Calculations emaShort = ta.ema(close, shortEMA) emaLong = ta.ema(close, longEMA) rsiValue = ta.rsi(close, 14) // Buy and Sell Conditions buySignal = ta.crossover(emaShort, emaLong) and rsiValue > confirmationRSI sellSignal = ta.crossunder(emaShort, emaLong) and rsiValue < confirmationRSI // Plotting Signals plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Plotting EMAs plot(emaShort, title="Short EMA", color=color.yellow) plot(emaLong, title="Long EMA", color=color.purple) // Strategy logic strategy.entry("Buy", strategy.long, when=buySignal) strategy.entry("Sell", strategy.short, when=sellSignal) // Calculate stop loss price based on stopLossPercent longStopLossPrice = strategy.position_avg_price * (1 - stopLossPercent / 100) shortStopLossPrice = strategy.position_avg_price * (1 + stopLossPercent / 100) // Draw stop loss line for long positions if (strategy.position_size > 0) // For long positions line.new(x1=bar_index, y1=longStopLossPrice, x2=bar_index + 1, y2=longStopLossPrice, color=color.red, width=2, style=line.style_dashed) // Draw stop loss line for short positions if (strategy.position_size < 0) // For short positions line.new(x1=bar_index, y1=shortStopLossPrice, x2=bar_index + 1, y2=shortStopLossPrice, color=color.green, width=2, style=line.style_dashed)