
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.
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:
Ư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.
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.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
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.
/*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)