Торговая стратегия Trend Breakout ADX Filter


Дата создания: 2024-01-04 17:12:30 Последнее изменение: 2024-01-04 17:12:30
Копировать: 0 Количество просмотров: 924
1
Подписаться
1621
Подписчики

Торговая стратегия Trend Breakout ADX Filter

Обзор

Эта стратегия является короткой линейной торговой стратегией, которая использует ADX-индикатор для фильтрации сигналов прорыва. Когда цена прорывает Bollinger Bollinger Bandwagon, и ADX падает, делайте пробел; когда цена прорывает Bollinger Bollinger Bandwagon, и ADX растет, делайте больше.

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

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

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

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

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

  1. Использование бринговых поясов для определения прорыва в тренде соответствует привычкам большинства трейдеров.
  2. Добавление фильтрации условий ADX может уменьшить потери от ложных прорывов во время колебаний тренда.
  3. Стратегия проста, легко понятна и оптимизирована.
  4. Автоматически устанавливается стоп-стоп, не требует человеческого вмешательства, подходит для алгоритмической торговли.

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

Однако есть и другие риски:

  1. Неправильная настройка параметров пояса бурин может привести к слишком частому сигналу и увеличению стоимости транзакций.
  2. Неправильная настройка ADX может также отфильтровывать часть эффективного сигнала.
  3. Стоп-разрыв может быть слишком большим, а одиночные потери расширяются.

Чтобы снизить эти риски, мы можем скорректировать параметры пояса Бурин, уменьшить диапазон пояса Бурин; скорректировать параметры цикла ADX, чтобы избежать чрезмерного просчёта сигнала; адекватно уменьшить стоп-дистанцию, чтобы контролировать одиночные потери. Конечно, эти оптимизации должны быть проверены путем обратной проверки, чтобы избежать чрезмерной совместимости.

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

В этой стратегии есть место для дальнейшей оптимизации:

  1. Можно тестировать данные на разных рынках, чтобы найти оптимальные комбинации параметров.
  2. Для дальнейшей фильтрации сигналов можно использовать другие показатели, такие как объем торгов, движущаяся средняя и т. д.
  3. Автоматическая оптимизация параметров с использованием методов машинного обучения.
  4. Можно рассматривать динамические остановки и остановки.

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

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

Исходный код стратегии
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hizbullah XAUUSD Sniper", overlay=true)

Price = close

Length = input(33)
Mult = input(2)
Basis = sma(Price, Length)
StdDev = Mult * stdev(Price, Length)
Upper = Basis + StdDev
Lower = Basis - StdDev

ADX_Length = input(4)
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
SmoothedTrueRange = sma(TrueRange, ADX_Length)
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedDirectionalMovementPlus = sma(DirectionalMovementPlus, ADX_Length)
SmoothedDirectionalMovementMinus = sma(DirectionalMovementMinus, ADX_Length)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus - DIMinus) / (DIPlus + DIMinus)*100
SmoothedADX1 = ema(DX, input(8))
SmoothedADX2 = ema(DX, input(15))

Condition1 = crossunder(Price, Upper) and SmoothedADX1 < SmoothedADX2

Take_Profit = input(800)
Stop_Loss = input(400)

strategy.entry("ShortEntry", true, when = Condition1)
strategy.exit("ShortExit", "ShortEntry", profit = Take_Profit, loss = Stop_Loss)