Эта стратегия сочетает в себе индикатор Донкианского канала и индикатор MACD для определения тренда. Она относится к типичной стратегии, следующей за трендом. Она длится, когда цена выходит из верхней полосы, и MACD показывает золотой крест, и становится короткой, когда цена выходит из нижней полосы, и MACD показывает смертельный крест.
Расчет индикатора MACD, включая быструю линию, медленную линию и гистограмму.
Вычислите верхнюю и нижнюю полосы Дончианского канала. Верхняя полоса - самая высокая цена за N дней, нижняя полоса - самая низкая цена за N дней.
Когда цена проходит верхнюю полосу, и быстрая линия MACD пересекает медленную линию, идете на длинный.
Когда цена проходит нижнюю полосу, и быстрая линия MACD пересекает медленную линию, перейдите на короткий.
Использовать индикатор ATR для расчета стоп-лосса для этой стратегии, который устанавливается как значение ATR, умноженное на коэффициент от текущей цены.
Закройте позицию, когда появится сигнал обратного движения.
Эта стратегия сочетает в себе индикаторы оценки тренда и индикаторы канала, которые могут эффективно отслеживать тенденции. индикатор MACD оценивает тенденцию и импульс цен. канал Дончиана оценивает направление. стоп-лосс ATR ограничивает потерю на сделку.
Преимущества:
Стратегия простая, с несколькими параметрами, легко реализуемая.
Он может открывать позиции вдоль тренда и вовремя захватывать трендовые возможности.
ATR контролирует риск.
Снижение можно контролировать до некоторой степени.
Существуют также некоторые риски:
Неправильное настройка параметров Дончианского канала может вызвать ложные сигналы.
Неправильные параметры MACD также могут привести к отставанию сигналов.
Слишком широкая установка стоп-лосса может привести к увеличению потерь.
Резкое изменение на рынке может привести к огромным потерям.
Стратегия имеет тенденцию к перепродаже.
Решения:
Оптимизируйте параметры, тщательно выбирайте запасы.
Строгий стоп-лосс, отстающий стоп-лосс.
Правильно настроить размер позиции.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать параметры MACD для повышения чувствительности.
Оптимизируйте алгоритм стоп-лосса, чтобы приблизить его к цене.
Добавьте механизм размещения позиций в соответствии с силой тренда.
Добавьте фильтры, чтобы избежать ложных сигналов.
Добавить критерии отбора для инструментов торговли.
Добавьте суждение о периоде времени торговли.
В общем, это типичная стратегия, основанная на тренде. Она сочетает в себе канал Дончиана для направления тренда и MACD для силы тренда. Она может эффективно следить за трендом и контролировать риск. Оптимизируя параметры, стоп-лосс, размещение позиций и т. д., можно еще больше улучшить стабильность и прибыльность. Стратегия подходит для инвесторов, которым требуется высокая точность в оценке тренда.
/*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")