Эта стратегия использует несколько скользящих средних (MA) в качестве основных торговых сигналов и включает в себя средний направленный индекс (ADX) в качестве фильтра. Основная идея стратегии заключается в том, чтобы определить потенциальные длинные и короткие возможности путем сравнения отношений между быстрым MA, медленным MA и средним MA. Одновременно индикатор ADX используется для фильтрации рыночных условий с достаточной силой тренда, повышая надежность торговых сигналов.
Стратегия отклонения MA с фильтром ADX использует несколько MAs и индикатор 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")