
Chiến lược này kết hợp các chỉ số phân tán và MACD để đánh giá xu hướng, là một chiến lược theo dõi xu hướng điển hình. Khi giá phá vỡ đường đua và MACD xuất hiện Gold Fork, hãy làm nhiều hơn khi giá giảm xuống đường và MACD xuất hiện Đánh giá chết, sử dụng chỉ số ATR để tính toán điểm dừng.
Tính MACD bao gồm đường nhanh, đường chậm và biểu đồ.
Tính phân tán trên và xuống. Giá cao nhất trong N ngày trên đường và giá thấp nhất trong N ngày dưới đường.
Khi giá phá vỡ đường lên và MACD nhanh lên phá vỡ đường chậm, làm nhiều hơn.
Khi giá giảm xuống đường và MACD đường nhanh xuống phá vỡ đường chậm, hãy làm trống.
Sử dụng chỉ số ATR để tính toán điểm dừng cho chiến lược này, đặt giá trị ATR từ giá đến điểm dừng bằng một hệ số.
Khi có tín hiệu đảo ngược giá, hãy xóa vị trí hiện tại.
Chiến lược này kết hợp các chỉ số định xu hướng và chỉ số kênh để theo dõi xu hướng một cách hiệu quả. Chỉ số MACD có thể xác định xu hướng và cường độ giá, và chỉ số kênh phân tán có thể xác định hướng.
Những ưu điểm:
Các tham số chiến lược rất đơn giản và dễ thực hiện.
Các nhà đầu tư có thể mở các vị trí theo xu hướng và nắm bắt các cơ hội xu hướng kịp thời.
ATR bị hỏng có thể kiểm soát rủi ro.
Việc rút lui có thể được kiểm soát.
Chiến lược này cũng có một số rủi ro:
Thiết lập tham số kênh phân tán không đúng có thể gây ra tín hiệu giả.
Các tham số MACD được thiết lập không đúng cũng có thể gây ra sự chậm trễ của tín hiệu cảnh báo của Hệ thống Quản lý Viticulture.
Thiết lập dừng lỗ quá lớn có thể gây ra tổn thất lớn hơn.
Nếu tình hình thay đổi mạnh mẽ, nó có thể dẫn đến tổn thất.
Chiến lược này dễ gây ra quá nhiều giao dịch.
Giải pháp tương ứng:
Các yếu tố tối ưu hóa, chọn cổ phiếu cẩn thận.
Hạn chế nghiêm ngặt, theo dõi Hạn chế.
Điều chỉnh quản lý vị trí thích hợp.
Chiến lược này có thể được tối ưu hóa bằng cách:
Tối ưu hóa các tham số MACD, nâng cao độ nhạy của chỉ số.
Tối ưu hóa các thuật toán dừng lỗ để dừng lỗ gần hơn với giá.
Tăng cơ chế quản lý vị trí, điều chỉnh vị trí theo xu hướng mạnh hoặc yếu.
Tăng các điều kiện lọc để tránh tín hiệu giả.
Thêm tiêu chuẩn lựa chọn cho các loại thương mại.
Tăng khả năng phán đoán về khoảng thời gian giao dịch.
Chiến lược này nói chung là một chiến lược theo dõi xu hướng điển hình. Nó kết hợp các chỉ số phân tán để xác định hướng xu hướng và MACD để xác định cường độ 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")