Chiến lược lưới hộp RSI

Tác giả:ChaoZhang, Ngày: 2023-10-30 11:29:30
Tags:

img

Tổng quan

Chiến lược này là một bot giả lưới được thiết kế chủ yếu cho giao dịch thuật toán. Nó sử dụng một lưới động, khối lượng cân nhắc chỉ cập nhật khi RSI đáp ứng một số điều kiện nhất định. Nó cũng là một chiến lược đột phá, trong khi các bot lưới bình thường không (các bot lưới điển hình bán khi một lưới cao hơn đạt được, trong khi chiến lược này bán khi một lưới thấp hơn bị vi phạm trong điều kiện cụ thể).

Nói tóm lại, chiến lược cập nhật lưới của nó đến các giá trị cao nhất / thấp nhất theo khối lượng của nguồn cho bạn (src trong cài đặt) mỗi khi chỉ số RSI vượt qua dưới / trên mức mua quá mức / bán quá mức. Từ phạm vi này, nó tạo ra một lưới có khoảng cách đồng đều gồm năm đường, và sử dụng nguồn hiện tại để xác định đường lưới nào gần nhất. Sau đó, nếu nguồn vượt qua đường trực tiếp phía trên, nó đi vào đường dài. Nếu nguồn vượt qua đường trực tiếp bên dưới, nó đi vào đường ngắn.

Bạn có thể cấu hình short, nguồn, độ dài RSI, và mức mua quá mức / bán quá mức trong cài đặt.

Chiến lược logic

Logic cốt lõi của chiến lược là:

  1. Sử dụng chỉ số RSI để xác định các điểm đảo ngược xu hướng, sử dụng các đường chéo RSI của mức mua quá mức / bán quá mức làm tín hiệu xác nhận.

  2. Khi tín hiệu RSI xảy ra, ghi lại giá cao nhất / thấp nhất trong một khoảng thời gian như giới hạn trên / dưới của lưới.

  3. Chia phạm vi thành 5 đường lưới có khoảng cách đồng đều. Kiểm tra thời gian thực đường nào giá gần nhất.

  4. Khi giá vượt qua đường bên trên, mua mua. Khi giá vượt qua đường bên dưới, giảm giá và mua mua.

  5. Bằng cách sử dụng breakout thay vì chạm, nó có thể bắt được sự đảo ngược xu hướng tốt hơn.

  6. Đóng tất cả các lệnh kim tự tháp trước khi đóng để tránh rủi ro qua đêm.

Chiến lược bao gồm:

  1. Cài đặt đầu vào: nguồn, tham số RSI, dài / ngắn vv.

  2. Tính toán RSI: tính toán RSI và kiểm tra các tín hiệu chéo.

  3. Mạng lưới động: ghi lại phạm vi giá trên các tín hiệu RSI và tính toán các đường lưới.

  4. Kiểm tra tín hiệu: phát hiện các đường lưới phá giá cho tín hiệu dài / ngắn.

  5. Quản lý đơn đặt hàng: gửi đơn đặt hàng và phẳng trước khi đóng.

  6. Biểu đồ: vẽ đường lưới, vùng dài / ngắn vv.

Bằng cách cập nhật năng động lưới và sử dụng chỉ số RSI cho bối cảnh xu hướng cộng với các tín hiệu đột phá, chiến lược này có thể theo dõi hiệu quả xu hướng và đảo ngược khi xu hướng thay đổi.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Mạng lưới động thích nghi với xu hướng, không giống như lưới cố định.

  2. Chỉ điều chỉnh lưới điện khi xác nhận RSI, giảm tiếng ồn.

  3. Các tín hiệu đột phá nhận được sự đảo ngược tốt hơn là chạm.

  4. Đơn bằng trước khi đóng để tránh rủi ro khoảng cách qua đêm.

  5. RSI hiệu quả để phát hiện quá mua / bán.

  6. Chế độ Breakout cung cấp bước vào xu hướng sớm so với đảo ngược.

  7. Điều chỉnh khoảng cách lưới và kích thước cho phép điều chỉnh rủi ro.

  8. Mạng lưới hình ảnh và các vùng dài / ngắn.

  9. Chọn quần shorts phù hợp với các thương nhân khác nhau.

  10. Logic đơn giản và rõ ràng phù hợp với giao dịch algos.

Những điều này làm cho chiến lược có khả năng theo dõi xu hướng tự động với kiểm soát rủi ro cho giao dịch trực tiếp.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro tiềm ẩn cần lưu ý:

  1. Whipsaw thị trường có thể gây ra dừng lỗ có thể mở rộng dừng hoặc tạm dừng giao dịch.

  2. Những khoảng trống qua đêm có thể để lại những khoảng trống lớn và giảm kích thước vị trí.

  3. Điều chỉnh tham số xấu có thể làm tăng giao dịch hoặc lỗi tín hiệu. Yêu cầu tối ưu hóa cẩn thận.

  4. Phí cao có thể làm xói mòn lợi nhuận từ giao dịch lưới. nên giảm kích thước giao dịch hoặc sử dụng sàn giao dịch phí thấp hơn.

  5. Các tín hiệu đột phá có thể chậm lại một chút, cần ngưỡng đột phá hợp lý.

  6. Có thể hoạt động kém hơn trong xu hướng tăng đều đặn.

  7. Cần đủ vốn cho kích thước vị trí lớn hơn và kim tự tháp, nếu không kết quả sẽ kém.

Hạn chế:

  1. Tối ưu hóa các thông số để giảm tần suất giao dịch và giao dịch quá mức.

  2. Kết hợp với các chỉ số xu hướng, tránh giao dịch các giai đoạn whipsaw.

  3. Giảm kích thước giao dịch % và rủi ro cho mỗi giao dịch.

  4. Kiểm tra các ngưỡng đột phá khác nhau để cân bằng tốt nhất giữa tính kịp thời và ổn định.

  5. Thêm nhiều điều kiện nhập cảnh, chỉ nhập xu hướng rõ ràng để tránh bị mắc kẹt.

  6. Backtest trong thời gian dài hơn để đánh giá sự ổn định của các tham số.

  7. Khám phá tối ưu hóa tham số động dựa trên học máy để thích nghi với thị trường.

  8. Xem xét kết hợp với các chiến lược quyền chọn để bảo hiểm rủi ro vị trí.

  9. Điều chỉnh các thông số dựa trên các điều kiện thị trường gần đây để duy trì chiến lược hiệu quả.

  10. Xây dựng các nền tảng tối ưu hóa trực quan để hỗ trợ thử nghiệm nhanh.

Với tối ưu hóa tham số, chải tín hiệu, và nhiều thông tin thị trường hơn, rủi ro có thể được giảm để làm cho một chiến lược algos thực sự đáng tin cậy.

Cơ hội gia tăng

Chiến lược có thể được tăng cường hơn nữa bằng cách:

  1. Tối ưu hóa các thông số RSI, kiểm tra các giai đoạn RSI cho các combo tốt nhất.

  2. Kiểm tra khoảng cách lưới khác nhau cho rủi ro-lợi nhuận tối ưu.

  3. Thêm các chỉ số khác vào các tín hiệu lọc, ví dụ: MACD, KD vv để cải thiện độ chính xác.

  4. Phát triển các điểm dừng thích nghi dựa trên biến động thị trường.

  5. Tăng điều kiện nhập cảnh, chỉ nhập xu hướng rõ ràng để tránh bẫy.

  6. Kiểm tra ngược trong thời gian dài hơn để đánh giá sự ổn định của các tham số.

  7. Khám phá tối ưu hóa năng động dựa trên máy học để thích nghi.

  8. Kết hợp các chiến lược lựa chọn để phòng ngừa rủi ro.

  9. Điều chỉnh các tham số dựa trên các điều kiện thị trường gần đây để duy trì hiệu quả.

  10. Xây dựng các nền tảng tối ưu hóa trực quan để thử nghiệm nhanh.

Với tối ưu hóa tự động, combo chiến lược, thông tin thị trường nhiều hơn vv, nó có thể đạt được sự ổn định và lợi nhuận tốt hơn như một chiến lược giao dịch thực sự.

Tóm lại

Tóm lại, chiến lược RSI Box Grid sử dụng RSI để xác định xác nhận đảo ngược xu hướng, thiết lập các lưới phạm vi giá năng động, phá vỡ giao dịch và làm phẳng nội ngày - tạo thành một xu hướng linh hoạt sau chiến lược giao dịch algo. So với lưới cố định, nó thích nghi tốt hơn với những thay đổi của thị trường.

Chiến lược này có những lợi thế bao gồm RSI cho bối cảnh xu hướng, lưới năng động, giao dịch đột phá và hoàn toàn phẳng trong ngày. Điều này cho phép nó theo dõi hiệu quả xu hướng với kiểm soát rủi ro. Tuy nhiên, các rủi ro như dừng lỗ, khoảng cách qua đêm tồn tại, đòi hỏi tối ưu hóa, chải tín hiệu và quản lý rủi ro.

Có rất nhiều cơ hội cải tiến, bằng cách kết hợp nhiều chỉ số hơn, tối ưu hóa ML, kiểm tra hậu trường trực quan vv, nó có thể trở thành một chiến lược giao dịch algo lợi nhuận cao mạnh mẽ hơn.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wbburgin

//@version=5
// strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000, 
//  default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10)

src = input.source(close,"Source")
rsiLength = input.int(14,"RSI Length")
oblvl = input.int(70,"Overbought Level")
oslvl = input.int(30,"Oversold Level")
useShorts = input.bool(false,"Use Shorts",inline="B")
showGrid = input.bool(false,"Show Grid",inline="B")

rsi = ta.rsi(src,rsiLength)

rsi_crossdn = ta.crossunder(rsi,oblvl)
rsi_crossup = ta.crossover(rsi,oslvl)

highest = ta.vwma(ta.highest(src,rsiLength),rsiLength)
lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength)

gridTop = ta.valuewhen(rsi_crossdn,highest,0)
gridBottom = ta.valuewhen(rsi_crossup,lowest,0)
gridMiddle = math.avg(gridTop,gridBottom)
gridMidTop = math.avg(gridMiddle,gridTop)
gridMidBottom = math.avg(gridMiddle,gridBottom)

diff1 = math.abs(src - gridTop)
diff2 = math.abs(src - gridBottom)
diff3 = math.abs(src - gridMiddle)
diff4 = math.abs(src - gridMidTop)
diff5 = math.abs(src - gridMidBottom)

minDiff = math.min(diff1, diff2, diff3, diff4, diff5)

// Determine which line is the closest
float closestLine = na
if minDiff == diff1
    closestLine := gridTop
else if minDiff == diff2
    closestLine := gridBottom
else if minDiff == diff3
    closestLine := gridMiddle
else if minDiff == diff4
    closestLine := gridMidTop
else if minDiff == diff5
    closestLine := gridMidBottom

buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom)
sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom)

condition_bull = buyCrosses
condition_bear = sellCrosses

var float bull_status_line = na
var float bear_status_line = na
var float bull_buy_line = na
var float bear_sell_line = na

if condition_bull
    bull_status_line := closestLine
if condition_bear
    bear_status_line := closestLine

if bull_status_line == gridBottom
    bull_buy_line := gridMidBottom
if bull_status_line == gridMidBottom
    bull_buy_line := gridMiddle
if bull_status_line == gridMiddle
    bull_buy_line := gridMidTop
if bull_status_line == gridMidTop
    bull_buy_line := gridTop

if bear_status_line == gridTop
    bear_sell_line := gridMidTop
if bear_status_line == gridMidTop
    bear_sell_line := gridMiddle
if bear_status_line == gridMiddle
    bear_sell_line := gridMidBottom
if bear_status_line == gridMidBottom
    bear_sell_line := gridBottom

l = ta.crossover(src,bull_buy_line)
s = ta.crossunder(src,bear_sell_line)

if l
    strategy.entry("Long",strategy.long)
if s
    strategy.close("Long")
    if useShorts
        strategy.entry("Short",strategy.short)

// Plotting
in_buy = ta.barssince(l) < ta.barssince(s)
u=plot(bull_buy_line,color=na,title="Buy Plot")
d=plot(bear_sell_line,color=na,title="Sell Plot")

plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2")
plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1")
plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0")
plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1")
plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2")


fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))

Thêm nữa