Momentum ADX и RSI в сочетании со стратегией регулируемого трейлинг-стопа


Дата создания: 2023-10-09 15:36:07 Последнее изменение: 2023-10-09 15:36:07
Копировать: 1 Количество просмотров: 711
1
Подписаться
1617
Подписчики

Обзор

Стратегия объединяет динамический индикатор с относительно сильным индикатором ((RSI), дополненный регулируемым механизмом стоп-лосса, предназначенным для захвата направления тенденции, одновременно контролируя риск. Когда цена имеет сильную импульсивность, покупайте больше; когда цена имеет слабую импульсивность, продавайте на нуль. Стратегия одновременно устанавливает условия стоп-лосса, используя стоп-лосса для отслеживания максимальных уровней прибыли, чтобы блокировать прибыль и уменьшать убытки.

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

Вход определяется динамической линией и RSI

  • Использование динамического индикатора ADX для определения направления ценовой тенденции

    • ADX больше 20 означает тенденцию

    • Сигналы для просмотра при прохождении +DI-линии через -DI-линию

    • Сигнал понижения при прохождении линии +DI под линией -DI

  • RSI показывает, что мы перекупаем и перепродаем

    • RSI выше 70 - это зона перекупа, сигнал о понижении

    • RSI ниже 30 - это зона сверхпродажи, смотрите на сигналы о повышении

Когда ADX считает, что существует тенденция, и RSI дает сигнал подтверждения, выполняется соответствующая плюсовая операция.

Следующая остановка убытков

Стратегия использует динамически регулируемый механизм сдерживания убытков, включающий два параметра:

  • Активационная пропорция: после открытия позиции цена достигает установленной пропорции, активируется последующая остановка убытка

  • Процент отслеживания: пропорциональное расстояние отслеживания от ближайшего максимума дохода

После того, как цена достигает условий активации, следующая стоп-линия отслеживает максимальный уровень прибыли. Когда цена отступает, стоп-линия перемещается ниже. Если отступ превышает установленную пропорцию отслеживания, то стоп-линия будет активирована, закрывая все позиции.

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

  • Показатели динамики помогут определить направление тенденции и избежать неожиданных последствий

  • Индекс RSI гарантирует, что не будет упущены возможности для обратного пути

  • Стойкость к убыткам может быть отслежена, что позволяет закрепить прибыль и уменьшить убытки.

  • Стратегическая концепция четкая, понятная и реализуемая

  • Широкое применение в различных рынках и временных циклах

Риски и противодействие

  • ADX считает, что ложный взлом привел к ошибочному сигналу

    • Настройка параметров ADX, чтобы обеспечить истинное прорыв
  • RSI вызывает несколько ложных сигналов

    • Настройка параметров перекупки и перепродажи, чтобы предотвратить частоту торгов
  • Неправильная настройка параметров регулируемого ущерба

    • Оптимизация параметров, чтобы найти оптимальный уровень убытков
  • Большой прыжок не остановится

    • Рассматривайте возможность объединения лимита для предотвращения пропущенных остановок

Оптимизация

  • Тестирование различных комбинаций параметров ADX и RSI для оптимизации входа

  • Найти оптимальные параметры для различных точек активации стоп-убытков и частоты отслеживания

  • Рассмотреть возможность фильтрации других показателей для улучшения качества сигналов

  • Тестирование на различных рынках для определения общих параметров

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

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

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

//@version=5
strategy("Trailing Stop with RSI", overlay=true)

length = input.int(12, "Momentum Length")
price = close
momentum(seria, length) =>
    mom = seria - seria[length]
    mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)

rsiLength = input.int(14, "RSI Length")
rsiOverbought = input(70, "RSI Overbought Level")
rsiOversold = input(30, "RSI Oversold Level")

rsiValue = ta.rsi(close, rsiLength)

tsact = input.float(0.0, "Trailing Stop Activation (%)", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop (%)", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na

in_long = strategy.position_size > 0
in_short = strategy.position_size < 0

var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0

if in_long
    if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
    if not tsact
        if ts_size > 0 and ts_get < high
            array.push(ts_, high)
        if ts_size < 1
            array.push(ts_, high)
if in_short
    if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)
    if not tsact
        if ts_size > 0 and ts_get > low
            array.push(ts_, low)
        if ts_size < 1
            array.push(ts_, low)

trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na

if (mom0 > 0 and mom1 > 0)
    strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
    strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
    strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
    strategy.cancel("MomSE")

tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
    strategy.close_all()
if not strategy.opentrades
    array.clear(ts_)

rsiOverboughtCondition = rsiValue >= rsiOverbought
rsiOversoldCondition = rsiValue <= rsiOversold

if rsiOverboughtCondition
    strategy.close("SHORT", "SX")
    strategy.entry("LONG", strategy.long)

if rsiOversoldCondition
    strategy.close("LONG", "LX")
    strategy.entry("SHORT", strategy.short)

plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)