SuperTrend Bollinger Bands Chiến lược giao dịch trung bình động kép

Tác giả:ChaoZhang, Ngày: 2024-02-23 13:58:36
Tags:

img

Tổng quan

Chiến lược này tích hợp nhiều chỉ số kỹ thuật, bao gồm Supertrend, DEMA và Bollinger Bands, để tận dụng điểm mạnh của chúng và tạo ra các tín hiệu giao dịch chính xác hơn.

Chiến lược logic

Chiến lược này sử dụng ATR và giá trung bình 12 giai đoạn để tính toán các băng tải trên và dưới của Supertrend và xác định các tín hiệu dài và ngắn khi giá vượt qua các băng tải đó. Trong khi đó, DEMA 200 giai đoạn phục vụ như một chỉ số phụ trợ để đánh giá xu hướng. Ngoài ra, Bollinger Bands giúp xác định thời điểm tối ưu cho các mục nhập và dừng lỗ.

Các tín hiệu mua được tạo ra khi giá phá vỡ trên dải trên. Các tín hiệu bán được tạo ra khi giá phá vỡ dưới dải dưới. Khi giá phá vỡ qua dải trên hoặc dưới của Supertrend, các dấu hiệu và văn bản Buy hoặc Sell sẽ được vẽ ở các dải tương ứng. Các cảnh báo di động cũng được gửi đồng thời.

DEMA được vẽ trên hoặc dưới đường cong giá màu trắng để đánh giá hướng xu hướng thị trường tổng thể.

Các dải Bollinger được sử dụng để xác định thời điểm tốt nhất cho việc nhập và dừng lỗ. Dải trên và dưới của nó tạo thành một kênh bao gồm biến động giá, giúp xác định khi nào giá đã rời khỏi phạm vi bình thường của họ, tức là trở nên biến động quá mức.

Sau khi tham gia giao dịch, chiến lược sử dụng phương pháp dừng lỗ và lấy lợi nhuận để khóa lợi nhuận hoặc giảm lỗ bằng cách đặt giá dừng lỗ và lấy lợi nhuận để giảm vị trí tự động.

Phân tích lợi thế

Tích hợp nhiều chỉ số cho phép chiến lược này tận dụng tối đa các điểm mạnh cá nhân của họ để tạo ra các tín hiệu giao dịch chính xác hơn.

Supertrend có khả năng lọc ra tiếng ồn thị trường và tránh giao dịch quá mức. DEMA có thể xác định hướng xu hướng chung và ngăn chặn giao dịch chống lại xu hướng. Bollinger Bands xác định thời gian tối ưu cho các mục nhập và dừng lỗ.

Cảnh báo di động cho phép nhắc giao dịch kịp thời.

Phân tích rủi ro

Việc tích hợp nhiều chỉ số làm tăng sự phức tạp của chiến lược và khả năng mắc lỗi. Cài đặt tham số chỉ số cũng có thể dẫn đến việc bỏ lỡ cơ hội giao dịch hoặc tạo ra tín hiệu sai.

Ngoài ra, các thiết lập stop loss quá mạnh có thể làm tăng lỗ. Sự ổn định của các cảnh báo di động cũng ảnh hưởng đến hiệu quả của việc lấy lợi nhuận và dừng lỗ kịp thời.

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

Các kết hợp tham số khác nhau có thể được thử nghiệm để tìm bộ tham số tối ưu. Các tham số cũng có thể được điều chỉnh dựa trên các điều kiện thị trường khác nhau.

Cố gắng sử dụng độc lập các chỉ số cá nhân có thể làm giảm tín hiệu sai.

Các tiêu chí dừng lỗ và lấy lợi nhuận cũng phải được điều chỉnh như dừng lỗ sau và dừng lỗ một phần.

Tóm lại

Chiến lược này kết hợp các điểm mạnh của nhiều chỉ số kỹ thuật để tạo ra tín hiệu giao dịch và có tính thực tế tương đối cao.


/*backtest
start: 2024-01-23 00:00:00
end: 2024-02-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zhuenrong

//@version=4
strategy("Supertrend + DEMA + Bollinger Bands", overlay=true)

// Input parameters for Supertrend
atrLength = input(title="ATR Period", type=input.integer, defval=12)
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)
showSupertrend = input(title="Show Supertrend Indicator?", type=input.bool, defval=true)

// Input parameters for DEMA
demaLength = input(200, title="DEMA Period")
showDEMA = input(title="Show DEMA Indicator?", type=input.bool, defval=true)

// Calculate ATR for Supertrend
atr2 = sma(tr, atrLength)
atr = changeATR ? atr(atrLength) : atr2

// Calculate Supertrend
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

// Plot Supertrend
upPlot = plot(showSupertrend ? (trend == 1 ? up : na) : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
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.new(color.green, 0))
plotshape(buySignal ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))

dnPlot = plot(showSupertrend ? (trend == 1 ? na : dn) : na, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
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.new(color.red, 0))
plotshape(sellSignal ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)

longFillColor = (trend == 1 ? color.new(color.green, 80) : color.new(color.white, 0))
shortFillColor = (trend == -1 ? color.new(color.red, 80) : color.new(color.white, 0))

fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

// Alert conditions
alertcondition(buySignal, title="Custom Supertrend Buy", message="Custom Supertrend Buy!")
alertcondition(sellSignal, title="Custom Supertrend Sell", message="Custom Supertrend Sell!")

// Calculate DEMA
ema1 = ema(close, demaLength)
dema = 2 * ema1 - ema(ema1, demaLength)

// Plot DEMA with white color
plot(showDEMA ? dema : na, color=color.new(color.white, 0), title="DEMA", linewidth=2)
// Add push notification on mobile if buy and sell occurred
if (buySignal)
    strategy.entry("Buy", strategy.long)
    //strategy.exit("Sell")
    //alert("Buy Signal - Supertrend")

if (sellSignal)
    strategy.entry("Sell", strategy.short)
    //strategy.exit("Cover")
    //alert("Sell Signal - Supertrend")


// === Stop LOSS ===

if strategy.position_size>0
    strategy.exit("Stop Loss/Profit Long","Buy", stop=strategy.position_avg_price*100, limit=strategy.position_avg_price*1.1)
if strategy.position_size<0
    strategy.exit("Stop Loss/Profit Short","Sell", stop=strategy.position_avg_price*100, limit=strategy.position_avg_price*1.1)

Thêm nữa