Chiến lược giao dịch Bollinger Band Wave Weis

Tác giả:ChaoZhang, Ngày: 2023-09-13 13:55:24
Tags:

Chiến lược này kết hợp chỉ số Weis Wave và Bollinger Bands để xác định xu hướng thị trường, giao dịch đột phá ở các mức hỗ trợ / kháng cự chính.

Chiến lược logic:

  1. Tính toán sóng Weis và sử dụng xu hướng cột để xác định xu hướng giá.

  2. Tính toán các dải BB trên/dưới, tham gia giao dịch khi giá vượt qua dải.

  3. Đi dài khi Weis Wave cho thấy xu hướng tăng và giá phá vỡ trên BB top.

  4. Đi ngắn khi Weis Wave cho thấy xu hướng giảm và giá phá vỡ dưới BB đáy.

  5. Sử dụng lợi nhuận/mất khi xu hướng ngược xuất hiện.

Ưu điểm:

  1. Weis Wave đánh giá chính xác xu hướng xu hướng chính.

  2. BB xác định các mức hỗ trợ / kháng cự chính.

  3. Kết hợp các chỉ số cải thiện độ chính xác.

Rủi ro:

  1. Cả Weis Wave và BB lag, gây ra thời gian nhập cảnh kém.

  2. Những kẻ thoát khỏi nhà thường bị bẫy, cần phải dừng lại.

  3. Rất khó để tìm thấy xu hướng bền vững và phá vỡ rõ ràng trong các thị trường.

Tóm lại, chiến lược này kết hợp Weis Wave và BB cho xu hướng thiên vị và giao dịch đột phá. Nó có thể cải thiện độ chính xác một chút nhưng đòi hỏi phải thận trọng về sự chậm trễ và hành động giá dao động.


/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-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/
// © sharatgbhat

//@version=4
// strategy("Weis BB Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500)
maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float)
// strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating = input(defval=false, type=input.bool, title="Oscillating")
normalize = input(defval=false, type=input.bool, title="Normalize")
vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close / methodvalue

currclose = float(na)
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = int(na)
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol / barcount : vol

plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume")

length = input(14, minval=1)
src = input(close, title="Source")
mult = input(2, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
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))

MomentumBull = close>upper
MomentumBear = close<lower

if (MomentumBull and directionIsUp)
	strategy.entry("Buy", strategy.long)
if (MomentumBear and directionIsDown)
	strategy.entry("Sell", strategy.short)
    strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10)
    strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)
    

Thêm nữa