Стратегия следования за трендом на основе трехлинейного прорыва импульса в сочетании с фильтром ADX

ADX ATR TMA TP SL 3LS
Дата создания: 2025-02-20 17:46:30 Последнее изменение: 2025-02-20 17:46:30
Копировать: 0 Количество просмотров: 459
2
Подписаться
319
Подписчики

Стратегия следования за трендом на основе трехлинейного прорыва импульса в сочетании с фильтром ADX Стратегия следования за трендом на основе трехлинейного прорыва импульса в сочетании с фильтром ADX

Обзор

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

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

Основная логика стратегии включает в себя следующие ключевые элементы:

  1. Трехлинейный прорыв формы идентификации: многоголовый формы требует трех последовательных ниток, после чего появляется более крупный прорыв ниток; пустой формы требует трех последовательных ниток, после которых появляется более крупный прорыв ниток.
  2. Подтверждение силы тренда ADX: используется индикатор ADX для определения силы текущего тренда, только тогда, когда значение ADX превышает установленный порог ((по умолчанию 25), создается торговый сигнал.
  3. ATR динамический стоп-стоп: динамическое вычисление стоп-стоп и стоп-стоп позиций с использованием ATR-значений, при этом стоп-стоп устанавливается в 2 раза ATR, а стоп-стоп - в 1 раз ATR.
  4. Логика исполнения сделок: система автоматически выполняет операции по открытию позиции, и одновременно устанавливает соответствующие стоп-стоп-убытки, когда выполняются условия распознавания формы и силы тренда.

Стратегические преимущества

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

Стратегический риск

  1. Риск ложного прорыва: ложные сигналы прорыва могут возникнуть на волатильных рынках, что может привести к потере торгов.
  2. Риск скольжения: существенное скольжение может произойти на рынках с низкой ликвидностью из-за стратегического использования входа по рыночной цене.
  3. Чувствительность к параметрам: эффективность стратегии чувствительна к параметрам, таким как ADX threshold и ATR cycle, и требует оптимизации для разных рынков.
  4. Трендозависимость: стратегия может плохо работать в условиях рыночных потрясений и лучше подходит для рыночных условий с заметной тенденцией.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-08-11 00:00:00
end: 2025-02-19 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

// Copyright ...
// Based on the TMA Overlay by Arty, converted to a simple strategy example.
// Pine Script v5

//@version=5
strategy(title='3 Line Strike [TTF] - Strategy with ATR and ADX Filter',
     shorttitle='3LS Strategy [TTF]',
     overlay=true,
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     pyramiding=0)

// -----------------------------------------------------------------------------
//                               INPUTS
// -----------------------------------------------------------------------------

// ATR and ADX Inputs
atrLength = input.int(title='ATR Length', defval=14, group='ATR & ADX')
adxLength = input.int(title='ADX Length', defval=14, group='ATR & ADX')
adxThreshold = input.float(title='ADX Threshold', defval=25, group='ATR & ADX')

// ### 3 Line Strike
showBear3LS = input.bool(title='Show Bearish 3 Line Strike', defval=true, group='3 Line Strike',
     tooltip="Bearish 3 Line Strike (3LS-Bear) = 3 zelené sviečky, potom veľká červená sviečka (engulfing).")
showBull3LS = input.bool(title='Show Bullish 3 Line Strike', defval=true, group='3 Line Strike',
     tooltip="Bullish 3 Line Strike (3LS-Bull) = 3 červené sviečky, potom veľká zelená sviečka (engulfing).")

// -----------------------------------------------------------------------------
//                          CALCULATIONS
// -----------------------------------------------------------------------------

// Calculate ATR
atr = ta.atr(atrLength)

// Calculate ADX components manually
tr = ta.tr(true)
plusDM = ta.change(high) > ta.change(low) and ta.change(high) > 0 ? ta.change(high) : 0
minusDM = ta.change(low) > ta.change(high) and ta.change(low) > 0 ? ta.change(low) : 0
smoothedPlusDM = ta.rma(plusDM, adxLength)
smoothedMinusDM = ta.rma(minusDM, adxLength)
smoothedTR = ta.rma(tr, adxLength)

plusDI = (smoothedPlusDM / smoothedTR) * 100
minusDI = (smoothedMinusDM / smoothedTR) * 100

dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, adxLength)

// Helper Functions
getCandleColorIndex(barIndex) =>
    int ret = na
    if (close[barIndex] > open[barIndex])
        ret := 1
    else if (close[barIndex] < open[barIndex])
        ret := -1
    else
        ret := 0
    ret

isEngulfing(checkBearish) =>
    sizePrevCandle = close[1] - open[1]
    sizeCurrentCandle = close - open
    isCurrentLargerThanPrevious = math.abs(sizeCurrentCandle) > math.abs(sizePrevCandle)

    if checkBearish
        isGreenToRed = (getCandleColorIndex(0) < 0) and (getCandleColorIndex(1) > 0)
        isCurrentLargerThanPrevious and isGreenToRed
    else
        isRedToGreen = (getCandleColorIndex(0) > 0) and (getCandleColorIndex(1) < 0)
        isCurrentLargerThanPrevious and isRedToGreen

isBearishEngulfing() => isEngulfing(true)
isBullishEngulfing() => isEngulfing(false)

is3LSBear() =>
    is3LineSetup = (getCandleColorIndex(1) > 0) and (getCandleColorIndex(2) > 0) and (getCandleColorIndex(3) > 0)
    is3LineSetup and isBearishEngulfing()

is3LSBull() =>
    is3LineSetup = (getCandleColorIndex(1) < 0) and (getCandleColorIndex(2) < 0) and (getCandleColorIndex(3) < 0)
    is3LineSetup and isBullishEngulfing()

// Signals
is3LSBearSig = is3LSBear() and adx > adxThreshold
is3LSBullSig = is3LSBull() and adx > adxThreshold

// Take Profit and Stop Loss
longTP = close + 2 * atr
longSL = close - 1 * atr
shortTP = close - 2 * atr
shortSL = close + 1 * atr

// -----------------------------------------------------------------------------
//                          STRATEGY ENTRY PRÍKAZY
// -----------------------------------------------------------------------------
if (showBull3LS and is3LSBullSig)
    strategy.entry("3LS_Bull", strategy.long, comment="3LS Bullish")
    strategy.exit("Exit Bull", from_entry="3LS_Bull", limit=longTP, stop=longSL)

if (showBear3LS and is3LSBearSig)
    strategy.entry("3LS_Bear", strategy.short, comment="3LS Bearish")
    strategy.exit("Exit Bear", from_entry="3LS_Bear", limit=shortTP, stop=shortSL)