Стратегия торговли прорывом импульса


Дата создания: 2023-12-19 15:46:38 Последнее изменение: 2023-12-19 15:46:38
Копировать: 2 Количество просмотров: 573
1
Подписаться
1621
Подписчики

Стратегия торговли прорывом импульса

Обзор

Стратегия Momentum Breakout Trading Strategy - это стратегия отслеживания тенденций, которая генерирует торговый сигнал, обнаружив, что цена пробивает ключевые уровни сопротивления. Эта стратегия использует динамику Donchian Channel, чтобы определить ключевые уровни сопротивления, и в сочетании с индикатором движущейся средней фильтрует сигналы, чтобы избежать ошибочных сделок.

Стратегический принцип

Центральным показателем этой стратегии является Donchian Channel. Donchian Channel состоит из высоких, низких и средних цен. Верхняя и нижняя линии каналов соединяют соответственно высокие и низкие цены за определенный период.

Движущаяся средняя используется для определения направления ценовой тенденции. Покупательные сигналы, прорывающиеся в верхней части канала, принимаются только тогда, когда цена находится выше движущейся средней, что позволяет избежать покупки в зоне свертывания.

В частности, условие входа в стратегию заключается в следующем: цена прорывает Donchian Channel вверх по рельсу, а цена закрытия выше, чем в движущейся средней. Условие выхода из стратегии заключается в следующем: цена падает вниз по Donchian Channel вниз по рельсу.

Стоп-пост используется для отслеживания понижения Donchian Channel, что гарантирует, что стоп-пост будет двигаться вверх по мере развития тренда.

Анализ преимуществ

Эта стратегия объединяет два показателя для определения направления и силы тренда, что позволяет эффективно идентифицировать прорывные сигналы и избегать ошибочных сделок. В то же время, стоп-старты являются разумными, что позволяет стратегии в полной мере отслеживать тренд и получать прибыль.

В частности, эта стратегия имеет следующие преимущества:

  1. Donchian Channel позволяет динамически определять ключевые уровни поддержки и сопротивления, идентифицировать ключевые переломные моменты в тренде.

  2. Указатель движущейся средней используется в качестве фильтра, чтобы избежать покупки в скользкой зоне и уменьшить количество недействительных сделок.

  3. Стоп-лосс - это отслеживание понижения на Donchian Channel, чтобы максимально отследить тренд и получить прибыль.

  4. Параметры стратегии устанавливаются с разумной гибкостью и могут быть адаптированы и оптимизированы для различных рыночных условий.

Анализ рисков

Основные риски, связанные с этой стратегией:

  1. Риск неудачи прорыва. После того, как цена прорвет канал, она может быть быстро отклонена, и она не сможет эффективно построить склад.

  2. Риск обратного тренда. Рыночная ситуация может измениться до остановки, что приведет к остановке.

  3. Риск оптимизации параметров. Неправильная настройка параметров может привести к частоте торгов или недостаточному сигналу.

Эти риски можно оптимизировать, например, путем корректировки циклов движущихся средних, увеличения фильтрации объема сделки и т. Д., чтобы обеспечить более надежный сигнал. При этом следует настроить соответствующую Loose или Stop Loss для устранения рисков краткосрочной корректировки.

Направление оптимизации

Эта стратегия может быть улучшена в следующих аспектах:

  1. Используйте фильтрующие сигналы, чтобы убедиться, что прорыв сильный.

  2. Оптимизация циклических параметров скользящих средних, чтобы они лучше соответствовали характеристикам разных сортов.

  3. Настройка механизма остановки, чтобы остановка могла адаптироваться к колебаниям цены.

  4. Добавление механизма повторного входа, который позволяет поймать трендовые возможности после остановки выхода из игры.

  5. Многосортный отсчет, проверка параметров крепкости.

Подвести итог

Стратегия динамического прорыва включает в себя множество показателей, позволяющих определить направление и силу тренда, что позволяет решить проблему слепого позиционирования в обычных системах тренда. Параметры этой стратегии могут быть настроены гибко и оптимизированы для различных ситуаций и видов торговли.

Исходный код стратегии
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// Revision:        1
// Author:          @millerrh
// Strategy:  
//      Entry: Buy when Donchian Channel breaks out
//      Exit: Trail a stop with the lower Donchian Channel band
// Conditions/Variables:
//    1. Can add a filter to only take setups that are above a user-defined moving average (helps avoid trading counter trend) 
//    2. Manually configure which dates to back test
//    3. User-Configurable DC Channel length


// === CALL STRATEGY/STUDY, PROGRAMATICALLY ENTER STRATEGY PARAMETERS HERE SO YOU DON'T HAVE TO CHANGE THEM EVERY TIME YOU RUN A TEST ===
// (STRATEGY ONLY) - Comment out srategy() when in a study() 
strategy("Donchian Breakout", overlay=true, initial_capital=10000, currency='USD', 
   default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
// (STUDY ONLY) - Comment out study() when in a strategy() 
//study("Donchian Breakout", overlay=true)


// === BACKTEST RANGE ===
From_Year  = input(defval = 2019, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window

// == INPUTS ==
trigInput = input(title = "Execute Trades On...", defval = "Wick", options=["Wick","Close"]) // Useful for comparing standing stop orders vs. waiting for candle closes prior to action
stopTrail = input(title = "Trail Stops On...", defval = "ATR", options = ["ATR","Bottom of DC Channel","Midline of DC Channel","Tightest of ATR/Bot DC Channel"])
dcPeriod = input(title="DC period", type=input.integer, defval=20)

// === PLOT THE DONCHIAN CHANNEL ===
// Logic
dcUpper = highest(high, dcPeriod)
dcLower = lowest(low, dcPeriod)
dcMid = avg(dcUpper, dcLower)

// Plotting
dcUplot = plot(dcUpper, color=color.blue, linewidth=1, title="Upper Channel Line")
dcLplot = plot(dcLower, color=color.blue, linewidth=1, title="Lower Channel Line")
dcMidPlot = plot(dcMid, color=color.gray, linewidth=1, title="Mid-Line Average")
fill(dcUplot, dcLplot, color=color.gray, transp=90)

// == FILTERING ==
// Inputs
useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true)
maType = input(defval="SMA", options=["EMA", "SMA"], title = "MA Type For Filtering")
maLength   = input(defval = 100, title = "MA Period for Filtering", minval = 1)

// Declare function to be able to swap out EMA/SMA
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = ma(maType, close, maLength)
plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50)

// Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry 
maFilterCheck = if useMaFilter == true
    maFilter
else
    0

// == ENTRY AND EXIT CRITERIA ==
// Trigger stop based on candle close or High/Low (i.e. Wick) - If doing daily timeframe, can do candle close.  Intraday should use wick.
trigResistance = trigInput == "Close" ? close : trigInput == "Wick" ? high : na
trigSupport = trigInput == "Close" ? close : trigInput == "Wick" ? low : na
buySignal = trigResistance >= dcUpper[1] // The [1] looks at the previous bar's value as it didn't seem to be triggering correctly without it (likely) DC moves with each bar
sellSignal = trigSupport <= dcLower[1]

buy = buySignal and dcUpper[1] > maFilterCheck // All these conditions need to be met to buy


// (STRATEGY ONLY) Comment out for Study
// This string of code enters and exits at the close
if (trigInput == "Close")
    strategy.entry("Long", strategy.long, when = buy)
    strategy.close("Long", when = sellSignal)

// This string of code enters and exits at the wick (i.e. with pre-set stops)
if (trigInput == "Wick")
    strategy.entry("Long", strategy.long, stop = dcUpper[1], when = time > Start and time < Finish and dcUpper[1] > maFilterCheck)
    strategy.exit("Exit Long", from_entry = "Long", stop = dcLower[1])