DAKELAX-XRPUSDT Bollinger Band Mean Reversation Strategy (Chiến lược đảo ngược đường dây Bollinger)

Tác giả:ChaoZhang, Ngày: 2023-11-02 16:18:34
Tags:

img

Tổng quan

DAKELAX-XRPUSDT là một chiến lược bot giao dịch cho XRPUSDT trên Binance. Nó là một chiến lược ngược đơn giản để sử dụng các dải Bollinger, và hoạt động tốt trong backtest trên khung thời gian H1 từ tháng 5 đến tháng 8 năm 2019, cũng như chạy trực tiếp.

Chiến lược logic

Chiến lược này đầu tiên tính toán SMA 20 giai đoạn và Bollinger Bands trên/dưới. Dải trên là SMA + 1.5 độ lệch chuẩn, và dải dưới là SMA - 2.2 độ lệch chuẩn. Sau đó nó tính toán tốc độ co lại của các dải. Dải được lấp đầy màu đen nếu co lại > 1.3, màu vàng nếu < 0.1, nếu không màu đỏ.

Khi giá đóng ở dưới dải dưới, nó đi dài với 20 đồng xu. Khi đóng ở trên dải trên, nó đóng tất cả các vị trí.

Chiến lược cũng tính toán đường EMA nhanh 7 giai đoạn và đường EMA chậm 18 giai đoạn.

Phân tích lợi thế

  • Bollinger Bands và tỷ lệ co lại trực quan xác định xu hướng và biến động
  • Kết hợp với EMA crossover thêm sức mạnh cho tín hiệu
  • Kết quả backtest tốt và tương đối ổn định trong giao dịch trực tiếp

Phân tích rủi ro

  • Khả năng thất bại cao khi phá vỡ sau khi thu hẹp dải
  • Tiền mua định giá mà không có rủi ro kích cỡ vị trí quá cao
  • Quá nhiều crossover trong các thị trường khác nhau có nguy cơ mất mát
  • Chỉ xem xét các yếu tố hàng ngày, bỏ lỡ xu hướng khung thời gian lớn hơn

Xem xét kích thước vị trí năng động hoặc dừng lỗ để kiểm soát rủi ro. Tối ưu hóa chiến lược chéo để tránh các whipsaws trong các thị trường dao động. Thêm các chỉ số xu hướng khung thời gian cao hơn để xác định các động thái lớn hơn.

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

  • Điều chỉnh số tiền mua dựa trên băng thông rộng, ít hơn khi hợp đồng và nhiều hơn khi mở rộng

  • Xem xét tích lũy vị trí khi co thắt được nhìn thấy nhưng tín hiệu chưa được kích hoạt

  • Thêm chỉ số xu hướng khung thời gian dài hơn để xác định hướng tổng thể, tạm dừng chiến lược khi không rõ ràng

  • Kết hợp dừng lỗ để kiểm soát rủi ro, có thể đặt gần mức thấp gần đây của dải

  • Tối ưu hóa các thông số chéo như thời gian EMA để tránh bị mắc kẹt

Tóm lại

DAKELAX-XRPUSDT là một chiến lược bot giao dịch sử dụng Bollinger Band co lại với EMA crossover. Nó trực quan và có kết quả backtest tốt nhưng chứa một số rủi ro. Những rủi ro này có thể được giảm thông qua kích thước vị trí, chiến lược dừng, thêm stop loss và tối ưu hóa logic crossover.


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

//@version=3
//study(title="Tradebotler DAKELAX Binance:XRPUSDT Study-strategy", overlay=true)
strategy(title="Tradebotler DAKELAX Binance:XRPUSDT Strategy", overlay=true)

buyAmount = input(20, minval=1)

// SMA20
len2 = input(20, minval=1)
src2 = input(close)
out2 = sma(src2, len2)

// BB contraction value (medium tight)
contraction_value = 1.3
// BB contraction value (very tight)
contraction_value2 = 0.1

// 2xSTDEV BB calculation
dev = stdev(src2, len2)
upper_BB = out2  + 1.5*dev
lower_BB = out2  - 2.2*dev
x1 = plot(upper_BB, color=blue, linewidth = 2)
x2 = plot(lower_BB, color=blue, linewidth = 2)

contraction = (upper_BB-lower_BB)/out2

//fills the BBands according to the contraction value (threshold)

// Calculate values
fastMA  = ema(close, 7)
slowMA  = ema(close, 18)

// Determine alert setups
crossUp   = crossover(fastMA, slowMA)
crossDown = crossunder(fastMA, slowMA)

buySignal   = (crossUp or crossUp[1]) and (low > slowMA)
shortSignal = (crossDown or crossDown[1]) and (high < slowMA)

// Highlight alerts on the chart
bgColour =
     (buySignal and barstate.isrealtime) ? green :
     (shortSignal and barstate.isrealtime) ? red :
     na

signalBuy = (buySignal ) ? true : false
signalSell = (shortSignal ) ? true : false

test = true

test := not test[1]

closesBelowLowerBB = close < lower_BB
closesAboveUpperBB = close > upper_BB

tmptext = "blah"

// Plot values
plot(series=fastMA, color=teal)
plot(series=slowMA, color=orange)

plot(out2, color=black, linewidth = 1)
fill(x1, x2, color = contraction > contraction_value ? black : contraction < contraction_value2 ? yellow: red)

isInRed = contraction < contraction_value and contraction >= contraction_value2
isInYellow = contraction < contraction_value and contraction < contraction_value2

if ( closesBelowLowerBB )
    strategy.order('Buy', strategy.long, buyAmount)

if ( closesAboveUpperBB )
    strategy.close_all()



Thêm nữa