Стратегия стоп-лосса, основанная на тренде и индикаторе RSI


Дата создания: 2023-12-12 15:46:49 Последнее изменение: 2023-12-12 15:46:49
Копировать: 0 Количество просмотров: 1051
1
Подписаться
1621
Подписчики

Стратегия стоп-лосса, основанная на тренде и индикаторе RSI

Обзор

Эта стратегия называется “стоп-стоп” для отслеживания тенденции на основе RSI. Эта стратегия использует RSI для определения перепродажи, в сочетании с показателем быстрого и медленного МА для определения направления тенденции и установления условий для входа.

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

Эта стратегия использует RSI и MA для определения времени входа в рынок. Параметры RSI устанавливаются на 2 цикла для определения перепродажи и перекупа.

Многоголовый вход: быстрый МА на медленном МА, и цена выше медленного МА, в то же время RSI ниже зоны перепродажи (по умолчанию 10%);
Пустой вход: быстрое MA под медленным MA, и цена ниже медленного MA, в то же время RSI выше зоны сверхпокупа (по умолчанию 90%) пустой.

Кроме того, в стратегии установлен фильтр волатильности. Фильтр рассчитывает скользящие отклонения MA и открывает позиции только тогда, когда отклонения превышают установленные отклонения. Его целью является предотвращение открытия позиций в период ценовых колебаний без четкого направления.

На exit, стратегия использует процентный метод отслеживания стоп-убытков. В зависимости от процента стоп-убытков ввода, в сочетании с каждой разницей в цене прыжка, рассчитывается стоп-убыток, чтобы реализовать динамическую корректировку стоп-убытков.

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

Основные преимущества этой стратегии:

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

Анализ рисков

В этой стратегии есть определенные риски, которые проявляются в следующем:

  1. RSI и MA отстают, и могут упустить некоторые возможности для поворота.
  2. Процентная стоп-убыль может быть легко вызвана при падении концентрации.
  3. Не может эффективно обрабатывать ночные диски и переддисковые колебания.

Оптимизация для вышеуказанных рисков может быть осуществлена в следующих аспектах:

  1. Настройка RSI на 1 цикл снижает задержку.
  2. Параметры цикла МА корректируются в зависимости от особенностей разных сортов.
  3. Процентный уровень ущерба должен быть скорректирован с учетом ущерба и терпимости к потрясениям.

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

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

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

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

Эта стратегия в целом является более стабильной стратегией отслеживания тенденций. Она объединяет в себе два показателя RSI и MA, гарантируя определенную стабильность, а также позволяет захватить более четкие возможности для обратного изменения тенденции. В то же время установка фильтра колебаний позволяет избежать частичного риска, а процентный метод остановки может эффективно контролировать одиночные потери.

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

// Scalping strategy
// © Lukescream and Ninorigo
// (original version by Lukescream - lastest versions by Ninorigo) - v1.3
//

//@version=4
strategy(title="Scalping using RSI 2 indicator", shorttitle="RSI 2 Strategy", overlay=true, pyramiding=0, process_orders_on_close=false)

var bool ConditionEntryL = false
var bool ConditionEntryS = false


//***********
// Costants
//***********
def_start_date = timestamp("01 Jan 2021 07:30 +0000")
def_end_date   = timestamp("01 Dec 2024 07:30 +0000")

def_rsi_length = 2
def_overbought_value = 90
def_oversold_value   = 10

def_slow_ma_length = 200
def_fast_ma_length = 50
def_ma_choice      = "EMA"

def_tick   = 0.5
def_filter = true

def_trailing_stop = 1


//***********
// Change the optional parameters
//***********
start_time  = input(title="Start date", defval=def_start_date, type=input.time)
end_time    = input(title="End date", defval=def_end_date, type=input.time)
// RSI
src         = input(title="Source", defval=close, type=input.source)
rsi_length  = input(title="RSI Length", defval=def_rsi_length, minval=1, type=input.integer)
overbought_threshold = input(title="Overbought threshold", defval=def_overbought_value, type=input.float)
oversold_threshold   = input(title="Oversold threshold", defval=def_oversold_value, type=input.float)
// Moving average
slow_ma_length = input(title="Slow MA length", defval=def_slow_ma_length, type=input.integer)
fast_ma_length = input(title="Fast MA length", defval=def_fast_ma_length, type=input.integer)
ma_choice = input(title="MA choice", defval="EMA", options=["SMA", "EMA"])
// Input ticker
tick   = input(title="Ticker size", defval=def_tick, type=input.float)
filter = input(title="Trend Filter", defval=def_filter, type=input.bool)
// Trailing stop (%)
ts_rate = input(title="Trailing Stop %", defval=def_trailing_stop, type=input.float)


//***********
// RSI
//***********
// Calculate RSI
up   = rma(max(change(src), 0), rsi_length)
down = rma(-min(change(src), 0), rsi_length)
rsi = (down == 0 ? 100 : (up == 0 ? 0 : 100-100/(1+up/down)))


//***********
// Moving averages
//***********
slow_ma = (ma_choice == "SMA" ? sma(close, slow_ma_length) : ema(close, slow_ma_length))
fast_ma = (ma_choice == "SMA" ? sma(close, fast_ma_length) : ema(close, fast_ma_length))
// Show the moving averages
plot(slow_ma, color=color.white,  title="Slow MA")
plot(fast_ma, color=color.yellow, title="Fast MA")


//***********
// Strategy
//***********
if true
    // Determine the entry conditions (only market entry and market exit conditions)
    // Long position
    ConditionEntryL := (filter == true ? (fast_ma > slow_ma and close > slow_ma and rsi < oversold_threshold) : (fast_ma > slow_ma and rsi < oversold_threshold))
    // Short position
    ConditionEntryS := (filter == true ? (fast_ma < slow_ma and close < slow_ma and rsi > overbought_threshold) : (fast_ma < slow_ma and rsi > overbought_threshold))
   
    // Calculate the trailing stop
    ts_calc = close * (1/tick) * ts_rate * 0.01

    // Submit the entry orders and the exit orders
    // Long position
    if ConditionEntryL
        strategy.entry("RSI Long", strategy.long)
    // Exit from a long position
    strategy.exit("Exit Long", "RSI Long", trail_points=0, trail_offset=ts_calc)

    // Short position 
    if ConditionEntryS
        strategy.entry("RSI Short", strategy.short)
    // Exit from a short position
    strategy.exit("Exit Short", "RSI Short", trail_points=0, trail_offset=ts_calc)

// Highlights long conditions
bgcolor (ConditionEntryL ? color.navy : na, transp=60, offset=1, editable=true, title="Long position band")
// Highlights short conditions
bgcolor (ConditionEntryS ? color.olive : na, transp=60, offset=1, editable=true, title="Short position band")