Chiến lược giao dịch dải Bollinger Band đột phá động lượng


Ngày tạo: 2024-02-05 10:53:46 sửa đổi lần cuối: 2024-02-05 10:53:46
sao chép: 0 Số nhấp chuột: 699
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch dải Bollinger Band đột phá động lượng

Tổng quan

Chiến lược này kết hợp với chỉ số Bollinger Bands và chỉ số khối lượng giao dịch, trong môi trường khối lượng giao dịch cao, để xác định cơ hội phá vỡ mạnh mẽ của Bollinger Bands và thực hiện giao dịch mua. Đồng thời kết hợp với chỉ số trung bình di chuyển, xác định hướng xu hướng và giảm nguy cơ bị mắc kẹt.

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

  1. Sử dụng chỉ số BRI để xác định giá có phá vỡ BRI hay không.
  2. Sử dụng chỉ số khối lượng giao dịch để đánh giá khối lượng giao dịch hiện tại có cao hơn đáng kể so với khối lượng giao dịch trung bình trong một khoảng thời gian qua hay không.
  3. Trong trường hợp giao dịch hoạt động, giá phá vỡ Bollinger Bands trên đường ray, thực hiện giao dịch mua.
  4. Sử dụng chỉ số trung bình di chuyển để đánh giá xu hướng ngắn hạn và trung hạn, dừng lỗ ngay khi xu hướng không thuận lợi.

Chiến lược này chủ yếu xem xét ba yếu tố: giá cả, động lực và xu hướng. Khi giá vượt qua Bollinger Bands và đi vào khu vực mua, một lượng lớn tiền đổ vào dẫn đến khối lượng giao dịch tăng lên, cho thấy có hỗ trợ và động lực mạnh mẽ hơn.

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

  1. Tín hiệu giao dịch chính xác, tránh phá vỡ giả. Kết hợp với chỉ số khối lượng giao dịch, chỉ mua trong tình huống thực sự mạnh, giảm rủi ro vị trí.

  2. Bằng cách sử dụng đường trung bình di chuyển để đánh giá xu hướng, bạn có thể dừng lỗ kịp thời và giảm lỗ trống.

  3. Có chiến lược định lượng để đưa ra quyết định tổng hợp nhiều chỉ số, các tham số có thể được điều chỉnh linh hoạt để phù hợp với các giống và chu kỳ khác nhau.

  4. Cấu trúc mã rõ ràng, tăng khả năng đọc chính sách. Các mô-đun phân chia tổ chức tính toán chỉ số, tín hiệu giao dịch, logic mở kho bằng, v.v., dễ dàng bảo trì sau này.

Rủi ro chiến lược

  1. Blinking là một chỉ số của phạm vi biến động, có thể không hiệu quả đối với các tình huống cực đoan. Nếu có biến động bất thường, nó sẽ bỏ lỡ tín hiệu mua hoặc tạo ra tín hiệu giả.

  2. Khi khối lượng giao dịch không đủ, chiến lược không thể kiếm được lợi nhuận. Nếu khối lượng giao dịch tổng thể của thị trường không đủ, thậm chí có thể tạo ra tín hiệu mua.

  3. Đường trung bình di chuyển cũng có thể không hiệu quả như một chỉ số định xu hướng, không đảm bảo hoàn toàn dừng lỗ.

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

Hướng tối ưu hóa chiến lược

  1. Bạn có thể xem xét thêm các chỉ số kỹ thuật để xác định xu hướng, hỗ trợ các điểm kháng cự, và tăng hiệu quả dừng lỗ, chẳng hạn như hình dạng đường K, chỉ số kênh, các điểm hỗ trợ quan trọng, v.v.

  2. Tăng khả năng mô hình học máy đánh giá đột phá thực sự, giảm tỷ lệ tín hiệu giả. Các mô hình học sâu như LSTM.

  3. Tối ưu hóa các chiến lược quản lý tài chính, chẳng hạn như điều chỉnh vị trí một cách động, theo dõi đường dừng lỗ, v.v.

  4. Thử nghiệm nhiều tham số khác nhau và chu kỳ thời gian. Điều chỉnh tham số Brin, tham số khối lượng giao dịch, v.v., để tối ưu hóa chiến lược thích ứng với thị trường.

Tóm tắt

Chiến lược này tích hợp các chỉ số Brin và khối lượng giao dịch để xác định thời gian mua trong tình huống mạnh mẽ. Đồng thời sử dụng các chỉ số trung bình di chuyển để đánh giá xu hướng và dừng lỗ kịp thời. Với độ chính xác và khả năng dừng lỗ cao hơn so với chỉ số kỹ thuật đơn lẻ. Bằng cách thiết kế mô-đun, kết hợp các chiến lược đánh giá xu hướng và dừng lỗ, tạo thành một chiến lược giao dịch đột phá dễ bảo trì và tối ưu hóa.

Mã nguồn chiến lược
/*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")