Chiến lược theo dõi xu hướng Bollinger Fibonacci Grid

Tác giả:ChaoZhang, Ngày: 2023-12-13 17:12:38
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số Bollinger Bands để vẽ các kênh giá dựa trên ATR và Fibonacci retracements như lưới. Kết hợp với đường EMA kép để xác định hướng xu hướng tổng thể, chọn lọc đặt lưới dừng lỗ ở các dải giá Bollinger theo hướng xu hướng để đạt được sự điều chỉnh theo dõi xu hướng.

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

  1. Sử dụng đường giữa của các dải Bollinger và các đường ray trên và dưới được xây dựng từ các đường ATR và 4 đường khôi phục Fibonacci để xây dựng các dải sóng giá.

  2. Đường EMA nhanh và đường SMA chậm tạo thành một đường trung bình động kép để xác định hướng xu hướng tổng thể. Đường nhanh phá vỡ đường chậm là thị trường tăng, và ngược lại là thị trường gấu.

  3. Trong một thị trường tăng, chỉ đi dài, chọn giá gần đường ray dưới của Bollinger Bands để phá vỡ đáy kênh để mở các vị trí dài; trong một thị trường gấu, chỉ đi ngắn, chọn giá gần đường ray trên của Bollinger Bands để phá vỡ trên cùng của kênh để mở các vị trí ngắn.

  4. Thiết lập điều kiện dừng lỗ: thoát khỏi vị trí định hướng hiện tại khi một thanh đảo lớn xuất hiện.

Phân tích lợi thế

  1. Sử dụng đường trung bình động đôi để xác định xu hướng ở mức độ lớn để tránh giao dịch ngược xu hướng.

  2. Mạng lưới kênh Bollinger ATR thiết lập nhiều giá mở để tăng xác suất mở các vị trí thành công.

  3. Các dải sóng Fibonacci thiết lập biến động giá, với số lượng vị trí khác nhau trong các dải khác nhau, đạt được sự phân tán vốn.

  4. Các điều kiện dừng lỗ thời gian thực tạo điều kiện dừng lỗ nhanh và giảm khôi phục lợi nhuận.

Phân tích rủi ro

  1. Lỗi trong việc đánh giá xu hướng ở mức độ lớn có thể dẫn đến tổn thất ngược lại. Điều chỉnh các thông số trung bình động phù hợp hoặc thêm các chỉ số khác để đánh giá phụ trợ.

  2. Khi biến động quá lớn, giá có thể xuyên qua khu vực lưới trực tiếp, không thể mở các vị trí.

  3. Các điều kiện dừng lỗ là chủ quan hơn và các tiêu chí nhận dạng có thể khác nhau giữa các nhà giao dịch.

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

  1. Thêm chỉ số APO để phân tích hỗ trợ các đánh giá xu hướng trung bình động đôi.

  2. Sử dụng các chỉ số biến động thị trường để tối ưu hóa các thông số dải sóng Bollinger để thích nghi tốt hơn với những thay đổi năng động của thị trường.

  3. Giảm kích thước stop loss và thêm một cách khác để thiết lập các điều kiện stop loss để giảm lỗi.

Tóm lại

Ý tưởng tổng thể của chiến lược này là rõ ràng, kết hợp kênh Bollinger ATR và trung bình động đôi để đạt được đánh giá toàn diện về các tín hiệu giao dịch chiến lược, tối đa hóa việc giảm rủi ro đánh giá sai. Những lợi thế của chiến lược là hiển nhiên và có thể được áp dụng trong giao dịch thực tế; nhưng vẫn còn chỗ cho tối ưu hóa trong các chi tiết như cài đặt tham số và điều kiện dừng lỗ, cần được cải thiện hơn nữa. Người ta tin rằng với tối ưu hóa liên tục, lợi nhuận và sự ổn định của chiến lược này sẽ tiếp tục tăng lên.


/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 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,initial_capital=2000, default_qty_type=strategy.fixed, default_qty_value=1)

//回测时间
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



//趋势 trend

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="买(buy)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 and close>ta.ema(close,80)
buy3=ta.crossunder(close,bott3) and longTrend and close>ta.ema(close,80)
buy4=ta.crossunder(close,bott4) and longTrend and close>ta.ema(close,80)
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