Chiến lược Bollinger Bands Supertrend

Tác giả:ChaoZhang, Ngày: 2023-12-01 16:29:56
Tags:

img

Tổng quan

Chiến lược Supertrend Bollinger Bands là một chiến lược chỉ số dừng lại phổ biến dựa trên ATR (Mức trung bình True Range). Chiến lược này sử dụng chỉ số Supertrend để vẽ các kênh xu hướng tăng và giảm trên biểu đồ và tạo ra các tín hiệu giao dịch kết hợp với Bollinger Bands.

Chiến lược logic

Chiến lược sử dụng hai thông số chính - thời gian và nhân, với các giá trị mặc định lần lượt là 10 và 3.

Dòng trên: Close - (Xử nhân x ATR) Đường dưới: Close + (Xử nhân x ATR)

Khi giá đóng cửa cao hơn đường trên trước, nó được coi là tín hiệu tăng. Khi giá đóng cửa phá vỡ dưới đường dưới trước, nó được coi là tín hiệu giảm.

Chiến lược này cũng kết hợp chỉ số Bollinger Bands, sử dụng dải giữa làm đường cơ sở, và các dải trên và dưới nằm cách nó hai độ lệch chuẩn.

Ưu điểm

  1. Sử dụng ATR để tính toán biến động một cách năng động, nhanh chóng nắm bắt sự thay đổi xu hướng thị trường
  2. Kết hợp Bollinger Bands làm cho tín hiệu giao dịch đáng tin cậy hơn
  3. Các tham số có thể tùy chỉnh phù hợp với môi trường thị trường khác nhau

Rủi ro

  1. Có xu hướng tín hiệu sai trong thị trường bên cạnh
  2. Cài đặt tham số không chính xác có thể gây ra giao dịch quá mức
  3. Không thể xác định các điểm đảo ngược xu hướng, với sự chậm trễ nhất định

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

  1. Tối ưu hóa tham số thời gian ATR để giảm giao dịch tiếng ồn bằng cách sử dụng bộ lọc
  2. Bao gồm các chỉ số khác để xác định hỗ trợ/kháng cự để giảm xác suất thu hồi lợi nhuận
  3. Thêm các quy tắc định kích thước vị trí để giới hạn lỗ trên mỗi giao dịch

Tóm lại

Chiến lược Supertrend Bollinger Bands tích hợp các điểm mạnh của nhiều chỉ số kỹ thuật và sử dụng một cơ chế dừng lại để theo dõi hiệu quả xu hướng thị trường. Chiến lược có thể tùy chỉnh cao này thích nghi tốt với các thị trường khác nhau, làm cho nó trở thành một chiến lược theo đuổi đột phá được khuyến cáo. Tuy nhiên, các rủi ro như whipsaws và giao dịch quá mức nên được giải quyết bằng cách tối ưu hóa thêm để phù hợp với môi trường thị trường phức tạp hơn.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © KivancOzbilgic


//@version=4
strategy("SuperTrend STRATEGY", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short)
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

Thêm nữa