Chiến lược đảo ngược dựa trên chỉ số RSI nhanh và màu nến

Tác giả:ChaoZhang, Ngày: 2023-09-13 17:24:54
Tags:

Chiến lược này được gọi là Chiến lược đảo ngược dựa trên RSI nhanh và màu nến. Nó sử dụng RSI nhanh để đánh giá mức mua quá mức / bán quá mức và màu nến để xác định hướng xu hướng, nhập vào các giao dịch đảo ngược khi cả hai cung cấp tín hiệu đồng thời.

Chỉ số RSI nhanh có các thông số nhỏ hơn và có thể nhanh chóng phát hiện các điều kiện mua quá mức / bán quá mức giá.

Màu nến cho thấy giá trắng đóng gần mở, màu xanh lá cây đại diện cho giá tăng và cờ đỏ giảm giá.

Logic giao dịch là:

Khi chỉ số RSI nhanh cho thấy quá bán và 4 ngọn nến màu đỏ liên tiếp xuất hiện, nó được coi là một tín hiệu đảo ngược mạnh mẽ để mua dài.

Khi chỉ số RSI nhanh bị mua quá mức và 4 ngọn nến màu xanh lá cây thẳng xuất hiện, nó báo hiệu một cơ hội đảo ngược mạnh mẽ để đi ngắn.

Nếu đã giữ các vị trí dài, thoát khi 1 nến màu xanh lá cây xuất hiện. Nếu giữ các vị trí ngắn, thoát khi 1 nến màu đỏ xuất hiện.

Lợi thế của chiến lược này là sử dụng các chỉ số kết hợp để xác định chính xác các tín hiệu đảo ngược.

Tóm lại, giao dịch đảo ngược dựa trên các chỉ số xác định chính xác thời gian. Việc áp dụng hợp lý của chỉ số RSI cộng với thông tin nến có thể cải thiện hiệu suất chiến lược. Nhưng không có chiến lược nào là hoàn hảo. Các nhà giao dịch vẫn cần duy trì tư duy giao dịch linh hoạt.


/*backtest
start: 2022-09-06 00:00:00
end: 2023-01-20 00:00:00
period: 4d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Hundred Strategy v1.0", shorttitle = "Hundred str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
lev = input(5, defval = 5, minval = 1, maxval = 100, title = "leverage")
onlyprofit = input(true, defval = true, title = "Only Profit")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
cbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Color Bars")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(rsisrc), 0), fast)
fastdown = rma(-min(change(rsisrc), 0), fast)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

//Signals
long = strategy.position_size >= 0
short = strategy.position_size <= 0
up = sma(bar, cbars) == -1 and long and dnrsi
dn = sma(bar, cbars) == 1 and short and uprsi
profit = (strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price) or onlyprofit == false
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and profit
lot = strategy.position_size == 0 ? strategy.equity / close * lev : lot[1]

//Trading
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Thêm nữa