Chiến lược theo dõi xu hướng lưới lưới Bollinger Band Moving Average tiên tiến

Tác giả:ChaoZhang, Ngày: 2023-11-24 14:48:28
Tags:

img

Tổng quan

Chiến lược được đặt tên là Advanced Bollinger Band Moving Average Grid Trend Tracking Strategy. Đây là một chiến lược sử dụng Bollinger Bands và moving averages để xác định xu hướng và thiết lập các vị trí lưới để theo dõi hướng xu hướng.

Nguyên tắc

Ý tưởng chính của chiến lược này là:

  1. Sử dụng Bollinger Bands để đánh giá phạm vi biến động thị trường hiện tại. đường ray giữa của Bollinger Bands là đường trung bình di chuyển đơn giản n ngày, và chiều rộng là chiều rộng trung bình ATR n ngày.

  2. Bốn đường bên ngoài Bollinger Bands là số nhân bất thường của đường độ biến động thực sự trung bình. Chiến lược thiết lập các vị trí khi phá vỡ các mức đường khác nhau.

  3. EMA nhanh và chậm di chuyển trung bình xác định hướng xu hướng chu kỳ lớn. Đi dài chỉ trong xu hướng tăng chu kỳ lớn và đi ngắn ngược lại.

  4. Theo dõi và xây dựng các vị trí theo hướng xu hướng, đóng các vị trí để kiếm lợi nhuận khi nhìn thấy các thanh pin.

Cụ thể, các phần chính của chiến lược này là:

  1. Xác định các thông số Bollinger Bands. Đường ray giữa của Bollinger Bands là đường trung bình di chuyển SMA n ngày, và chiều rộng của Bollinger Bands là ATR n ngày.

  2. Đặt bốn đường mở rộng bên ngoài Bollinger Bands. Khoảng cách giữa các đường và đường ray giữa là 1.236 lần, 2.382 lần, 3.618 lần và 4.236 lần kích thước biến động thực sự trung bình.

  3. Đặt EMA di chuyển nhanh và chậm để xác định xu hướng chu kỳ lớn.

  4. Thiết lập các vị trí dài dần dần khi phá vỡ bốn đường dưới đây trong một xu hướng tăng theo chu kỳ lớn.

  5. Khi một thanh pin xuất hiện hoặc giá vượt qua đường trung bình động chu kỳ lớn một lần nữa, nó được coi là một tín hiệu kết thúc thanh pin để đóng các vị trí để kiếm lợi nhuận.

Điều trên là nguyên tắc kỹ thuật chính của chiến lược này. Bằng cách đánh giá phạm vi biến động hiện tại thông qua Bollinger Bands và thiết lập các vị trí theo xu hướng chu kỳ lớn, hiệu ứng cuối cùng của các vị trí có xác suất cao có thể đạt được.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Sử dụng đầy đủ các đặc điểm xu hướng, xác định hướng xu hướng trong chu kỳ lớn, xây dựng các vị trí theo hướng xu hướng để giảm các hoạt động ngược không cần thiết.

  2. Việc sử dụng nhiều đường Bollinger có thể đánh giá rõ hơn phạm vi biến động hiện tại, điều này thuận lợi cho việc nắm bắt hầu hết các xu hướng.

  3. Phương pháp vị trí lưới có thể phân phối rủi ro đồng đều cho mỗi đơn vị quỹ để có được lợi nhuận ổn định.

  4. Việc sử dụng tín hiệu hiệu suất cao pin bar để đóng vị trí có thể nhanh chóng khóa lợi nhuận.

  5. Chiến lược tổng thể tích hợp xác định xu hướng, vị trí lưới và đóng vị trí tín hiệu cụ thể.

Phân tích rủi ro

Có một số rủi ro trong chiến lược này:

  1. Khả năng xác định sai xu hướng chu kỳ lớn. Có một số xác suất sai trong trung bình di chuyển nhanh và chậm, có thể dẫn đến các hoạt động ngược không cần thiết.

  2. Khả năng Bollinger line breakout thất bại.

  3. Các tín hiệu pin bar có thể xuất hiện muộn và không thể khóa lợi nhuận kịp thời.

  4. Thật dễ dàng để hình thành quá nhiều vị trí chồng chéo trong quá trình điều chỉnh cú sốc chu kỳ lớn.

Các giải pháp tương ứng là:

  1. Điều chỉnh các thông số trung bình động nhanh và chậm để giảm khả năng lỗi.

  2. Điều chỉnh các thông số đường Bollinger để làm cho đường Bollinger bám vào hầu hết các biến động càng nhiều càng tốt.

  3. Kiểm tra các mô hình cụ thể nhạy cảm hơn cho tín hiệu thu lợi nhuận.

  4. Tăng khoảng cách khoảng cách để kiểm soát kích thước vị trí.

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

Chiến lược có thể được tối ưu hóa theo các hướng sau:

  1. Kiểm tra các thông số trung bình động khác nhau để tối ưu hóa việc xác định xu hướng chu kỳ lớn. Ví dụ, kiểm tra các chỉ số khác như EMA, RSI, v.v.

  2. Kiểm tra các thông số ATR nhiều lần khác nhau để tối ưu hóa cài đặt chiều rộng kênh Bollinger.

  3. Kiểm tra các tín hiệu thu lợi nhuận hiệu quả khác. Ví dụ, SAR, Kalman Lines, v.v.

  4. Tối ưu hóa khoảng cách lưới để làm cho khoảng thời gian biến động được chia đồng đều hơn để giảm các vị trí chồng chéo.

  5. Tăng cơ chế dừng lỗ, tránh thua lỗ lớn trong điều kiện thị trường cực đoan.

Tóm lại

Chiến lược này tích hợp việc sử dụng kênh Bollinger, các chỉ số trung bình động, các mô hình đường K cụ thể và các phương tiện kỹ thuật khác. Dưới tiền đề xác định xu hướng chu kỳ lớn, nó xây dựng một chiến lược lưới theo dõi xu hướng dựa trên đường trung bình động và Bollinger Bands. So với việc phá vỡ băng Bollinger truyền thống, chiến lược này thêm phán đoán đặc trưng xu hướng, có thể làm giảm các vị trí đảo ngược không cần thiết. Đồng thời, phương pháp vị trí lưới đa dạng hóa rủi ro cho mỗi đơn vị quỹ để có được lợi nhuận ổn định hơn. Chiến lược có thể được tối ưu hóa từ nhiều góc độ như xác định xu hướng, chiều rộng Bollinger, tín hiệu lấy lợi nhuận, phương pháp dừng lỗ, v.v. để có được hiệu ứng chiến lược ổn định hơn.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 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/
// © Aayonga

//@version=5
strategy("fib trend grid@Aa", overlay=true)

//回测时间
useDateFilter=input.bool(true,title = "启用回测时间范围限定(backtest)", group = "回测范围(backtest)")
backtesStarDate=input(timestamp("1 Jan 2015"),title = "开始时间(Start)", group = "回测范围(backtest)")
backtestEndDate=input(timestamp("1 Jan 2040"),title = "结束时间(finish)",group = "回测范围(backtest)")
inTradeWindow=true


//入场位 entry
bolllen=input.int(defval=20,minval=1,title="布林长度,(boll length)",group = "入场位(entry)")
sma=ta.sma(close,bolllen)
avg=ta.atr(bolllen)
fib1=input(defval=1.236,title="Fib 1",group = "入场位(entry)")
fib2=input(defval=2.382,title="Fib 2",group = "入场位(entry)")
fib3=input(defval=3.618,title="fib 3",group = "入场位(entry)")
fib4=input(defval=4.236,title="Fib 4",group = "入场位(entry)")
r1=avg*fib1
r2=avg*fib2
r3=avg*fib3
r4=avg*fib4
top4=sma+r4
top3=sma+r3
top2=sma+r2
top1=sma+r1
bott1=sma-r1
bott2=sma-r2
bott3=sma-r3
bott4=sma-r4



//趋势 plot

t4=plot(top4,title="卖 (sell)4",color=color.rgb(244, 9, 9))
t3=plot(top3,title = "卖(sell) 3",color=color.rgb(211, 8, 8))
t2=plot(top2,title="卖 (sell)2",color=color.rgb(146, 13, 13))
t1=plot(top1,title="卖(sell) 1",color=color.rgb(100, 3, 3))

b1=plot(bott1,title="买(buy1)1",color=color.rgb(4, 81, 40))
b2=plot(bott2,title="买(buy)2",color=color.rgb(15, 117, 46))
b3=plot(bott3,title = "买(buy)3",color =color.rgb(8, 176, 42) )
b4=plot(bott4,title="买(buy)4",color=color.rgb(15, 226, 103))
plot(sma,style=plot.style_cross,title="SMA",color=color.rgb(47, 16, 225))

//趋势
LengthF=input(defval = 25,title = "快线长度(fastlength)")
LengthS=input(defval=200,title = "慢线长度(slowlength)")
emaF=ta.ema(close,LengthF)
smaS=ta.sma(close,LengthS)
longTrend=emaF>smaS
longb=ta.crossover(emaF,smaS)
bgcolor(longb ? color.new(color.green,40):na,title = "多头强势(bull trend)")
shortTrend=smaS>emaF
shortb=ta.crossunder(emaF,smaS)
bgcolor(shortb ? color.new(#951313, 40):na,title = "空头强势(bear trend)")

//pinbar
bullPinBar = ((close > open) and ((open - low) > 0.6* (high - low))) or ((close < open) and ((close - low) > 0.9 * (high - low)))
//plotshape(bullPinBar  , text ="pinbar", textcolor=color.rgb(9, 168, 144),location=location.belowbar, color=color.rgb(29, 103, 67), size=size.tiny)
bearPinBar = ((close > open) and ((high - close) > 0.7 * (high - low))) or ((close < open) and ((high - open) > 0.7 * (high - low)))
//plotshape(bearPinBar  , text ="pinbar", textcolor=color.rgb(219, 12, 12),location=location.abovebar, color=color.rgb(146, 7, 7), size=size.tiny)

buy1=ta.crossunder(close,bott1) and longTrend and close>ta.ema(close,100)
buy2=ta.crossunder(close,bott2) and longTrend 
buy3=ta.crossunder(close,bott3) and longTrend 
buy4=ta.crossunder(close,bott4) and longTrend 
buyclose=bearPinBar or ta.crossunder(close,smaS)




if buy2 or buy3 or buy4 or buy1 and inTradeWindow
    strategy.order("多(buy)",strategy.long)

if buyclose  and inTradeWindow
    strategy.close("多(buy)")

sell1=ta.crossover(close,top1) and shortTrend and close<ta.ema(close,200)
sell2=ta.crossover(close,top2) and shortTrend and close<ta.ema(close,200)
sell3=ta.crossover(close,top3) and shortTrend and close<ta.ema(close,200)
sell4=ta.crossover(close,top4) and shortTrend and close<ta.ema(close,200)
sellclose=bullPinBar or ta.crossover(close,ta.sma(close,220))

if  sell1 or sell2 or sell3 or sell4 and inTradeWindow
    strategy.order("空(sell)",strategy.short)

if sellclose  and inTradeWindow
    strategy.close("空(sell)")
     

Thêm nữa