Nhiều chiến lược sử dụng dải Bollinger trung bình động


Ngày tạo: 2024-02-06 15:08:26 sửa đổi lần cuối: 2024-02-06 15:08:26
sao chép: 4 Số nhấp chuột: 632
1
tập trung vào
1617
Người theo dõi

Nhiều chiến lược sử dụng dải Bollinger trung bình động

Tổng quan

Chiến lược này xây dựng các vùng Brin bằng cách nhập các loại trung bình di chuyển khác nhau để khám phá nhiều cơ hội giao dịch hơn. Nó cung cấp 12 loại trung bình di chuyển có thể được kết hợp linh hoạt để có được các tham số tốt nhất.

Nguyên tắc chiến lược

Cốt lõi của chiến lược này là sử dụng các loại trung bình di chuyển mà người dùng nhập, bao gồm 12 loại, bao gồm SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL, và nhiều loại khác nhau, kết hợp với chỉ số Brin Belt để tạo ra tín hiệu giao dịch. Đường trung đạo của Brin Belt sử dụng trung bình di chuyển được lựa chọn, đường trung đạo lên và xuống là chênh lệch tiêu chuẩn âm một.

Mã có các phần chính như sau:

  1. Định nghĩa các hàm tính toán cho 12 loại moving average, bao gồm SMA, EMA, WMA, v.v.
  2. Hàm getMA trả về đường trung bình di chuyển tương ứng dựa trên tham số nhập mav.
  3. Tính trung đạo, đường lên và đường xuống của băng Bryn. Trung đạo được tính bằng hàm getMA và là trung bình di chuyển.
  4. Hình ảnh của Brin
  5. Tín hiệu tăng trưởng và tín hiệu trống.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là cung cấp nhiều loại moving average khác nhau. Trong các môi trường thị trường khác nhau, phản ứng của moving average khác nhau, và việc sử dụng nhiều loại moving average có thể làm tăng đáng kể khả năng thích ứng của chiến lược. Ngoài ra, chiến lược có thể tối ưu hóa tham số chiều dài moving average để tìm kiếm sự kết hợp tốt nhất, do đó có được tín hiệu giao dịch chính xác hơn.

Phân tích rủi ro

Rủi ro chính của chiến lược này là sự hỗn loạn tín hiệu của đường trung bình di chuyển, có thể xảy ra nhiều lần phá vỡ giả. Ngoài ra, chỉ số Bollinger Bands cũng nhạy cảm với biến động giá mạnh, đường trung đạo không thể theo dõi giá một cách hiệu quả. Điều này đòi hỏi phải sử dụng loại đường trung bình di chuyển có tính ổn định cao hơn và điều chỉnh các tham số thích hợp.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Kiểm tra các kết hợp trung bình di chuyển khác nhau để tìm các tham số tối ưu và tăng sự ổn định tín hiệu.
  2. Thêm chiến lược dừng lỗ để đảm bảo kiểm soát tổn thất do tín hiệu sai cá nhân.
  3. Kết hợp với các chỉ số khác để lọc tín hiệu, tránh giao dịch thường xuyên. Ví dụ: MACD, KD, v.v.
  4. Tối ưu hóa quản lý vốn, điều chỉnh vị trí

Tóm tắt

Chiến lược này là rất sáng tạo về mặt tổng thể, cung cấp các ứng dụng phân đoạn phong phú hơn cho chỉ số Brin. Bằng cách điều chỉnh các đường trung bình di chuyển của danh mục, tín hiệu chính xác và ổn định hơn có thể được tạo ra. Đồng thời cung cấp những ý tưởng mới cho việc tối ưu hóa chiến lược Brin. Bằng cách điều chỉnh và tối ưu hóa các tham số, chiến lược này có thể trở thành một công cụ giao dịch rất hữu ích.

Mã nguồn chiến lược
/*backtest
start: 2023-01-30 00:00:00
end: 2023-10-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger Bands Strategy (MA type)", overlay=true)
src = input(close, title="Source")
length = input(20,step=10, minval=1)
mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev")

length1=input(26, "Long Moving Average Length", minval=1)
length2=input(9, "Trigger Length", minval=1)
T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1)
////////////
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"])
Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=sum(vud1,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) )
Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
    zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
    lrc = linreg(src, length, 0)
    lrc1 = linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
T3e1=ema(src, length)
T3e2=ema(T3e1,length)
T3e3=ema(T3e2,length)
T3e4=ema(T3e3,length)
T3e5=ema(T3e4,length)
T3e6=ema(T3e5,length)
T3c1=-T3a1*T3a1*T3a1
T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1
T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1
T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1
T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3


getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "DEMA"
        ma := DEMA
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma

    if mav == "HULL"
        ma := HMA
        ma

    if mav == "TILL"
        ma := T3
        ma
    ma
    
//////////
basis = getMA(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset",minval = -500, maxval = 500)
plot(basis, "Basis",color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
/////////
buyEntry = crossover(src, lower)
sellEntry = crossunder(src, upper)
if (crossover(src, lower))
	strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
	strategy.cancel(id="BBandLE")
if (crossunder(src, upper))
	strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
	strategy.cancel(id="BBandSE")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)