VWAP-RSI bán quá mức dưới chiến lược ngắn BTC

Tác giả:ChaoZhang, Ngày: 2023-12-29 14:12:54
Tags:

img

Tổng quan

Đây là một chiến lược ngắn BTC trên các khung thời gian dựa trên chỉ số RSI của VWAP. Nó tính toán Giá trung bình cân nhắc khối lượng (VWAP) của mỗi ngọn nến để có được đường cong VWAP, và sau đó áp dụng chỉ số RSI cho đường cong. Khi chỉ số RSI vượt qua vùng mua quá mức, nó sẽ ngắn trên BTC.

Chiến lược logic

  1. Tính toán VWAP của mỗi ngọn nến để có được một đường cong VWAP
  2. Áp dụng chỉ số RSI cho đường cong VWAP, với thời gian 20 ngày, mức mua quá mức ở 85 và mức bán quá mức ở 30
  3. Khi RSI vượt qua vùng mua quá mức (85) xuống vùng bán quá mức (30), mở vị trí ngắn
  4. Khóa vị trí sau khi giữ 28 cây nến hoặc nếu RSI vượt qua đường bán quá (30) một lần nữa

Phân tích lợi thế

  1. Sử dụng VWAP thay vì giá đóng đơn giản để phản ánh giá giao dịch thực tế
  2. Xác định tình trạng mua quá mức / bán quá mức với RSI để tránh mua cao và bán thấp
  3. Giao dịch qua các khung thời gian để tránh bị mắc kẹt
  4. Rủi ro có thể kiểm soát được với 28 điểm dừng lỗ

Rủi ro và giải pháp

  1. Giá tăng nhanh do sự kiện thiên nga đen, không thể ngăn chặn tổn thất
    • Sử dụng giao dịch xuyên khung thời gian để giảm rủi ro bị mắc kẹt
  2. Cài đặt tham số không phù hợp, dễ dàng bỏ lỡ cơ hội
    • Kiểm tra và tối ưu hóa các thông số RSI và mức mua quá mức / bán quá mức
  3. RSI không thể vượt qua vùng bán quá mức
    • Kết hợp với các chỉ số khác để xác định xu hướng, điều chỉnh các thông số linh hoạt

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

  1. Kiểm tra nhiều kết hợp tham số để tìm tối ưu
  2. Kết hợp với MACD, KD vv để đánh giá tình trạng mua quá mức / bán quá mức
  3. Các thiết lập tham số thử nghiệm riêng biệt cho các tài sản khác nhau
  4. Tối ưu hóa cơ chế dừng lỗ, đặt phạm vi dừng lỗ dựa trên biến động

Tóm lại

Chiến lược này xác định tình trạng mua quá mức / bán quá mức BTC với sự kết hợp của VWAP và RSI. Bằng cách giao dịch qua các khung thời gian, nó có thể kiểm soát rủi ro một cách hiệu quả. Logic chiến lược rõ ràng và dễ hiểu, đáng để thử nghiệm thêm và tối ưu hóa cho giao dịch trực tiếp.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4

strategy("Soran Strategy 2 - SHORT SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)


// ----------------- Inputs ----------------- //

reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).

// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28


stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)

stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)


// --------------- Laguerre ----------------- //

laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")

laguerre_cal(s,g) =>
    l0 = 0.0
    l1 = 0.0
    l2 = 0.0
    l3 = 0.0
    l0 := (1 - g)*s+g*nz(l0[1])
    l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
    l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
    l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
    (l0 + 2*l1 + 2*l2 + l3)/6


// ---------------- Rsi VWAP ---------------- //

rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))

rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV


// ------------------ Plots ----------------- //

prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)


// ---------------- Positions: only shows the Short and close shoret positions --------------- //

timebull = stratbull and time > stratstart
timebear = stratbear and time > stratstart


strategy.entry("Short", false, when = timebear and crossunder(rsiVWAP, ovrbgt), comment="")
strategy.close("Short", when = timebear and crossunder(rsiVWAP, ovrsld)[lateleave] or crossover(rsiVWAP, ovrsld), comment="")

Thêm nữa