Это краткосрочная торговая стратегия, которая использует индикатор ADX для фильтрации сигналов прорыва. Она становится короткой, когда цена превышает верхнюю полосу Боллинджера, и ADX падает, и длинной, когда цена превышает нижнюю полосу Боллинджера, и ADX растет. Стратегия также устанавливает стоп-лосс и прибыль автоматически для полностью автоматизированной торговли.
Основой этой стратегии является использование полос Боллинджера для сигналов прорыва. Верхние и нижние полосы полос Боллинджера представляют два стандартных отклонения цены, поэтому прорывы обычно подразумевают, что цена входит в сильный тренд. Кроме того, индикатор ADX вводится здесь в качестве фильтра для предотвращения ложных прорывов.
В частности, эта стратегия рассчитывает полосы Боллинджера с использованием 33 периодов ценового закрытия. Средняя полоса представляет собой 33-периодную простую скользящую среднюю, а верхние/нижние полосы размещаются на двух стандартных отклонениях выше/ниже средней полосы. Стратегия сигнализирует короткий, когда цена закрывается ниже верхней полосы, а 8-периодный ADX находится ниже 15-периодного ADX. Она сигнализирует длинный, когда цена закрывается выше нижней полосы, а 8-периодный ADX находится выше 15-периодного ADX. Выходы устанавливаются на 800 пунктов прибыли и 400 пунктов стоп-лосса.
Как стратегия выхода, включающая фильтры тренда и импульса, она имеет несколько преимуществ:
Эта стратегия также сопряжена с некоторыми рисками:
Чтобы смягчить эти риски, мы можем тонко настроить параметр BB, чтобы сузить диапазоны, настроить периоды ADX, чтобы избежать перефильтрации, и уменьшить стоп-лосс, чтобы контролировать потерю одной сделки.
Есть возможности для дальнейшей оптимизации:
В заключение, это простая и практичная стратегия прорыва с фильтром. Определение тенденций с помощью 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)