Chiến lược phá vỡ RSI kép là một chiến lược giao dịch thuật toán xác định các điểm đảo ngược giá bằng cách sử dụng chỉ số RSI. Nó tạo ra các tín hiệu giao dịch bằng cách so sánh chỉ số RSI với các giá ngưỡng trên và dưới đã đặt trước để xác định xem thị trường có bị mua quá mức hay bán quá mức hay không.
Chỉ số RSI được tính dựa trên sự thay đổi giá đóng cửa trong một khoảng thời gian nhất định, phản ánh động lực mua và bán của cổ phiếu. Khi chỉ số RSI vượt quá ngưỡng trên được đặt trước (thất định 75), nó chỉ ra rằng cổ phiếu đã bước vào vùng mua quá mức. Khi chỉ số RSI giảm xuống dưới ngưỡng dưới được đặt trước (thất định 25), nó chỉ ra rằng cổ phiếu đã bước vào vùng bán quá mức.
Các quy định về phán quyết là:
Logic giao dịch của nó đơn giản và rõ ràng, với các thiết lập tham số tham chiếu hợp lý, không gian cấu hình lớn và phù hợp để nắm bắt các xu hướng lớn hơn trên thị trường.
Những lợi thế của chiến lược này bao gồm:
Nói chung, với các thiết lập tham số tham chiếu hợp lý, thực hiện đơn giản và khả năng xác định hiệu quả sự đảo ngược giá thông qua RSI, chiến lược này phù hợp với việc nắm bắt xu hướng trung và dài hạn và dễ hiểu và sử dụng như một chiến lược định lượng.
Mặc dù chiến lược này tương đối đơn giản và đáng tin cậy, chúng ta không thể bỏ qua những rủi ro tiềm ẩn mà nó phải đối mặt:
Để kiểm soát rủi ro, chúng ta cần chú ý đến những điều sau:
Xem xét các rủi ro chính đối với chiến lược này là đánh giá sai lầm đảo ngược và thua lỗ trên các thị trường khác nhau, chúng ta có thể tối ưu hóa từ các khía cạnh sau:
Tóm lại, chiến lược phá vỡ RSI kép là một chiến lược định lượng đơn giản và thực tế. Nó xác định sự đảo ngược giá thông qua RSI để đạt được xu hướng đơn giản. Mặc dù có một số rủi ro đánh giá sai, các tối ưu hóa như điều chỉnh tham số, lọc tín hiệu có thể giúp giảm thiểu điều này và cho phép nó đóng một vai trò quan trọng trong việc bắt các xu hướng trung hạn đến dài hạn.
/*backtest start: 2023-12-19 00:00:00 end: 2023-12-26 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("RSI Algo", overlay=true) // Calculate start/end date and time condition DST = 1 //day light saving for usa //--- Europe London = iff(DST==0,"0000-0900","0100-1000") //--- America NewYork = iff(DST==0,"0400-1500","0500-1600") //--- Pacific Sydney = iff(DST==0,"1300-2200","1400-2300") //--- Asia Tokyo = iff(DST==0,"1500-2400","1600-0100") //-- Time In Range timeinrange(res, sess) => time(res, sess) != 0 london = timeinrange(timeframe.period, London) newyork = timeinrange(timeframe.period, NewYork) time_cond = true myPeriod = input(defval=14, type=input.integer, title="Period") myThresholdUp = input(defval=75, type=input.float, title="Upper Threshold") myThresholdDn = input(defval=25, type=input.float, title="Lower Threshold") myAlgoFlipToggle = input(defval=false, type=input.bool, title="Imverse Algorthim") myLineToggle = input(defval=true, type=input.bool, title="Show Lines") myLabelToggle = input(defval=true, type=input.bool, title="Show Labels") myRSI=rsi(close, myPeriod) buy = myAlgoFlipToggle ? falling(myRSI,1) and cross(myRSI, myThresholdDn) : rising(myRSI, 1) and cross(myRSI,myThresholdUp) //and time_cond sell = myAlgoFlipToggle ? rising(myRSI, 1) and cross(myRSI,myThresholdUp) : falling(myRSI,1) and cross(myRSI, myThresholdDn) //and time_cond myPosition = 0 myPosition := buy==1 ? 0 : sell==1 or myPosition[1]==1 ? 1 : 0 trendColor = buy ? color.red : sell ? color.green : na plot(myLineToggle ? buy and myPosition[1]==1 ? low - 0.004: sell and myPosition[1]==0 ? high + 0.004 : na : na, color=trendColor, style=plot.style_line, linewidth=4, editable=false) plotshape(myLabelToggle ? buy and myPosition[1]==1 ? low - 0.005 : na : na, style=shape.labelup, location=location.absolute, text="Buy", transp=0, textcolor = color.white, color=color.black, editable=false) plotshape(myLabelToggle ? sell and myPosition[1]==0 ? high + 0.005 : na : na, style=shape.labeldown, location=location.absolute, text="Sell", transp=0, textcolor = color.white, color=color.black, editable=false) strategy.initial_capital = 50000 //Calculate the size of the next trade balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(2,type=input.float,title="Risk %")/100 //risk % per trade isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...") stop = input(250, title="stop loss pips") tp = input(2500, title="take profit pips") if(isTwoDigit) stop := stop/100 temp01 = balance * risk //Risk in USD temp02 = temp01/stop //Risk in lots temp03 = temp02*100000 //Convert to contracts size = 1 strategy.entry("long",1,size,when=buy and myPosition[1]==1 ) strategy.entry("short",0,size,when=sell and myPosition[1]==0) strategy.exit("exit_long","long",loss=stop, profit=tp) //Long exit (stop loss) strategy.exit("exit_short","short",loss=stop, profit=tp) //Short exit (stop loss) //strategy.close_all(when= not time_cond)