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

Автор:Чао Чжан, Дата: 2024-01-04 17:12:30
Тэги:

img

Обзор

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

Логика стратегии

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

В частности, эта стратегия рассчитывает полосы Боллинджера с использованием 33 периодов ценового закрытия. Средняя полоса представляет собой 33-периодную простую скользящую среднюю, а верхние/нижние полосы размещаются на двух стандартных отклонениях выше/ниже средней полосы. Стратегия сигнализирует короткий, когда цена закрывается ниже верхней полосы, а 8-периодный ADX находится ниже 15-периодного ADX. Она сигнализирует длинный, когда цена закрывается выше нижней полосы, а 8-периодный ADX находится выше 15-периодного ADX. Выходы устанавливаются на 800 пунктов прибыли и 400 пунктов стоп-лосса.

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

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

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

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

Эта стратегия также сопряжена с некоторыми рисками:

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

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

Руководство по оптимизации

Есть возможности для дальнейшей оптимизации:

  1. Испытание на различных рыночных данных для поиска оптимального набора параметров.
  2. Включите другие показатели, такие как объем и скользящая средняя для фильтрации сигнала.
  3. Используйте методы машинного обучения для автоматической оптимизации параметров.
  4. Подумайте о динамическом стоп-лосе и прибыли.

Заключение

В заключение, это простая и практичная стратегия прорыва с фильтром. Определение тенденций с помощью BB и фильтрация сигналов с помощью 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)


Больше