Chiến lược theo dõi xu hướng dải Bollinger trung bình động kép


Ngày tạo: 2023-12-11 15:10:02 sửa đổi lần cuối: 2023-12-11 15:10:02
sao chép: 0 Số nhấp chuột: 689
1
tập trung vào
1621
Người theo dõi

Chiến lược theo dõi xu hướng dải Bollinger trung bình động kép

Tổng quan

Chiến lược này đánh giá xu hướng của thị trường bằng cách tính toán đường trung bình di chuyển chỉ số (EMA) của hai chu kỳ khác nhau, kết hợp với việc tự thích nghi với Brin để phát hiện cơ hội mua quá mức và bán quá mức, để thực hiện giao dịch theo xu hướng.

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

  1. Tính toán 200 chu kỳ và 30 chu kỳ EMA, 200 EMA lớn hơn 30 EMA được đánh giá là xu hướng đường dài lên, nếu không được đánh giá là xu hướng đường dài xuống.

  2. Sau khi xác định hướng xu hướng, tính toán đường cơ sở, đường lên và đường xuống của dải Brin. đường cơ sở sử dụng SMA có chu kỳ cấu hình (như chu kỳ 8) và băng thông sử dụng hệ số cấu hình cực kỳ khác nhau của giá cao nhất và giá thấp nhất trong cùng chu kỳ (như 1.3 và 1.1).

  3. Trong đường dài lên, khi giá từ dưới lên phá vỡ đường mòn, đánh giá là điểm mua; trong đường dài xuống, khi giá từ trên xuống phá vỡ đường mòn, đánh giá là điểm bán.

  4. Để lọc phá vỡ giả mạo, kiểm tra xem liệu tỷ lệ biến đổi của đường K trước khi xảy ra phá vỡ có nhỏ hơn giá trị có thể cấu hình (ví dụ: 3%) hay không, đồng thời kiểm tra xem khoảng cách giữa các đường ray trên và dưới của dây đai Brin có lớn hơn yêu cầu khoảng cách có thể cấu hình (ví dụ: 2,2%)

  5. Sau khi mở vị trí, đặt lệnh dừng (ví dụ: 3%) và lệnh dừng (ví dụ: 10%) để khóa lợi nhuận.

Lợi thế chiến lược

  1. Giao dịch Giao dịch Giao dịch (EMA) đánh giá xu hướng chủ đạo, tránh mở các vị trí không có trật tự khi xu hướng chủ đạo không rõ ràng.

  2. Cài đặt điểm mở bán hàng thích ứng với vùng Brin, tự động điều chỉnh tham số băng thông theo xu hướng, khóa xu hướng hơn nữa.

  3. Cơ chế kiểm tra tỷ lệ biến động và băng thông tối thiểu có hiệu quả trong việc lọc các đột phá giả.

  4. Cài đặt Stop Loss Stop là hợp lý, khóa lợi nhuận có thể kiểm soát rủi ro.

Rủi ro chiến lược

  1. EMA không thể xác định chính xác điểm đảo chiều và có thể bỏ lỡ cơ hội đảo chiều xu hướng.

  2. Thiết lập tham số băng Bryn không đúng có thể dẫn đến tín hiệu giả.

  3. Căn chặn lỗ hổng cố định khó thích ứng với biến động của thị trường.

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

  1. Kết hợp các chỉ số khác để đánh giá xu hướng, xác định điểm chuyển đổi xu hướng chính.

  2. Sử dụng phương pháp điều chỉnh động các tham số của dải Brin.

  3. Thiết lập điều kiện dừng dừng một lần, điều chỉnh đường dừng theo điều kiện cụ thể.

Tóm tắt

Chiến lược này kết hợp sử dụng phương pháp xác định xu hướng chủ yếu của hai EMA và tìm kiếm cơ hội trong vòng Boolean để thực hiện giao dịch theo xu hướng. Ưu điểm của chiến lược là thiết lập hợp lý các điều kiện mở và dừng lỗ, có thể khóa lợi nhuận theo xu hướng một cách hiệu quả.

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

//@version=3
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2039, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop

strategy("Custom Band Strategy", overlay=true)
source = close //종가 기준

//추세 조건 설정
emaLong = ema(source, input(200, minval=0))
emaShort = ema(source, input(30, minval=0))
trend = if emaShort>=emaLong
    1
else
    -1
    
plot(emaLong, color=red, transp=0)
plot(emaShort, color=blue, transp=0)


//BB 계산(default 14/3.2)
length = input(8, minval=1)

basis = sma(source, length)
plot(basis, color=green, transp=0)
max=highest(abs(source-basis), length)

factor1 = input(1.3, minval=0.5)
factor2 = input(1.1, minval=0.5)

upper = if trend==1
    basis + max*factor1
else
    basis + max*factor2
lower = if trend==-1
    basis - max*factor1
else
    basis - max*factor2

plot1 = plot(upper)
plot2 = plot(lower)
fill(plot1, plot2, transp=80, color=green)

//밴드 이탈 후 재진입 조건 설정
cross_over = (low<=lower and close>=lower) or crossover(close,lower)
cross_under = (high>=upper and close<=upper) or crossunder(close,upper)

//변동율 계산
maxCandle=highest(abs(open-close), length)
    
roc = abs(open-close)/open*100
changerate = input(3, minval=0.0)

//수익률 계산
value = abs(strategy.position_size)*strategy.position_avg_price
roe = strategy.openprofit/value * 100
expRoeL = (upper-lower)/lower*100
expRoeS = (upper-lower)/upper*100
exp = input(2.2, minval=0.0)

target = input(10, minval=0.0)
stop = input(-3, minval=-10.0)

strategy.close_all(when=roc>=changerate and testPeriod())
strategy.close_all(when=roe>=target and testPeriod())
strategy.close_all(when=roe<=stop and testPeriod())

plotchar(crossover(close,lower) and crossunder(close,upper),color=blue, transp=0, text="cross")
plotchar(roc>=changerate,color=red, transp=0, text="roc")
plotchar(roe>=target,color=blue, transp=0, text="target")
plotchar(roe<=stop,color=green, transp=0, text="stop")

minroe = input(2, minval=0.0)

strategy.close_all(when=cross_under and roe>minroe and testPeriod())
strategy.entry("BBandLE", strategy.long, stop=source, oca_name="BollingerBands",  comment="BBandLE", when=(cross_over) and trend==1 and roc<changerate and expRoeL>exp and source>emaLong and strategy.position_size==0 and testPeriod()) //trend==1 and 
//else
strategy.close_all(when=cross_over and roe>minroe and testPeriod())
strategy.entry("BBandSE", strategy.short, stop=source, oca_name="BollingerBands",  comment="BBandSE", when=(cross_under) and trend==-1 and roc<changerate and expRoeS>exp and source<emaLong and strategy.position_size==0 and testPeriod()) //trend==-1 and