Chiến lược này sử dụng chỉ số RSI để đánh giá xu hướng thị trường, phát ra tín hiệu giao dịch trong khu vực mua quá mức, nhằm mục đích nắm bắt động thái điều chỉnh đường ngắn của thị trường. Nó kết hợp cả chỉ số đường cân bằng và logic dừng lỗ để lọc tín hiệu giao dịch và kiểm soát rủi ro.
Tính toán RSI ((14) và đặt đường mua quá mức là 67, đường bán quá mức là 44.
Khi RSI vượt quá đường mua, nó phát ra tín hiệu bán; khi RSI vượt quá đường bán, nó phát ra tín hiệu mua.
Bộ lọc đường trung bình chồng chéo, chỉ khi giá đóng cửa thấp hơn giá trung bình ngày hôm qua, RSI sẽ gửi tín hiệu mua bán; chỉ khi giá đóng cửa cao hơn giá trung bình ngày hôm qua, RSI sẽ gửi tín hiệu mua bán.
Cài đặt logic dừng lỗ. Bạn có thể chọn dừng lỗ theo số điểm cố định hoặc theo giá trị RSI.
Sử dụng chỉ số RSI để đánh giá quá mua và quá bán để nắm bắt cơ hội điều chỉnh đường ngắn.
Chuẩn bị cho các hoạt động lọc liên kết với đường thẳng để tránh hoạt động đảo ngược trong một xu hướng.
Thiết lập Stop Loss và kiểm soát lỗ đơn.
Có thể nắm bắt cơ hội đảo ngược trước khi xu hướng đảo ngược.
RSI có tính chậm trễ, có thể có sự lệch hướng dẫn đến tín hiệu giả. Giải pháp là điều chỉnh các tham số thích hợp hoặc sử dụng chúng với các chỉ số khác.
Điểm dừng cố định có thể quá lớn hoặc quá nhỏ. Có thể chọn trailing stop động hơn.
Các điểm dừng cố định có thể dừng quá sớm hoặc số điểm dừng quá nhỏ. Các điểm dừng được xem xét dựa trên giá trị RSI hoặc ATR.
Không có khả năng lọc hiệu quả các biến động trong xu hướng, có thể dẫn đến việc mở và mất vị trí thường xuyên. Các tham số RSI có thể được điều chỉnh thích hợp hoặc thêm các điều kiện lọc khác.
Kiểm tra hiệu quả của chỉ số RSI với các tham số khác nhau.
Điều chỉnh các tham số của RSI để kiểm tra các đường giao dịch khác nhau.
Thử các loại moving average khác hoặc các chỉ số lọc khác.
Kiểm tra hiệu quả của dừng cố định và dừng động.
Tối ưu hóa giá trị dừng lỗ để phù hợp hơn với luật biến động của thị trường.
Các điều kiện lọc mới được thêm vào để ngăn chặn sự biến động.
Cân nhắc kết hợp nhiều chu kỳ thời gian để xác minh và cải thiện chất lượng tín hiệu.
Chiến lược này sử dụng chỉ số RSI để đánh giá tình trạng quá mua quá bán, kết hợp với đường cân bằng và dừng lỗ để giao dịch hai chiều. Có thể nắm bắt cơ hội đảo ngược thị trường trong thời gian ngắn. Sau khi tối ưu hóa tham số và bổ sung các điều kiện lọc, có thể tiếp tục nâng cao hiệu quả lợi nhuận của chiến lược và kiểm soát rủi ro.
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//© профешинил хомячело
//@version = 4
strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1
n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077
buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)
// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
if(buysignal)
strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
n += 1000
if(sellsignal)
strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
n += 1000
//лонги орні
if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//стоп-лосс і ціль
//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")
//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick
if(ut==true and us==false)
strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
if(ut==true and us==true)
strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
//закриття по rsi
if(rsion == 1 )
pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
if(rsi > rcl)
strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
if(rsi < rcs)
strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))