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 (
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.
Logic cốt lõi của chiến lược là:
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.
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.
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.
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.
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.
Đó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:
Cài đặt đầu vào: nguồn, tham số RSI, dài / ngắn vv.
Tính toán RSI: tính toán RSI và kiểm tra các tín hiệu chéo.
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.
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.
Quản lý đơn đặt hàng: gửi đơn đặt hàng và phẳng trước khi đóng.
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.
Những lợi thế chính của chiến lược này là:
Mạng lưới động thích nghi với xu hướng, không giống như lưới cố định.
Chỉ điều chỉnh lưới điện khi xác nhận RSI, giảm tiếng ồn.
Các tín hiệu đột phá nhận được sự đảo ngược tốt hơn là chạm.
Đơn bằng trước khi đóng để tránh rủi ro khoảng cách qua đêm.
RSI hiệu quả để phát hiện quá mua / bán.
Chế độ Breakout cung cấp bước vào xu hướng sớm so với đảo ngược.
Đ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.
Mạng lưới hình ảnh và các vùng dài / ngắn.
Chọn quần shorts phù hợp với các thương nhân khác nhau.
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.
Ngoài ra còn có một số rủi ro tiềm ẩn cần lưu ý:
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.
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í.
Đ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.
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.
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ý.
Có thể hoạt động kém hơn trong xu hướng tăng đều đặn.
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ế:
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.
Kết hợp với các chỉ số xu hướng, tránh giao dịch các giai đoạn whipsaw.
Giảm kích thước giao dịch % và rủi ro cho mỗi giao dịch.
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.
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.
Backtest trong thời gian dài hơn để đánh giá sự ổn định của các tham số.
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.
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í.
Đ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ả.
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.
Chiến lược có thể được tăng cường hơn nữa bằng cách:
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.
Kiểm tra khoảng cách lưới khác nhau cho rủi ro-lợi nhuận tối ưu.
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.
Phát triển các điểm dừng thích nghi dựa trên biến động thị trường.
Tăng điều kiện nhập cảnh, chỉ nhập xu hướng rõ ràng để tránh bẫy.
Kiểm tra ngược trong thời gian dài hơn để đánh giá sự ổn định của các tham số.
Khám phá tối ưu hóa năng động dựa trên máy học để thích nghi.
Kết hợp các chiến lược lựa chọn để phòng ngừa rủi ro.
Đ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ả.
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, 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))