CBMA Bollinger Bands Breaker Chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-06 16:25:01
Tags:

img

Tổng quan

Chiến lược này sử dụng CBMA như là chỉ số kỹ thuật chính kết hợp với Bollinger Bands để xác định xu hướng thị trường và thực hiện chiến lược phá vỡ. Nó sẽ ngắn khi giá vượt qua dải trên và dài khi giá vượt qua dải dưới, thuộc về hệ thống phá vỡ hai đường phổ biến.

Chiến lược logic

  1. Tính toán CBMA: Sử dụng EMA thích nghi để làm mịn CBMA có thể theo dõi sự thay đổi giá hiệu quả.

  2. Thiết lập các thông số Bollinger Bands: Sử dụng CBMA như một dải giữa, và thiết lập các dải trên/dưới bằng cách sử dụng trình nhân độ lệch chuẩn, có thể được điều chỉnh dựa trên thị trường.

  3. Giao dịch đột phá: Bán khi giá phá vỡ trên dải trên, mua khi giá phá vỡ dưới dải dưới, sử dụng chiến lược theo xu hướng.

  4. Sử dụng lệnh hủy flash, chỉ giao dịch theo một hướng tại một thời điểm.

  5. Đặt kích thước lệnh cố định, có thể được điều chỉnh dựa trên vốn.

Phân tích lợi thế

  1. CBMA có tính trơn tru tốt và có thể theo dõi giá hiệu quả.

  2. EMA thích nghi tối ưu hóa khả năng phản hồi của đường trung bình động.

  3. Các dải trên/dưới cho tín hiệu hướng rõ ràng khi xảy ra sự đột phá.

  4. Mô hình theo xu hướng tránh giao dịch chĩa.

  5. Kích thước lệnh cố định kiểm soát rủi ro giao dịch duy nhất.

Phân tích rủi ro

  1. Các thông số Bollinger Bands cần tối ưu hóa, quá rộng hoặc quá hẹp có thể gây ra vấn đề.

  2. Các tín hiệu đột phá có thể có những đột phá sai.

  3. Cần dừng lỗ để kiểm soát lỗ.

  4. Số lượng lệnh cố định không thể điều chỉnh vị trí dựa trên thị trường.

  5. Chỉ giao dịch một hướng, không thể kiếm được nhiều hơn.

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

  1. Động thái tối ưu hóa các thông số Bollinger Bands để phù hợp với thị trường tốt hơn.

  2. Thêm nhiều chỉ số để lọc, tránh những sự đột phá sai.

  3. Thêm stop loss để giữ lợi nhuận.

  4. Giao dịch phòng hộ, đi cả dài và ngắn để có lợi nhuận lớn hơn.

  5. Thêm hệ thống định vị.

Kết luận

Chiến lược này là một hệ thống theo xu hướng phá vỡ bằng cách sử dụng công nghệ trung bình động thích nghi kết hợp với Bollinger Bands cho các tín hiệu phá vỡ rõ ràng. Nó có logic đơn giản và kiểm soát rủi ro kích thước lệnh cố định, có một số giá trị thực tế. Nhưng các vấn đề như phá vỡ sai và tối ưu hóa tham số vẫn còn, cần nhiều chỉ số hơn để cải thiện và nâng cao hiệu suất giao dịch thực tế trong khi kiểm soát rủi ro. Nhìn chung, đây là một hệ thống phá vỡ bắt đầu tốt với nhiều chỗ để cải thiện.


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

//@version=4
strategy(title="CBMA Bollinger Bands Strategy directed [ChuckBanger]", shorttitle="CBMA BB CB", 
   overlay=true )


length = input(title="Length", type=input.integer, defval=12, minval=1)
regular = input(title="Regular BB Or CBMA?", type=input.bool, defval=false)
src = input(title="Source", type=input.source, defval=close)
mult = input(title="Multipler", type=input.float, defval=2.3, minval=.001, maxval=50, step=.1)
emaLen = input(title="EMA Length", type=input.integer, defval=11, minval=1)
emaGL = input(title="EMA Gain Limit", type=input.integer, defval=50, minval=1)
highlight = input(title="Highlight On/Off", type=input.bool, defval=true)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

//strategy.risk.max_drawdown(50, strategy.percent_of_equity)

calc_hma(src, length) =>
    hullma = wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
    hullma

calc_cbma(price, length, emaLength, emaGainLimit) =>
    alpha = 2 / (emaLength + 1)
    ema = ema(price, emaLength)
    int leastError = 1000000
    
    float ec = 0
    float bestGain = 0
    
    for i = emaGainLimit to emaGainLimit
        gain = i / 10
        ec := alpha * ( ema + gain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
        error = price - ec
        if (abs(error) < leastError)
            leastError = abs(error)
            bestGain = gain
    
    ec := alpha * ( ema + bestGain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
    hull = calc_hma(price, length)
    
    cbma = (ec + hull) / 2
    cbma

cbma = calc_cbma(src, length, emaLen, emaGL)
basis = regular ? sma(src, length) : cbma
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
cbmaColor = fixnan(highlight and not regular ? cbma > high ? color.purple : cbma < low ? color.aqua : na : color.red)
plot(basis, color=cbmaColor)
p1 = plot(upper, color=color.blue)
p2 = plot(lower, color=color.blue)
fill(p1, p2)

if (crossover(src, lower))
    strategy.entry("CBMA_BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="CBMA_BBandLE")
else
    strategy.cancel(id="CBMA_BBandLE")

if (crossunder(src, upper))
    strategy.entry("CBMA_BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="CBMA_BBandSE")
else
    strategy.cancel(id="CBMA_BBandSE")


Thêm nữa