Chiến lược đột phá tăng giá dựa trên Bollinger Bands và VWAP


Ngày tạo: 2024-02-06 14:36:26 sửa đổi lần cuối: 2024-02-06 14:36:26
sao chép: 1 Số nhấp chuột: 885
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá tăng giá dựa trên Bollinger Bands và VWAP

Tổng quan

Chiến lược này sử dụng chỉ số Pivot Belt để theo dõi VWAP, đánh giá là đột phá nhiều đầu khi VWAP phá vỡ đường ray trung tâm của Brin và sử dụng chiến lược nhiều đầu; và đánh giá là xác nhận không đầu khi VWAP phá vỡ đường ray dưới Brin và rời khỏi sân. Đồng thời, chiến lược cũng giới thiệu điểm hỗ trợ chính Pivot Point làm điều kiện đánh giá phụ cho tín hiệu vào sân, để lọc ra một số đột phá giả.

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

  1. Tính toán VWAP
  2. Tính toán VWAP của băng trục, bao gồm đường ray trên, đường ray giữa và đường ray dưới.
  3. Xác định liệu VWAP có phá vỡ đường trung tâm của vùng Brin lên trên hay không, và nếu có và giá cao hơn mức hỗ trợ chính Pivot Point, hãy tham gia vào chiến lược đa đầu.
  4. Stop loss được thiết lập là 5%.
  5. Nếu VWAP phá vỡ đường băng của Brin xuống phía dưới, nó được coi là xác nhận không khí và thoát khỏi vị trí bằng phẳng; nếu dừng lỗ được kích hoạt, nó cũng thoát khỏi vị trí.

Phân tích lợi thế

  1. VWAP có khả năng theo dõi xu hướng mạnh mẽ, kết hợp với việc khởi động của Brinband để xác định chính xác xu hướng.
  2. Thêm Pivot Point như một điều kiện hỗ trợ, có thể lọc ra nhiều đột phá giả mạo và tránh mất mát không cần thiết.
  3. Sử dụng một số chiến lược rời khỏi, bạn có thể khóa một số lợi nhuận và kiểm soát rủi ro.
  4. Kết quả của cuộc khảo sát cho thấy chiến lược này hoạt động tốt trong thị trường bò và có tính ổn định cao.

Phân tích rủi ro

  1. Trong các trường hợp chấn động, có thể xảy ra đột phá giả dẫn đến tổn thất.
  2. Pivot Point không thể hoàn toàn tránh được sự phá vỡ giả, cần kết hợp nhiều tín hiệu lọc chỉ số hơn.
  3. Một số hoạt động đã làm tăng tần suất hoạt động và chi phí giao dịch.
  4. Trong thị trường gấu, hiệu quả là không tốt, cần phải kiểm soát rủi ro.

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

  1. Có thể kết hợp với các chỉ số khác như MACD, KDJ để hỗ trợ lọc tín hiệu ra vào.
  2. Bạn có thể tìm các tham số tối ưu bằng cách tối ưu hóa độ dài và độ lệch chuẩn của các dải Brin.
  3. Các thuật toán học máy có thể được đưa vào để tối ưu hóa động các tham số của dải Brin.
  4. Bạn có thể thử nghiệm các mức độ dừng khác nhau để tìm điểm dừng tối ưu.
  5. Có thể tham gia vào cơ chế thích ứng, điều chỉnh lợi nhuận mục tiêu theo mức độ biến động của thị trường.

Tóm tắt

Chiến lược này nói chung là một hệ thống đột phá ổn định. Cách vận hành tiêu chuẩn hóa, có nhiều khả năng tối ưu hóa tham số, phù hợp với giao dịch định lượng. Đồng thời, cần phải chú ý đến việc kiểm soát rủi ro, phòng ngừa tổn thất do hành vi bất thường. Nói chung, đây là một chiến lược đột phá đáng nghiên cứu sâu và tối ưu hóa liên tục.

Mã nguồn chiến lược
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 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/
// © ediks123

//@version=4
strategy("BBofVWAP with entry at Pivot Point", overlay=false, pyramiding=1,   default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

// Function outputs 1 when it's the first bar of the D/W/M/Y
is_newbar(res) =>
    ch = 0
    if(res == 'Y')
        t  = year(time('D'))
        ch := change(t) != 0 ? 1 : 0
    else
        t = time(res)
        ch := change(t) != 0 ? 1 : 0
    ch


//variables BEGIN
//smaLength=input(200,title="Slow MA Length")

bbLength=input(50,title="BB Length")  
//bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

pp_period = input(title = "Pivot Period", type=input.string, defval="Week", options = ['Day', 'Week'])

pp_res = pp_period == 'Day' ? 'D' : pp_period == 'Week' ? 'W' : pp_period == 'Month' ? 'M' : 'Y' 

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)



//sma200=sma(close,smaLength)
//plot(sma200, title="SMA 200", color=color.orange)

myVwap=vwap(hlc3)

//bollinger calculation
basis = sma(myVwap, bbLength)
dev = mult * stdev(myVwap, bbLength)
upperBand = basis + dev
lowerBand = basis - dev

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)

plot(myVwap, title="VWAP", color=color.purple)


//pivot points 


// Calc High
high_cur = 0.0
high_cur := is_newbar(pp_res) ? high : max(high_cur[1], high)

phigh = 0.0
phigh := is_newbar(pp_res) ? high_cur[1] : phigh[1]

// Calc Low
low_cur = 0.0
low_cur := is_newbar(pp_res) ? low : min(low_cur[1], low)

plow = 0.0
plow := is_newbar(pp_res) ? low_cur[1] : plow[1]

// Calc Close
pclose = 0.0
pclose := is_newbar(pp_res) ? close[1] : pclose[1]


vPP = (phigh + plow + pclose) / 3

//pivot points


//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="BB_VWAP_PP",long=true, qty=qty1, when=   crossover(myVwap,basis)  and close>=vPP  )

bgcolor(strategy.position_size>=1?color.blue:na, transp=75)
barcolor(strategy.position_size>=1?color.green:na)

stopLossVal=  strategy.position_size>=1 ?  close * (1 - (stopLoss*0.01) ) : 0.00

//partial exit
//strategy.close(id="BBofVwap", qty=strategy.position_size/3, when=crossunder(myVwap,upperBand) and strategy.position_size>=1 )  //and close>strategy.position_avg_price)



//exit on lowerband or stoploss 
strategy.close(id="BB_VWAP_PP", comment="P" , qty=strategy.position_size/3, when= crossunder(myVwap,upperBand) and strategy.position_size>=1 and close>strategy.position_avg_price)  //
strategy.close(id="BB_VWAP_PP", comment="Exit All", when=crossunder(myVwap,lowerBand) and strategy.position_size>=1 )
//strategy.close(id="BBofVwapWithFibPivot", comment="Exit All", when=crossunder(close,vPP) and strategy.position_size>=1 )

strategy.close(id="BB_VWAP_PP", comment="Stop Loss Exit", when=crossunder(close,stopLossVal) and strategy.position_size>=1 )