Xu hướng theo chiến lược với MACD và kênh Donchian

Tác giả:ChaoZhang, Ngày: 2023-11-15 11:37:37
Tags:

img

Tổng quan

Chỉ số này kết hợp chỉ số kênh Donchian và chỉ số MACD để xác định xu hướng. Nó thuộc về một chiến lược theo xu hướng điển hình. Nó đi dài khi giá vượt qua dải trên và MACD hiển thị đường chéo vàng, và đi ngắn khi giá vượt qua dải dưới và MACD hiển thị đường chéo chết. Chỉ số ATR được sử dụng để tính stop loss.

Chiến lược logic

  1. Tính toán chỉ số MACD, bao gồm đường nhanh, đường chậm và biểu đồ.

  2. Tính toán dải kênh Donchian phía trên và phía dưới. Dải trên là giá cao nhất trong N ngày, dải dưới là giá thấp nhất trong N ngày.

  3. Khi giá vượt qua dải trên, và đường MACD nhanh vượt qua đường chậm, đi dài.

  4. Khi giá vượt qua dải dưới, và đường MACD nhanh vượt qua dưới đường chậm, đi ngắn.

  5. Sử dụng chỉ số ATR để tính toán stop loss cho chiến lược này, được đặt thành giá trị ATR nhân một hệ số từ giá hiện tại.

  6. Đóng vị trí khi một tín hiệu ngược xuất hiện.

Phân tích lợi thế

Chiến lược này kết hợp các chỉ số đánh giá xu hướng và các chỉ số kênh, có thể theo dõi xu hướng một cách hiệu quả. Chỉ số MACD đánh giá xu hướng và động lực giá. Kênh Donchian đánh giá hướng.

Ưu điểm là:

  1. Chiến lược rất đơn giản với vài thông số, dễ thực hiện.

  2. Nó có thể mở vị trí dọc theo xu hướng, và nắm bắt các cơ hội xu hướng trong thời gian.

  3. ATR dừng mất mát kiểm soát rủi ro.

  4. Việc rút tiền có thể được kiểm soát một cách nhất định.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Các thiết lập tham số không chính xác của kênh Donchian có thể gây ra tín hiệu sai.

  2. Các thông số MACD không chính xác cũng có thể dẫn đến tín hiệu chậm.

  3. Cài đặt stop loss quá rộng có thể dẫn đến tăng lỗ.

  4. Sự đảo ngược thị trường mạnh mẽ có thể dẫn đến tổn thất lớn.

  5. Chiến lược có xu hướng giao dịch quá mức.

Giải pháp:

  1. Tối ưu hóa các thông số, chọn cổ phiếu cẩn thận.

  2. Đánh lỗ nghiêm ngặt, dừng lỗ sau.

  3. Điều chỉnh kích thước vị trí đúng cách.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Tối ưu hóa các thông số MACD để cải thiện độ nhạy.

  2. Tối ưu hóa thuật toán dừng lỗ để làm cho nó gần với giá.

  3. Thêm cơ chế định kích thước vị trí theo sức mạnh xu hướng.

  4. Thêm bộ lọc để tránh tín hiệu sai.

  5. Thêm các tiêu chí lựa chọn cho các công cụ giao dịch.

  6. Thêm đánh giá về thời gian giao dịch.

Tóm lại

Tóm lại, đây là một chiến lược theo xu hướng điển hình. Nó kết hợp kênh Donchian cho hướng xu hướng và MACD cho sức mạnh xu hướng. Nó có thể theo dõi xu hướng hiệu quả và kiểm soát rủi ro. Bằng cách tối ưu hóa các thông số, dừng lỗ, kích thước vị trí vv, sự ổn định và lợi nhuận có thể được cải thiện hơn nữa. Chiến lược phù hợp với các nhà đầu tư yêu cầu độ chính xác cao trong phán đoán xu hướng.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 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/
// © Robrecht99

//@version=5
strategy("Trend Following with Donchian Channels and MACD", overlay=false, margin_long=100, margin_short=100, pyramiding=3)

// MACD //
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")

fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
plot(macd, title="MACD", color=col_macd)
plot(signal, title="Signal", color=col_signal)

// Donchian Channels //

Length1 = input.int(title="Length Upper Channel", defval=50, minval=1, group="Donchian Channels Inputs")
Length2 = input.int(title="Length Lower Channel", defval=50, minval=1, group="Donchian Channels Inputs")
h1 = ta.highest(high[1], Length1)
l1 = ta.lowest(low[1], Length2)
fillColor = input.color(color.new(color.purple, 95), title = "Fill Color", group = "Donchian Channels Inputs")
upperColor = input.color(color.new(color.orange, 0), title = " Color Upper Channel", group = "Donchian Channels Inputs", inline = "upper")
lowerColor = input.color(color.new(color.orange, 0), title = " Color Lower Channel", group = "Donchian Channels Inputs", inline = "lower")
u = plot(h1, "Upper", color=upperColor)
l = plot(l1, "Lower", color=upperColor)
fill(u, l, color=fillColor)

//ATR and Position Size //
strategy.initial_capital = 50000
length = input.int(title="ATR Period", defval=14, minval=1, group="ATR Inputs")
risk = input(title="Risk Per Trade", defval=0.01, group="ATR Inputs")
multiplier = input(title="ATR Multiplier", defval=2, group="ATR Inputs")
atr = ta.atr(length)
amount = (risk * strategy.initial_capital / (multiplier * atr))

// Buy and Sell Conditions //

entrycondition1 = ta.crossover(macd, signal)
entrycondition2 = macd > signal
entrycondition3 = macd and signal > hist
sellcondition1 = ta.crossover(signal, macd)
sellcondition2 = signal > macd
sellcondition3 = macd and signal < hist

// Buy and Sell Signals //

if (close > h1 and entrycondition2 and entrycondition3)
    strategy.entry("long", strategy.long, qty=amount)
    stoploss = close - atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (sellcondition1 and sellcondition2 and sellcondition3)
    strategy.close(id="long")

if (close < l1 and sellcondition2 and sellcondition3)
    strategy.entry("short", strategy.short, qty=amount)
    stoploss = close + atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (entrycondition1 and entrycondition2 and entrycondition3)
    strategy.close(id="short")

Thêm nữa