Chiến lược giao dịch định lượng dựa trên chỉ số TRSI và SUPER

Tác giả:ChaoZhang, Ngày: 2023-12-15 16:05:51
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số Relative Strength Index (TRSI) và Super Trend để tạo thành một chiến lược giao dịch định lượng tương đối hoàn chỉnh.

Chiến lược logic

  1. Tính toán chỉ số TRSI để xác định xem thị trường có ở trạng thái mua quá mức hay bán quá mức và phát ra tín hiệu mua và bán
  2. Sử dụng chỉ số Super Trend để lọc các tín hiệu tiếng ồn và xác nhận xu hướng cơ bản
  3. Đặt điểm dừng lỗ và lấy lợi nhuận ở các giai đoạn khác nhau của các vị trí có lợi nhuận

Đặc biệt, chiến lược đầu tiên tính toán chỉ số TRSI để đánh giá xem thị trường đã bước vào khu vực mua quá mức hoặc bán quá mức, và sau đó tính toán chỉ số Super Trend để xác định hướng xu hướng chính.

Phân tích lợi thế

Chiến lược này có những lợi thế sau:

  1. Sự kết hợp nhiều chỉ số cải thiện độ chính xác tín hiệu. TRSI xác định thời gian và Super Trend lọc hướng.
  2. Áp dụng cho giao dịch xu hướng trung bình và dài hạn.
  3. Các thiết lập dừng lỗ và lấy lợi nhuận là hợp lý, rút tỷ lệ quỹ khác nhau ở các giai đoạn lợi nhuận khác nhau để kiểm soát rủi ro hiệu quả.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Giao dịch trung bình đến dài hạn không nắm bắt được các cơ hội giao dịch ngắn hạn.
  2. Cài đặt tham số TRSI không chính xác có thể bỏ qua các vùng mua quá mức và bán quá mức.
  3. Cài đặt tham số Super Trend không chính xác có thể phát ra tín hiệu sai.
  4. Không gian dừng lỗ quá lớn không kiểm soát rủi ro hiệu quả.

Để giải quyết những rủi ro này, chúng ta có thể tối ưu hóa từ các khía cạnh sau:

Hướng dẫn tối ưu hóa

  1. Bao gồm nhiều chỉ số ngắn hạn hơn để xác định nhiều cơ hội giao dịch hơn.
  2. Điều chỉnh các thông số TRSI để thu hẹp khoảng cách lỗi.
  3. Kiểm tra và tối ưu hóa các thông số siêu xu hướng.
  4. Thiết lập stop loss nổi để theo dõi các đường stop loss trong thời gian thực.

Tóm lại

Chiến lược này tích hợp nhiều chỉ số như TRSI và Super Trend để tạo thành một chiến lược giao dịch định lượng tương đối hoàn chỉnh. Nó có thể xác định hiệu quả xu hướng trung và dài hạn trong khi đặt dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro. Vẫn còn nhiều chỗ để tối ưu hóa, với những cải tiến sau đó có thể trong các lĩnh vực như cải thiện độ chính xác tín hiệu và xác định nhiều cơ hội giao dịch hơn. Nhìn chung, đây là điểm khởi đầu tốt cho một chiến lược định lượng.


/*backtest
start: 2022-12-14 00:00:00
end: 2023-11-26 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4
strategy(title = "SuperTREX strategy", overlay = true)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
length = input( 14 )
overSold = input( 35 )
overBought = input( 70 )
HTF = input("W", type=input.resolution)
ti = change( time(HTF) ) != 0
p = fixnan( ti ? close : na )

vrsi = rsi(p, length)
price = close
var bool long = na
var bool short = na

long :=crossover(vrsi,overSold) 
short := crossunder(vrsi,overBought)

var float last_open_long = na
var float last_open_short = na

last_open_long := long ? close : nz(last_open_long[1])
last_open_short := short ? close : nz(last_open_short[1])


entry_value =last_open_long
entry_value1=last_open_short

xy=(entry_value+entry_value)/2

// INPUTS //
st_mult   = input(4,   title = 'SuperTrend Multiplier', minval = 0, maxval = 100, step = 0.01)
st_period = input(10, title = 'SuperTrend Period',     minval = 1)

// CALCULATIONS //
up_lev =xy - (st_mult * atr(st_period))
dn_lev =xy + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := entry_value[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := entry_value1[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend = 0
trend := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend[1], 1)

// Calculate SuperTrend Line
st_line = trend ==1 ? up_trend : down_trend
plot(xy,color = trend == 1 ? color.green : color.red)

buy=crossover( close, st_line) 
sell1=crossunder(close, st_line) 
 


buy1=buy
//

sell=sell1


// STRATEGY

plotshape(buy , title="buy", text="Buy", color=color.green, style=shape.labelup, location=location.belowbar, size=size.small, textcolor=color.white, transp=0)  //plot for buy icon
plotshape(sell, title="sell", text="Sell", color=color.red, style=shape.labeldown, location=location.abovebar, size=size.small, textcolor=color.white, transp=0)  //plot for sell icon
// Take profit

//
l = buy 
s1=sell 
if l 
    strategy.entry("buy", strategy.long)
if s1 
    strategy.entry("sell", strategy.short)
per(pcnt) =>  strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
stoploss=input(title=" stop loss", defval=25, minval=0.01)
los = per(stoploss)
q1=input(title=" qty_percent1", defval=25, minval=1)
q2=input(title=" qty_percent2", defval=25, minval=1)
q3=input(title=" qty_percent3", defval=25, minval=1)
tp1=input(title=" Take profit1", defval=2, minval=0.01)
tp2=input(title=" Take profit2", defval=4, minval=0.01)
tp3=input(title=" Take profit3", defval=6, minval=0.01)
tp4=input(title=" Take profit4", defval=8, minval=0.01)
strategy.exit("x1", qty_percent = q1, profit = per(tp1), loss = los)
strategy.exit("x2", qty_percent = q2, profit = per(tp2), loss = los)
strategy.exit("x3", qty_percent = q3, profit = per(tp3), loss = los)
strategy.exit("x4", profit = per(tp4), loss = los)


Thêm nữa