Стратегия отклонения скользящей средней на основе фильтра индекса среднего направления

ADX MA WMA
Дата создания: 2024-05-17 10:35:58 Последнее изменение: 2024-05-17 10:35:58
Копировать: 1 Количество просмотров: 644
1
Подписаться
1617
Подписчики

Стратегия отклонения скользящей средней на основе фильтра индекса среднего направления

Обзор

Стратегия использует несколько движущихся средних ((MA) в качестве основного торгового сигнала и в сочетании с средним индексом направления ((ADX) в качестве фильтра. Основная идея стратегии заключается в том, чтобы идентифицировать потенциальные многоголовые и пустые возможности, сравнивая отношения между быстрым МА, медленным МА и средним МА.

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

  1. Вычислите быстрое МА, медленное МА и среднее МА.
  2. Выявление потенциальных многоголовых и пустых уровней путем сравнения цены закрытия с отношением к медленному МА.
  3. Установление уровня плюс- и пустоты путем сравнения цены закрытия с отношением к быстрому МА.
  4. Вручную рассчитывается индикатор ADX, используемый для измерения силы тренда.
  5. Когда быстрый MA пересекает средний MA вверх, ADX превышает установленный порог и подтверждает многоголовый уровень, генерируется многоголовый входный сигнал.
  6. Когда быстрый MA пересекает средний MA вниз, ADX превышает установленный порог и подтверждает уровень воздушного звена, создается сигнал входа в воздушный зонд.
  7. Когда цена закрытия пересекает медленный MA вниз, генерируется многоголовый сигнал выхода; когда цена закрытия пересекает медленный MA вверх, генерируется пустой сигнал выхода

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

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

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gavinc745

//@version=5
strategy("MA Rejection Strategy with ADX Filter", overlay=true)

// Input parameters
fastMALength = input.int(10, title="Fast MA Length", minval=1)
slowMALength = input.int(50, title="Slow MA Length", minval=1)
averageMALength = input.int(20, title="Average MA Length", minval=1)
adxLength = input.int(14, title="ADX Length", minval=1)
adxThreshold = input.int(20, title="ADX Threshold", minval=1)

// Calculate moving averages
fastMA = ta.wma(close, fastMALength)
slowMA = ta.wma(close, slowMALength)
averageMA = ta.wma(close, averageMALength)

// Calculate ADX manually
dmPlus = high - high[1]
dmMinus = low[1] - low
trueRange = ta.tr

dmPlusSmoothed = ta.wma(dmPlus > 0 and dmPlus > dmMinus ? dmPlus : 0, adxLength)
dmMinusSmoothed = ta.wma(dmMinus > 0 and dmMinus > dmPlus ? dmMinus : 0, adxLength)
trSmoothed = ta.wma(trueRange, adxLength)

diPlus = dmPlusSmoothed / trSmoothed * 100
diMinus = dmMinusSmoothed / trSmoothed * 100
adx = ta.wma(math.abs(diPlus - diMinus) / (diPlus + diMinus) * 100, adxLength)

// Identify potential levels
potentialLongLevel = low < slowMA and close > slowMA
potentialShortLevel = high > slowMA and close < slowMA

// Confirm levels
confirmedLongLevel = potentialLongLevel and close > fastMA
confirmedShortLevel = potentialShortLevel and close < fastMA

// Entry signals
longEntry = confirmedLongLevel and ta.crossover(fastMA, averageMA) and adx > adxThreshold
shortEntry = confirmedShortLevel and ta.crossunder(fastMA, averageMA) and adx > adxThreshold

// Exit signals
longExit = ta.crossunder(close, slowMA)
shortExit = ta.crossover(close, slowMA)

// Plot signals
plotshape(longEntry, title="Long Entry", location=location.belowbar, style=shape.triangleup, size=size.small, color=color.green)
plotshape(shortEntry, title="Short Entry", location=location.abovebar, style=shape.triangledown, size=size.small, color=color.red)

// Plot moving averages and ADX
plot(fastMA, title="Fast MA", color=color.blue)
plot(slowMA, title="Slow MA", color=color.red)
plot(averageMA, title="Average MA", color=color.orange)
// plot(adx, title="ADX", color=color.purple)
// hline(adxThreshold, title="ADX Threshold", color=color.gray, linestyle=hline.style_dashed)

// Execute trades
if longEntry
    strategy.entry("Long", strategy.long)
else if longExit
    strategy.close("Long")

if shortEntry
    strategy.entry("Short", strategy.short)
else if shortExit
    strategy.close("Short")