Chiến lược giao dịch Bollinger Band Momentum Breakout

Tác giả:ChaoZhang, Ngày: 2024-02-05 10:53:46
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số Bollinger Band và chỉ số khối lượng để xác định các cơ hội đột phá động lực mạnh trên dải trên Bollinger khi khối lượng giao dịch cao và nhập vào các vị trí dài. Nó cũng sử dụng các chỉ số trung bình động để xác định hướng xu hướng và giảm rủi ro giữ các vị trí chết.

Chiến lược logic

  1. Sử dụng chỉ số Bollinger Band để xác định xem giá có vượt qua dải trên không.
  2. Sử dụng các chỉ số khối lượng giao dịch để xác định xem khối lượng giao dịch hiện tại có cao hơn đáng kể so với mức trung bình của giai đoạn trước không.
  3. Nhập vị trí dài khi khối lượng giao dịch cao và giá vượt qua dải Bollinger trên.
  4. Sử dụng các chỉ số trung bình động để xác định xu hướng ngắn hạn và trung hạn để cắt giảm tổn thất theo thời gian.

Chiến lược này chủ yếu xem xét ba yếu tố: mức giá, động lực và xu hướng. Khi giá vượt qua dải trên Bollinger vào vùng mua, sự gia tăng khối lượng giao dịch cho thấy động lực mạnh và dòng vốn chảy vào. Đây là thời điểm phù hợp để vào vị trí dài. Sau đó nó sử dụng đường trung bình động để xác định xu hướng thị trường để tránh giữ các vị trí chết. Bằng cách kết hợp hành động giá, động lực và kiểm soát rủi ro, nó nhằm mục đích nắm bắt lợi nhuận từ xu hướng mạnh.

Ưu điểm

  1. Nhóm lọc âm lượng, nó chỉ mua trên động lực thực sự mạnh, giảm rủi ro.

  2. Có thể cắt giảm lỗ theo thời gian thông qua xác định xu hướng trung bình động, giảm lỗ nắm giữ.

  3. Thực hiện chiến lược định lượng kết hợp nhiều chỉ số để ra quyết định.

  4. Các cấu trúc mã rõ ràng, dễ đọc và duy trì.

Rủi ro

  1. Bollinger Bands có thể thất bại trong các biến động giá cực đoan, mất tín hiệu hoặc tạo ra tín hiệu sai.

  2. Không có lợi nhuận khi tổng khối lượng giao dịch thấp.

  3. Việc xác định xu hướng của trung bình động cũng có thể thất bại, không thể đảm bảo hoàn toàn mức dừng lỗ hiệu quả.

  4. Việc điều chỉnh tham số không đúng cũng ảnh hưởng đến lợi nhuận của chiến lược. Ví dụ, cửa sổ thời gian giao dịch được đặt quá ngắn có thể bỏ lỡ sự đảo ngược xu hướng.

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

  1. Thêm nhiều chỉ số kỹ thuật hơn để phân tích xu hướng và hỗ trợ / kháng cự tốt hơn, cải thiện dừng lỗ, ví dụ như các mô hình nến, kênh, mức hỗ trợ chính.

  2. Thêm các mô hình học máy để đánh giá khả năng thoát thực sự, giảm tín hiệu sai. ví dụ: mô hình học sâu LSTM.

  3. Tối ưu hóa các chiến lược quản lý vốn như kích thước vị trí năng động, dừng lỗ để giảm tác động tổn thất giao dịch duy nhất.

  4. Kiểm tra nhiều sản phẩm và khung thời gian hơn, điều chỉnh các thông số như Bollinger Bands, cửa sổ khối lượng để cải thiện tính mạnh mẽ của chiến lược.

Kết luận

Chiến lược này tích hợp các chỉ số Bollinger Band và khối lượng giao dịch để xác định các cơ hội mua động lực mạnh mẽ, với đường trung bình động đảm bảo dừng lỗ hiệu quả. So với các chiến lược chỉ số duy nhất, nó có độ chính xác và khả năng kiểm soát rủi ro cao hơn. Với thiết kế mô-đun, bộ lọc xu hướng và cơ chế dừng lỗ, nó tạo thành một chiến lược giao dịch đột phá động lực dễ tối ưu hóa.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 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/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, 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))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")



Thêm nữa