
Chiến lược phá vỡ RSI hai chiều là một chiến lược giao dịch thuật toán sử dụng chỉ số RSI để xác định điểm đảo ngược giá. Nó đánh giá liệu thị trường có vượt quá mức bán tháo và phát ra tín hiệu giao dịch bằng cách so sánh chỉ số RSI với giá trị tháo gỡ trên hoặc dưới.
Chiến lược này dựa chủ yếu vào chỉ số RSI để đánh giá tình hình. Chỉ số RSI được tính dựa trên sự thay đổi của giá đóng cửa trong một khoảng thời gian nhất định, nó phản ánh xu hướng mua bán của cổ phiếu. Khi RSI vượt qua mức giá trên (bằng mặc định 75), nó cho thấy cổ phiếu đã vào khu vực mua quá mức; khi RSI vượt qua mức giá dưới (bằng mặc định 25), nó cho thấy cổ phiếu đã vào khu vực bán quá mức.
Quy tắc phán quyết chiến lược:
Nó có logic giao dịch đơn giản và rõ ràng, tham số tham chiếu được thiết lập hợp lý, có thể cấu hình rộng rãi, phù hợp để chụp xu hướng lớn hơn trong thị trường.
Chiến lược này có những lợi thế sau:
Nhìn chung, các tham số tham chiếu của chiến lược được thiết lập hợp lý, dễ thực hiện, có thể xác định hiệu quả sự đảo ngược giá thông qua chỉ số RSI, phù hợp để nắm bắt xu hướng lớn của thị trường đường dài và đường dài, là một chiến lược định lượng dễ sử dụng.
Mặc dù chiến lược này đơn giản và đáng tin cậy, nhưng chúng ta không thể bỏ qua những rủi ro tiềm ẩn:
Để kiểm soát rủi ro, chúng ta cần lưu ý những điều sau đây:
Với chiến lược này chủ yếu có nguy cơ bị đánh giá sai lầm và mất mát do biến động, chúng ta có thể tối ưu hóa từ các khía cạnh sau:
Chiến lược phá vỡ RSI hai chiều nói chung là một chiến lược định lượng đơn giản và thực tế. Nó phán đoán giá đảo ngược bằng chỉ số RSI, thực hiện theo dõi xu hướng đơn giản. Mặc dù có một số rủi ro sai lầm, nhưng có thể được tối ưu hóa thông qua điều chỉnh tham số và lọc tín hiệu, đóng vai trò quan trọng trong việc nắm bắt xu hướng đường dài.
/*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)