Стратегия разворота тренда RSI

RSI ATR
Дата создания: 2024-04-28 13:33:19 Последнее изменение: 2024-04-28 13:33:19
Копировать: 1 Количество просмотров: 546
1
Подписаться
1617
Подписчики

Стратегия разворота тренда RSI

Обзор

Стратегия RSI Trend Reversal - это количественная торговая стратегия, основанная на относительно сильном индексе RSI и средней реальной волновой величине ATR. Стратегия адаптируется к быстрым рыночным колебаниям и захватывает возможности для обратного тренда путем динамической корректировки стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стоп-стопстопстоп-стопстоп-

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

В основе стратегии RSI-реверсии лежит построение динамических стоп-стоп-лост. Вначале используются специальные функции highest_custom и lowest_custom, чтобы найти наивысшую и самую низкую цены с момента последней скрещивания, чтобы сформировать базовый диапазон. Затем рассчитываются RSI и ATR длиной в длину, соответственно, и выполняются следующие вычисления:

  1. Нижняя линия = максимальная цена ×[1 - (ATR/цена + 1/(RSI вниз по трассе × мультипликатор))
  2. Верхняя линия = минимальная цена ×[1 + (ATR/цена + 1/(RSI на трассе × мультипликатор))

При этом мультипликатор расширяет коэффициент для пользовательского настраиваемого диапазона. Если цена вверх пробивает верхнюю траекторию, то делается больше, а вниз пробивает нижнюю траекторию, то делается пусто. При этом цвет этих двух полос также изменяется в зависимости от положения ценового диапазона относительно волны, чтобы было легко наблюдать.

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

  1. Устойчивая к изменению, сдерживающая полоса может автоматически корректироваться в зависимости от колебаний цены, своевременно реагируя на изменения в ситуации.
  2. Параметры регулируемы, можно гибко контролировать чувствительность стратегии, регулируя такие параметры, как length, multiplier.
  3. Логика ясна, структура кода разумна, легко понять и вторично разработать.
  4. Широко применяемый, может использоваться как самостоятельно, так и для других стратегий.
  5. Вычислительная эффективность, избегая большого количества повторных вычислений, вызванных использованием типа series, путем настройки функций, таких как highestest_custom.

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

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

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

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

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

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

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

//@version=5
strategy("RSI Trend Reversal", overlay=true, max_bars_back = 4999, calc_on_every_tick = false)


//INPUTS 
rsi_length = input.int(title = "Lenght", defval = 8)
rsi_mult = input.float(title = "Multiplier", defval = 1.5, step = .05)
lookback = input.int(title = "Delay to prevent idealization", defval = 1)
sltp = input.float(title = "Minimum Difference", defval = 10)
src = input.source(title = "Source Input", defval = close)

//PARAMETERS INITILIZATION
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)
//FUNCTION INITILIZATION
highest_custom(src, length) =>
    x = src
    for i = 0 to length
        if src[i] > x
            x := src[i]
    x
lowest_custom(src, length) => 
    x = src
    for i = 0 to length
        if src[i] < x
            x := src[i]
    x
rsilev(src, length, mult, sltp) =>
    sl = (100 - sltp) / 100
    tp = (100 + sltp) / 100
    var bool crossup = na
    var bool crossdown = na
    var float dir = na
    dir_change = ta.change(dir)
    var float BearGuy = 0
    BullGuy = ta.barssince(crossup or crossdown)
    if na(BullGuy)
        BearGuy += 1
    else
        BearGuy := BullGuy
    var float upper = na
    var float lower = na
    rsilower = ta.rsi(src, length)
    rsiupper = math.abs(ta.rsi(src, length) - 100)
    atr = ta.atr(length) / src
    lower := highest_custom(math.max(highest_custom(highest_custom(src, BearGuy) * (1 - (atr + ((1 / (rsilower) * mult)))), BearGuy), src * sl), BearGuy)
    upper := lowest_custom(math.min(lowest_custom(lowest_custom(src, BearGuy) * (1 + (atr + ((1 / (rsiupper) * mult)))), BearGuy), src * tp), BearGuy)
    var float thresh = na
    if na(thresh)
        thresh := lower
    if na(dir)
        dir := 1
    if crossdown
        dir := -1
    if crossup
        dir := 1
    if dir == 1
        thresh := lower
    if dir == -1
        thresh := upper
    crossup := ta.crossover(src, thresh)
    crossdown := ta.crossunder(src, thresh)
    thresh

rsiclose = rsilev(hclose, rsi_length, rsi_mult, sltp)

//PLOTTING
var color col = color.lime
if hclose > rsiclose
    col := color.lime
if hclose < rsiclose
    col := color.red
plot(rsiclose, linewidth = 2, color = col)

//STRATEGY
buy = ta.crossover(hclose, rsiclose)
sell = ta.crossunder(hclose, rsiclose)

if buy[lookback]
    strategy.entry("long", strategy.long)
if sell[lookback]
    strategy.entry("Short", strategy.short)