Chiến lược này là một hệ thống giao dịch thông minh dựa trên Chỉ số Sức mạnh Tương đối (RSI), kết hợp các đường trung bình động khác nhau và Bollinger Bands để giao dịch theo thời gian bằng cách xác định các khu vực mua quá nhiều và bán quá nhiều của thị trường. Cơ chế cốt lõi dựa trên các tín hiệu đột phá và pullback của RSI, được bổ sung bởi các loại đường trung bình động khác nhau để xác nhận xu hướng, cho phép giao dịch dao động hiệu quả. Chiến lược thể hiện khả năng thích nghi mạnh mẽ và có thể được điều chỉnh cho các điều kiện thị trường khác nhau.
Chiến lược này sử dụng chỉ số RSI 14 giai đoạn làm chỉ số cốt lõi của nó, tạo ra tín hiệu giao dịch bằng cách theo dõi các chéo RSI với các mức chính ở mức 30 và 70. Một tín hiệu dài được kích hoạt khi RSI vượt qua mức 30, cho thấy sự thay đổi từ quá bán sang điều kiện tăng. Một tín hiệu đóng cửa được tạo ra khi RSI giảm xuống dưới 70, cho thấy sự chuyển đổi từ quá mua sang điều kiện giảm. Chiến lược kết hợp các đường trung bình động khác nhau (SMA, EMA, SMMA, WMA, VWMA) và Bollinger Bands như các chỉ số bổ sung để xác nhận và đánh giá xu hướng biến động.
Chiến lược này nắm bắt các cơ hội mua quá nhiều và bán quá nhiều trên thị trường thông qua chỉ số RSI, xác nhận tín hiệu với nhiều chỉ số kỹ thuật, chứng minh tính thực tế và độ tin cậy mạnh mẽ.
/*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(title="Demo GPT - Relative Strength Index", shorttitle="RSI Strategy", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.1, slippage=3) // Inputs rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings") rsiSourceInput = input.source(close, "Source", group="RSI Settings") calculateDivergence = input.bool(false, title="Calculate Divergence", group="RSI Settings", tooltip="Calculating divergences is needed in order for divergence alerts to fire.") // RSI Calculation change = ta.change(rsiSourceInput) up = ta.rma(math.max(change, 0), rsiLengthInput) down = ta.rma(-math.min(change, 0), rsiLengthInput) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) // RSI Plots rsiPlot = plot(rsi, "RSI", color=#7E57C2) rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86) midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50)) rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86) fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill") plot(50, color=na, editable=false, display=display.none) // Moving Averages maTypeInput = input.string("SMA", "Type", options=["None", "SMA", "SMA + Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving Average") maLengthInput = input.int(14, "Length", group="Moving Average") bbMultInput = input.float(2.0, "BB StdDev", minval=0.001, maxval=50, step=0.5, group="Moving Average") enableMA = maTypeInput != "None" isBB = maTypeInput == "SMA + Bollinger Bands" // MA Calculation ma(source, length, MAtype) => switch MAtype "SMA" => ta.sma(source, length) "SMA + Bollinger Bands" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) smoothingMA = enableMA ? ma(rsi, maLengthInput, maTypeInput) : na smoothingStDev = isBB ? ta.stdev(rsi, maLengthInput) * bbMultInput : na plot(smoothingMA, "RSI-based MA", color=color.yellow, display=enableMA ? display.all : display.none) bbUpperBand = plot(smoothingMA + smoothingStDev, title="Upper Bollinger Band", color=color.green, display=isBB ? display.all : display.none) bbLowerBand = plot(smoothingMA - smoothingStDev, title="Lower Bollinger Band", color=color.green, display=isBB ? display.all : display.none) fill(bbUpperBand, bbLowerBand, color=isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill", display=isBB ? display.all : display.none) // Trade Logic longCondition = ta.crossover(rsi, 30) exitCondition = ta.crossunder(rsi, 70) // Start Date & End Date startDate = input(timestamp("2018-01-01 00:00"), "Start Date", group="Date Range") endDate = input(timestamp("2069-12-31 23:59"), "End Date", group="Date Range") inDateRange = true // Execute Trades if (longCondition and inDateRange) strategy.entry("Long", strategy.long) if (exitCondition and inDateRange) strategy.close("Long")