SuperTrend và DEMA dựa trên xu hướng theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-12-08 16:42:14
Tags:

img

Tổng quan

Chỉ số DEMA được sử dụng để lọc các tín hiệu sai. Chiến lược này hoạt động tốt cho các thị trường xu hướng và có thể theo dõi xu hướng và lọc các hợp nhất hiệu quả.

Chiến lược logic

Cốt lõi của chiến lược này dựa trên chỉ số SuperTrend để xác định hướng xu hướng của giá. Chỉ số SuperTrend kết hợp chỉ số ATR và có thể xác định hiệu quả xu hướng giá. Khi giá tăng, một dải trên sẽ hình thành, và khi giá giảm, một dải dưới sẽ hình thành. Một sự đột phá từ dải dưới báo hiệu một sự đảo ngược xu hướng và tạo ra tín hiệu mua. Một sự đột phá từ dải trên báo hiệu một sự đảo ngược xu hướng và tạo ra tín hiệu bán.

Để lọc các tín hiệu sai, chiến lược này cũng kết hợp chỉ số DEMA. Các tín hiệu mua chỉ được tạo ra khi giá vượt qua dải trên và nằm trên đường DEMA. Các tín hiệu bán chỉ được tạo ra khi giá vượt qua dải dưới và nằm dưới đường DEMA. Điều này có hiệu quả lọc các tín hiệu sai trong các thị trường dao động.

Cụ thể, logic tín hiệu giao dịch là như sau:

  1. Một sự đột phá từ dải dưới báo hiệu một sự đảo ngược xu hướng và tạo ra một tín hiệu mua.
  2. Một sự đột phá từ dải trên báo hiệu một sự đảo ngược xu hướng và tạo ra một tín hiệu bán.
  3. Một tín hiệu mua thực sự chỉ được tạo ra khi tín hiệu mua xuất hiện và giá trên đường DEMA.
  4. Một tín hiệu bán thực sự chỉ được tạo ra khi tín hiệu bán xuất hiện và giá dưới đường DEMA.

Thông qua thiết kế logic này, chiến lược có thể theo dõi xu hướng trong các thị trường xu hướng và tránh thường xuyên mở các vị trí trong các thị trường khác nhau.

Ưu điểm của Chiến lược

  • Kết hợp các lợi thế của chỉ số SuperTrend và DEMA để đạt được theo dõi xu hướng và lọc tín hiệu.
  • Dễ dàng tối ưu hóa các thông số SuperTrend cho các sản phẩm và khung thời gian khác nhau.
  • Đơn giản để tối ưu hóa các thông số DEMA mà không cần thử nghiệm nhiều lần.
  • Thích hợp cho các thị trường xu hướng, có thể theo dõi xu hướng hiệu quả.
  • Các tín hiệu sai trong các thị trường khác nhau được lọc ra bởi chỉ số DEMA.
  • Logic đơn giản và dễ hiểu và sửa đổi.

Rủi ro của chiến lược

  • Không thể xử lý được những biến động giá cực kỳ tốt.
  • Có thể phải chịu tổn thất khi xu hướng đảo ngược.
  • Các thiết lập tham số DEMA không phù hợp có thể bỏ lỡ các điểm vào / ra tốt nhất.
  • Các thông số siêu xu hướng không phù hợp như thời gian ATR có thể tạo ra tín hiệu sai.

Quản lý rủi ro:

  • Tối ưu hóa các thông số DEMA và SuperTrend.
  • Sử dụng lệnh dừng lỗ để hạn chế lỗ.
  • Thêm các cơ chế xác nhận tại các điểm chính để tránh tín hiệu sai.

Các lĩnh vực cải tiến

Chiến lược có thể được tăng cường từ các khía cạnh sau:

  1. Tối ưu hóa tham số SuperTrend. Kiểm tra các kết hợp thời gian ATR khác nhau để tìm các tham số tối ưu.

  2. DEMA tối ưu hóa tham số. Kiểm tra các giá trị khác nhau để xác định cài đặt tối ưu.

  3. Thêm cơ chế dừng lỗ. Đặt dừng lỗ dựa trên giá trị ATR để ngăn chặn dừng quá lớn.

  4. Thêm bộ lọc tín hiệu. Tăng xác nhận từ các chỉ số khác tại các điểm chính để ngăn chặn tín hiệu sai. Ví dụ, thêm xác nhận khối lượng tại các điểm đảo ngược xu hướng.

  5. Cải thiện kích thước vị trí. Điều chỉnh kích thước năng động dựa trên biến động thị trường và rủi ro.

Kết luận

Chiến lược này kết hợp các điểm mạnh của các chỉ số SuperTrend và DEMA để thực hiện một chiến lược giao dịch định lượng dựa trên việc theo dõi xu hướng và lọc tín hiệu. Có nhiều chỗ để tối ưu hóa thông qua điều chỉnh tham số, dừng lỗ và bộ lọc tín hiệu để cải thiện hơn nữa sự ổn định và lợi nhuận.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Krish\'s Supertrend Strategy', overlay=true)

// Supertrend Settings
Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)

atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up

dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.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.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 and showsignals ? 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(trend == 1 ? na : dn, 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 and showsignals ? 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))

// DEMA Settings
dema_length = 200
dema = ta.ema(close, dema_length)

// Long and Short Conditions
longCondition = buySignal and close > dema
shortCondition = sellSignal and close < dema

// Strategy Entry and Exit
strategy.entry('Long', strategy.long, when=longCondition)
strategy.entry('Short', strategy.short, when=shortCondition)

strategy.close('Long', when=ta.change(trend) or close < dema)
strategy.close('Short', when=ta.change(trend) or close > dema)

// Plotting
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 Highlighter', color=longFillColor, transp=90)
fill(mPlot, dnPlot, title='DownTrend Highlighter', color=shortFillColor, transp=90)

// Alerts (using plotshape for alerts in strategies)
plotshape(buySignal, title='SuperTrend Buy', color=color.new(color.green, 0), style=shape.triangleup, size=size.small)
plotshape(sellSignal, title='SuperTrend Sell', color=color.new(color.red, 0), style=shape.triangledown, size=size.small)
changeCond = trend != trend[1]
plotshape(changeCond, title='SuperTrend Direction Change', color=color.new(color.yellow, 0), style=shape.triangleup, size=size.small)




Thêm nữa